在还没按F8前, selection-screen中的field所键入的值是取不到的.
PARAMETERS: pr_pro TYPE char3. 我们无法取得pr_pro的值, 在按F8执行后, pr_pro
的值就可以取到了.
PARAMETERS: pr_pro TYPE char3. 我们无法取得pr_pro的值, 在按F8执行后, pr_pro
的值就可以取到了.
那有没有可以在按F8前取到pr_pro里填的值呢? 那就要用FM: DYNP_VALUES_READ了
下面是应用的代码, 根据pr_pro所键入的省, 去确定pr_city里的search help
TYPES: BEGIN OF ty_test,
pro TYPE char3,
END OF ty_test.
TYPES: BEGIN OF ty_test2,
city TYPE char3,
END OF ty_test2.
DATA: lt_dynp_read TYPE TABLE OF dynpread,
lw_dynp_read TYPE dynpread.
DATA: lt_value TYPE STANDARD TABLE OF ty_test,
lw_value TYPE ty_test.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-t01.
PARAMETERS: pr_pro TYPE char3,
pr_city TYPE char2.
SELECTION-SCREEN END OF BLOCK blk1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_pro.
CLEAR lt_value.
lw_value = '广东'.
APPEND lw_value TO lt_value.
lw_value = '浙江'.
APPEND lw_value TO lt_value.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PRO'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PR_PRO'
value_org = 'S'
TABLES
value_tab = lt_value
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_city.
lw_dynp_read-fieldname = 'PR_PRO'.
APPEND lw_dynp_read TO lt_dynp_read.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = '1000'
TABLES
dynpfields = lt_dynp_read
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.
READ TABLE lt_dynp_read INTO lw_dynp_read INDEX 1.
IF lw_dynp_read-fieldvalue = '广东'.
CLEAR lt_value.
lw_value = '广州'.
APPEND lw_value TO lt_value.
lw_value = '东莞'.
APPEND lw_value TO lt_value.
lw_value = '汕头'.
APPEND lw_value TO lt_value.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PRO'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PR_PRO'
value_org = 'S'
TABLES
value_tab = lt_value
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
IF lw_dynp_read-fieldvalue = '浙江'.
CLEAR lt_value.
lw_value = '杭州'.
APPEND lw_value TO lt_value.
lw_value = '温州'.
APPEND lw_value TO lt_value.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PRO'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PR_PRO'
value_org = 'S'
TABLES
value_tab = lt_value
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
ENDIF.
ENDIF.