我有一个自定义对话框dynpro,其中包括一个名为DYN_MATNR的输入字段作为列表框,我已经为其列出了一个特定材料列表作为选择。
当对话框dynpro打开时,我如何设置(列表中的)特定材料?
对话框的PBO:
data lt_values type vrm_values.
select matnr,
maktx
into table @data(lt_materials)
from makt
where matnr in @so_matnr
and spras = 'D'
order by matnr.
loop at lt_materials assigning field-symbol(<material>).
append initial line to lt_values assigning field-symbol(<value>).
<value>-key = <material>-matnr.
<value>-text = <material>-maktx.
endloop.
call function 'VRM_SET_VALUES'
exporting
id = 'DYN_MATNR'
values = lt_values
exceptions
id_illegal_name = 1
others = 2.
if sy-subrc <> 0.
" ...
endif.这是可行的,它将材料列表显示为列表框值。为了选择一种特定的材料,我已经包括了FM DYNP_VALUES_UPDATE之后,也在PBO中,但这是行不通的:
data lv_stepl type syst-stepl.
call function 'DYNP_GET_STEPL'
importing
povstepl = lv_stepl
exceptions
stepl_not_found = 1
others = 2.
if sy-subrc <> 0.
" ...
endif.
data(lt_dynpfields) = value dynpread_tabtype(
( fieldname = 'DYN_MATNR'
stepl = lv_stepl
fieldvalue = gcl_helper->get_matnr( ) " matnr which should be selected is stored here
fieldinp = space )
).
call function 'DYNP_VALUES_UPDATE'
exporting
dyname = sy-repid
dynumb = sy-dynnr
tables
dynpfields = lt_dynpfields
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.我也不能直接设置DYN_MATNR,因为它在PBO中是不可用的。
有什么暗示吗?
发布于 2022-04-27 02:07:18
明白了:
您需要另外定义一个全局(!)变量,具有输入字段的名称和(愿望)类型(例如,在报告的顶部或动态逻辑的单独包含中):
data dyn_matnr type matnr.然后可以在PBO中直接设置dynpro字段的初始值:
dyn_matnr = gcl_helper->get_matnr( ).由于在使用各种对话框动态时,这会变得相当烦人,所以我建议在这些变量和输入字段中包括dynpro数。
https://stackoverflow.com/questions/72022068
复制相似问题