HELLO ,这里是百里,一个学习中的ABAPER ,在工作中会出现数据量非常大的情况,比如接口,比如大型常用的ALV报表.这时,用户往往会体验非常差. 在web端一般会有个提示说什么等待啊,百分比啊等等.总之就是给用户更好的交互.要不就卡在一个界面对用用户来说体验非常差. 那么就讲到今天的内容,显示当前查询进度.

为什么要显示查询进度

记得在前端时候学过一个知识,就是说用户的等待时间不会超过3秒.意思就是说,当某个界面卡了3秒以上,用户机会觉得体验非常差.如果我们在等待数据中增加一个动画效果,或者提示内容的话虽然解决不了卡的问题,但是给用的体验相对而言还是不错的.在SAP中我们可以通过调用系统函数的方式进行实现该功能,显示当前查询的进度.

语法介绍

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' 
EXPORTING
text = lv_text.

我们在选择屏幕界面,ALV过账界面,按钮,数据下发等等使用时均可以使用该函数.

案例

我们这里拿VBAP表做一个简单的例子,这个例子是展示当前循环的行数,当循环完成时我们提示一个导入成功 .

数据准备

TABLES :vbap .


data: gw_Data TYPE vbap .
data: gt_Data TYPE table of vbap .

data : lv_pect TYPE p .

select * from vbap into CORRESPONDING FIELDS OF table gt_Data .

data(lv_line) = lines( gt_data ) .

创建子例程

FORM frm_show_progress   USING pv_text lv_mes.

DATA : lv_text TYPE c LENGTH 20.

IF pv_text IS INITIAL.

lv_text = TEXT-001.

ELSE.

lv_text = pv_text.

ENDIF.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

text = lv_text && '/' && lv_mes.
IF lv_text = lv_mes.
MESSAGE '导入成工' TYPE 'I' .

ENDIF.

ENDFORM.

调用子例程

我们这里直接在 START-OF-SELECTION . 中进行调用,当然还有很多中情况, 一般在选择屏幕阶段可能会非常多.

LOOP AT gt_Data into data(gs_Data) .


lv_pect = sy-tabix .

PERFORM frm_show_progress USING lv_pect lv_line.


ENDLOOP.

通过循环内表数据我们过去对应的行数,可以在GET_DAta 的界面进行显示该函数 .

结果

总共3685个数据,在循环中的数据在一直变动. 当然百分比也可以,具体的自己写逻辑,这里只讲述一个用法.

ABAP之显示当前查询进度_前端

当数据全部执行完毕后,显示导入成功.

ABAP之显示当前查询进度_后端_02

技术总结

今天讲述的内容,可以说是经常使用,因为在SAP中数据量是非常大的,我们难免会有等待的情况,增加了该函数在代码中可以给用户更好的感官.多少可以让用户知道,我还要等多久.

百里鸡汤

看了本书,是法医推荐的,叫做蛤蟆先生去看心理医生.

困惑是学习过程的第一阶段,这说明固有知识的局限开始被打破了。你要直面新的信息,这些新的信息会挑战你现有的观念和行为模式。由此产生的焦虑是让你改变的动力,很可能也会开启你的 创造力 .

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.

ABAP之显示当前查询进度_前端_03