在dialog程序中我们会添加自定义的search help,满足多个需求.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_MATNR'
value_org = 'S' "S-structure / C - ceil
callback_program = sy-repid
callback_form = 'CB_FORM' "form 调用
TABLES
value_tab = itab
return_tab = return_tab
field_tab = lt_field_tab
dynpfld_mapping = map_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
可以在callback_form中写上这段逻辑:
retfield 代表DATA ELEMENT对应的Search help;dynprofield表是屏幕上的字段;value_tab表示弹出框的内容;field_tab表示内容的header信息;return_tab表示选中行的信息;dynpfld_mapping 表示其他需要mapping到屏幕上的field,
FORM cb_form TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
在shlp-interface中加上其他按照第一项的模式给其他字段附上值。
对于 直接show出信息的search help,怎么把其他的字段赋值:
CALL FUNCTION 'DYNP_VALUES_READ' *取屏幕字段的已有值
CALL FUNCTION 'F4IF_DETERMINE_SEARCHHELP' *根据表名和字段名确定使用哪个搜索帮助
CALL FUNCTION 'F4IF_START_VALUE_REQUEST' *根据条件打开指定的搜索帮助
CALL FUNCTION 'DYNP_VALUES_UPDATE' *更新屏幕字段 在这里对table dynpfields 的模式加上其他的字段的信息
MODULE ztmdno_dr_help INPUT.
DATA:
l_lifnr TYPE ztmt018-lifnr,
l_zvehtab TYPE ztmt018-zvehtab,
l_zvehid TYPE ztmt018-zvehid.
CLEAR: gt_dynfields,gh_dynfields,it_return[],it_ztmdno[],ih_ztmdno.
gh_dynfields-fieldname = 'PRE_DATA-LIFNR'.
APPEND gh_dynfields TO gt_dynfields.
CLEAR gh_dynfields.
gh_dynfields-fieldname = 'PRE_DATA-ZVEHTAB'.
APPEND gh_dynfields TO gt_dynfields.
----------------------获取屏幕的值
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = gt_dynfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE '函数DYNP_VALUES_READ,未能取值' TYPE 'E'.
EXIT.
ENDIF.
READ TABLE gt_dynfields INTO gh_dynfields WITH KEY fieldname = 'PRE_DATA-LIFNR'.
IF sy-subrc = 0.
l_lifnr = gh_dynfields-fieldvalue.
ENDIF.
READ TABLE gt_dynfields INTO gh_dynfields WITH KEY fieldname = 'PRE_DATA-ZVEHTAB'.
IF sy-subrc = 0.
IF gh_dynfields-fieldvalue IS INITIAL.
MESSAGE '请先输入车牌号' TYPE 'I'.
EXIT.
ENDIF.
l_zvehtab = gh_dynfields-fieldvalue.
ENDIF.
SELECT SINGLE zvehid
INTO l_zvehid
FROM ztmt018
WHERE lifnr = l_lifnr
AND zvehtab = l_zvehtab.
SELECT ztmdno
ztmdname
ztmmob
zvehid
INTO TABLE it_ztmdno
FROM ztmt025
WHERE zvehid = l_zvehid.
IF it_ztmdno[] IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZTMDNO_DR'
dynpprog = sy-repid
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = it_ztmdno[]
return_tab = it_return[]
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.
READ TABLE it_return INDEX 1.
IF sy-subrc = 0.
pre_data-ztmdno_dr = it_return-fieldval.
READ TABLE it_ztmdno INTO ih_ztmdno WITH KEY zvehid = l_zvehid.
IF sy-subrc = 0.
CLEAR gh_dynfields.
gh_dynfields-fieldname = 'PRE_DATA-ZTMDNAME_DR'.
gh_dynfields-fieldvalue = ih_ztmdno-ztmdname_dr.
APPEND gh_dynfields TO gt_dynfields.
CLEAR gh_dynfields.
gh_dynfields-fieldname = 'PRE_DATA-ZTMMOB'.
gh_dynfields-fieldvalue = ih_ztmdno-ztmmob.
APPEND gh_dynfields TO gt_dynfields.
---------------------更新屏幕的值
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = gt_dynfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE. " ZTMDNO_DR_HELP INPUT
TYPES: shlp_descr_t TYPE shlp_descr .
DATA: BEGIN OF itab OCCURS 0 ,
matnr LIKE mara-matnr ,
maktx LIKE makt-maktx ,
meins LIKE mara-meins,
END OF itab.
DATA: return_tab TYPE ddshretval OCCURS 0 .
PARAMETERS: p_matnr LIKE itab-matnr ,
p_maktx LIKE itab-maktx ,
p_meins LIKE mara-meins.
INITIALIZATION.
SELECT a~matnr a~maktx b~meins INTO TABLE itab FROM makt AS a INNER JOIN mara AS b ON a~matnr = b~matnr UP TO 20 ROWS
WHERE spras = '1'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr .
PERFORM f4.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
FORM f4.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_MATNR'
value_org = 'S'
callback_program = sy-repid
callback_form = 'FRM_GET_TEXT'
TABLES
value_tab = itab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM. "f4
*&---------------------------------------------------------------------*
*& Form cb_form
*&---------------------------------------------------------------------*
FORM frm_get_text TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '2'.
interface-valfield = 'P_MAKTX'.
APPEND interface TO shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '3'.
interface-valfield = 'P_MEINS'.
APPEND interface TO shlp-interface.
ENDFORM. "bo_callback_form