怎样获取屏幕输入字段的输入值

假设选择屏幕上有2个输入字段,
parameters: p_werks type marc-werks,  "工厂
                 p_matnr type marc-matnr. “物料
为物料输入字段设置F4输入帮助,其F4输入帮助内容是根据工厂值来确定的,就是说物料是输入的工厂下的所有物料。
但是在下列事件为物料设置输入帮助时获取不到屏幕输入的工厂值p_werks,不信可以加断点调试一下。
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_mantr.
我们需要在此调用一个

CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      DYNAME                 = SY-CPROG    
      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
     INVALID_PARAMETER       = 7
     UNDEFIND_ERROR          = 8
     DOUBLE_CONVERSION       = 9
     STEPL_NOT_FOUND         = 10
     OTHERS                  = 11.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
READ TABLE LT_DYNPFIELDS INTO LW_DYNPFIELDS
                           WITH KEY FIELDNAME  = 'P_WERKS'.
IF LW_DYNPFIELDS-FIELDVALUE <> SPACE.
    P_WERKS  =  LW_DYNPFIELDS-FIELDVALUE+0(4). "工厂值
ELSE.
   SET CURSOR FIELD CNS_P_BUKRS.
    MESSAGE E711(ZCM) WITH TEXT-009 SPACE SPACE SPACE.
ENDIF.

以上是对parameter的获取,如果是select-option,分2种情况:
    1. 读取一条值,调用function 'RS_SELECTIONSCREEN_READ',此function只能读取一条,不能读取多条;
   2. 读取多条值,调用function 'RS_REFRESH_FROM_SELECTOPTIONS',此function只能读取多条,不能读取一条。

原文地址:https://www.cnblogs.com/Nirvanacafe/p/4435223.html