常用的屏幕逻辑流有PBO和PAI,还有不常用的POV和POH,POV就是
PROCESS ON VALUE-REQUEST.
FIELD FIELD_NAME MODULE F4_MODULE. "当用户按下查询帮助按键时(或按下F4)被触发,事件结束后将继续处理当前屏幕。
我们要根据屏幕字段的输入值来判断加入的搜索帮助的值,所以要先获取屏幕字段
CLEAR: dynpfields, dynpfields[].
dynpfields-fieldname = 'name'. "填入需要读值的字段名
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpfields
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
READ TABLE dynpfields WITH KEY fieldname = 'name'.
name = dynpfields-fieldvalue. "备注
ENDIF.
根据上述函数获取到需要的屏幕字段的值name
CLEAR: lt_tescdy[]. 搜索帮助值的内表
IF name = '1'.
SELECT * FROM z10tescdy
INTO CORRESPONDING FIELDS OF TABLE lt_tescdy
WHERE zscbh LIKE '%B'
AND zstat EQ '1'.
ELSE.
SELECT * FROM z10tescdy
INTO CORRESPONDING FIELDS OF TABLE lt_tescdy
WHERE zscbh LIKE '%N'
AND zstat EQ '1'.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ZSCBH'
* PVALKEY = ' '
DYNPPROG = sy-repid
DYNPNR = sy-dynnr
DYNPROFIELD = 'ZBANH'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
tables
value_tab = lt_tescdy[]
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
通过上述函数建立自定义搜索帮助。