Select Dynpro 启动时的特定列表框值?
Select particular listbox value on start of Dynpro?
我有一个自定义对话框 dynpro,其中包含一个名为 DYN_MATNR
的输入字段作为列表框,我为其包含了一个特定 material 的列表作为 selection。
如何在打开对话框 dynpro 时将(该列表的)特定 material 设置为 selected?
对话框动态程序的 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.
这有效,它将 material 的列表显示为列表框值。对于 select 一个特定的 material 我已经包括了 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 中不可用。
有什么提示吗?
知道了:
您需要另外定义一个全局(!)变量,其中包含输入字段的名称和(希望的)类型(例如,在报告的顶部包含或在 dynpro 逻辑的单独包含中):
data dyn_matnr type matnr.
那么可以直接在PBO中设置dynpro字段的初始值:
dyn_matnr = gcl_helper->get_matnr( ).
因为这在使用各种对话框 dynpros 时变得相当烦人,我建议在这些变量和输入字段中包括 dynpro 编号。
我有一个自定义对话框 dynpro,其中包含一个名为 DYN_MATNR
的输入字段作为列表框,我为其包含了一个特定 material 的列表作为 selection。
如何在打开对话框 dynpro 时将(该列表的)特定 material 设置为 selected?
对话框动态程序的 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.
这有效,它将 material 的列表显示为列表框值。对于 select 一个特定的 material 我已经包括了 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 中不可用。
有什么提示吗?
知道了:
您需要另外定义一个全局(!)变量,其中包含输入字段的名称和(希望的)类型(例如,在报告的顶部包含或在 dynpro 逻辑的单独包含中):
data dyn_matnr type matnr.
那么可以直接在PBO中设置dynpro字段的初始值:
dyn_matnr = gcl_helper->get_matnr( ).
因为这在使用各种对话框 dynpros 时变得相当烦人,我建议在这些变量和输入字段中包括 dynpro 编号。