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 编号。