在POV事件中,因為沒有經過PAI直接進入POV中的MODULE,所以直接調用屏幕中的字段並沒有值,所以要
用DYNP_VALUES_READ讀取屏幕字段的值,且讀取的值格式為輸入的格式。
當使用DYNP_VALUES_READ時,所讀取的屏幕應正在加載中。
讀取屏幕字段
DATA:BEGIN OF ls_help, bukrs TYPE ztfi_zbztyp_help-bukrs, zzbztype TYPE ztfi_zbztyp_help-zzbztype, zbzname TYPE ztfi_zbztyp_help-zbzname, END OF ls_help, lt_help LIKE STANDARD TABLE OF ls_help. DATA: lt_return TYPE TABLE OF ddshretval. DATA: lt_dynp TYPE TABLE OF dynpread. DATA: lv_bukrs TYPE ztfi_zbztyp_help-bukrs. CLEAR: lt_return, lt_dynp, lv_bukrs. * GET CURSOR LINE L_LINES_VB. lt_dynp = VALUE #( ( fieldname = 'ZTFI_ZBZTYP_HELP-BUKRS' ) ). CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = lt_dynp. IF sy-subrc EQ 0. IF line_exists( lt_dynp[ fieldname = 'ZTFI_ZBZTYP_HELP-BUKRS' ] ). lv_bukrs = lt_dynp[ fieldname = 'ZTFI_ZBZTYP_HELP-BUKRS' ]-fieldvalue. ENDIF. ENDIF.
F4搜索幫助
IF lv_bukrs IS NOT INITIAL. SELECT bukrs zzbztype zbzname FROM ztfi_zbztyp_help INTO TABLE lt_help WHERE bukrs = lv_bukrs. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'ZZBZTYPE' "指定要返回屏幕參數的在內表中的field * PVALKEY = ' ' dynpprog = sy-repid "指定屏幕參數所在的程序名稱 dynpnr = sy-dynnr "指定參數所在的屏幕編號 * dynprofield = ztfi_zbztyp_help-zzbztype * STEPL = 0 * WINDOW_TITLE = * VALUE = ' ' VALUE_ORG = 'S' * MULTIPLE_CHOICE = ' ' * DISPLAY = ' ' * CALLBACK_PROGRAM = ' ' * CALLBACK_FORM = ' ' * CALLBACK_METHOD = * MARK_TAB = * IMPORTING * USER_RESET = tables value_tab = lt_help * FIELD_TAB = return_tab = lt_return * DYNPFLD_MAPPING = * EXCEPTIONS * PARAMETER_ERROR = 1 * NO_VALUES_FOUND = 2 * OTHERS = 3 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. IF line_exists( lt_return[ 1 ] ). ztfi_zbztyp_help-zzbztype = lt_return[ 1 ]-fieldval. ENDIF. ENDIF.