SAP 动态设置选择屏幕的必输标记
----在SAP的ABAP中写选择屏幕时,为屏幕字段增加“OBLIGATORY”后,运行报表时,屏幕字段会出现必输标记。
----但是这种方法有个恶心的,不管在屏幕上点击某功能(帮助类功能除外),都会要求必输,否则不让过。而当屏幕上有些字段是根据选择了某条件来动态显示的,以上设置必输不让过时,选择屏幕不会更新,也就是动态字段不会显示或隐藏。
----有时根据实际需要,在特定的条件下,执行某特定功能时,才要求必输,才要求出现必输标记。如以上屏幕中,要求在上面选择”显示”时,抵消分录类型,不要求必输,不要出现必输标记,在选择创建或修改时,抵消分录类型,才要求必输,才要求出现必输标记。
修改代码如下:
----在事件AT SELECTION-SCREEN OUTPUT中为屏幕字段动态设置必输标记。即将screen-required = ‘2’。
LOOP AT SCREEN.
IF screen-group1 EQ ‘G1’.
screen-required = ‘2’.
ELSEIF screen-group1 = ‘G2’.
IF r01 = ‘X’ OR r02 = ‘X’.
screen-required = ‘2’. "创建或修改时才要求抵消分录类型必输
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
注:screen-required等于1时,等同 增加“OBLIGATORY”;等于2时,只会出现必输标记,执行功能操作时不会提示要求必输,程序会继续运行。但实际需求是某特定条件下还要求必输,未必输不能继续运行程序。因此还需通过代码实现。
----在事件AT SELECTION-SCREEN中根据条件动态提示必输。
IF sy-ucomm = ‘ONLI’.
IF p_congr IS INITIAL OR p_ryear IS INITIAL OR p_monat IS INITIAL.
MESSAGE e001(z001) WITH |请输入必输字段|.
ENDIF.
IF r01 = ‘X’ OR r02 = ‘X’.
IF p_zdxfl = ‘’.
MESSAGE e001(z001) WITH |请输入必输字段|.
ENDIF.
ENDIF.
ENDIF.
那么有人会问,如此大费周折实现这么一个小小的功能有必要吗?我想说的是:好的程序是一幅艺术作品,要求精益求精。一切不考滤用户操作便利性的程序都是耍流氓!初级的APABer往往如此。