在PAI中
在逻辑流中输入以下代码
PROCESS ON VALUE-REQUEST.
FIELD G_BKPF-BLART MODULE SET_F4_HELP.
注意这个语句不能放在loop前,也不能放在user_command前。否则报错:Module specification possible only with FIELD.
具体module代码:
MODULE SET_F4_HELP.
DATA:L_LOW TYPE SY-TABIX,
GT_RETTAB TYPE TABLE OF DDSHRETVAL,
G_RETTAB LIKE LINE OF GT_RETTAB,
GT_SYSTEMS TYPE DYNPREAD OCCURS 0 WITH HEADER LINE.
*获取当前行号
CALL FUNCTION 'DYNP_GET_STEPL'
IMPORTING
POVSTEPL = L_LOW
EXCEPTIONS
STEPL_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*调用F4帮助FUNCTION
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
TABNAME = 'BKPF'
FIELDNAME = 'BLART'
DYNPNR = '9000'
DYNPROFIELD = 'G_BKPF-BLART'
TABLES
RETURN_TAB = GT_RETTAB
EXCEPTIONS
FIELD_NOT_FOUND = 1
NO_HELP_FOR_FIELD = 2
INCONSISTENT_HELP = 3
NO_VALUES_FOUND = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
READ TABLE GT_RETTAB INTO G_RETTAB INDEX 1.
SELECT SINGLE BLART
INTO G_BKPF-BLART
FROM BKPF
WHERE BLART = G_RETTAB-FIELDVAL.
ENDIF.
*更新屏幕上已经修改的字段
GT_SYSTEMS-FIELDNAME = G_BKPF-BLART.
GT_SYSTEMS-STEPL = L_LOW.
GT_SYSTEMS-FIELDVALUE = G_RETTAB-FIELDVAL.
APPEND GT_SYSTEMS.
*更新屏幕上修改的字段值
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-REPID
DYNUMB = '9000'
TABLES
DYNPFIELDS = GT_SYSTEMS
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 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.
ENDMODULE. "SET_F4_HELP