根据先前列表框(模块池)中的选择填充列表框

ListBox to be filled based on the selection in the previous List Box (Module-pool)

我有一个 DYNPRO 010,它有 2 个列表框(下拉列表),我想在选择第一个 PROJ 后自动填充第二个 PEP,无需按下回车键。

当我在 listbox1 中选择一个值并按下 enter 时,它起作用了。

屏幕 010:

PROCESS AFTER INPUT.
  Chain.
    field: 
       wa_screen_010-proj MODULE iniciativa ON REQUEST,
       wa_screen_010-pep  MODULE field_validation.
  Endchain.

模块 iniciativa 的 ABAP 代码:

MODULE iniciativa INPUT.

  DATA: ld_field     TYPE VRM_ID ,
        it_listbox   TYPE VRM_VALUES,
        wa_listbox   LIKE LINE OF it_listbox,
        it_prps      TYPE STANDARD TABLE OF prps,
        wa_prps LIKE LINE OF it_prps.

  SELECT  peps~pspnr peps~posid peps~post1 peps~stufe
         INTO CORRESPONDING FIELDS OF TABLE it_prps
         FROM proj AS proyecto
         LEFT JOIN prps AS peps
         ON proyecto~pspnr = peps~psphi
         WHERE proyecto~pspid  = WA_SCREEN_010-PROJ .

  DELETE it_prps where stufe ne 2.

   loop at it_prps into wa_prps.
    wa_listbox-key = wa_prps-posid .
    wa_listbox-text = wa_prps-posid.
    append wa_listbox to it_listbox.
  endloop.

   ld_field = 'WA_SCREEN_010-INICIATIVA'.
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = ld_field
      values = it_listbox.

您必须通过为第一个列表框分配功能代码来激活它。这会触发 PAI-PBO 循环。确保功能代码不会触发任何不需要的功能。