DYNP_VALUES_READ 获取屏幕动态值

   在网上看到这样一个问题:获得选择屏幕上checkbox的值,如果值为x,则F4弹出保存文件前台窗口,若checkbox为空,则F4弹出打开文件前台窗口,但在ON VALUE-REQUEST的块中得不到最新的checkbox值,很显然这是屏幕流逻辑的问题,逻辑没有走到PAI,下面提供两种方法:1.在CHECKBOX 后面加USER COMMAND让它触发屏幕流逻辑;2.由于方法1要跑PAI就有可能带来需求上的不便,这时可在VALUE-REQUEST中使用FM:DYNP_VALUES_READ来动态获取选择屏幕上元素的值。指定屏幕号,和程序ID,指定需要获取的屏幕元素文本。

   下面简单写了个例子,写这篇文章主要是引出DYNP_VALUES_READ 函数,在很多时候我们都可以用它;

&---------------------------------------------------------------------*
*& Report  ZLC_DYNP_VALUES_READ
*&
*&---------------------------------------------------------------------*
REPORT  ZLC_DYNP_VALUES_READ.

DATA: IT_DYNPREAD       LIKE  TABLE OF DYNPREAD,
          WA_DYNPREAD     LIKE DYNPREAD.

PARAMETERS C_BOX AS CHECKBOX .

SELECTION-SCREEN BEGIN OF BLOCK BLK1 .
PARAMETERS: P_FNAME    TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END  OF BLOCK  BLK1.

AT SELECTION-SCREEN  ON VALUE-REQUEST FOR P_FNAME.
   CLEAR:     IT_DYNPREAD , WA_DYNPREAD.
  WA_DYNPREAD-FIELDNAME = 'C_BOX'.
  APPEND WA_DYNPREAD TO IT_DYNPREAD.

    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        DYNAME                               = SY-REPID
        DYNUMB                               = '1000'
        TRANSLATE_TO_UPPER         =  ' X'
      TABLES
        DYNPFIELDS                           = IT_DYNPREAD .

 READ TABLE IT_DYNPREAD INTO WA_DYNPREAD WITH KEY FIELDNAME = 'C_BOX'.

 IF SY-SUBRC = 0.
   C_BOX =  WA_DYNPREAD-FIELDVALUE.
 ENDIF.

  IF C_BOX =  'X'.
      PERFORM   FRM_OPEN_DIALOG.
  ELSE.
      PERFORM FRM_SAVE_DIGLOG.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  FRM_OPEN_DIALOG
*&---------------------------------------------------------------------*
FORM FRM_OPEN_DIALOG .
  DATA:  L_WK_RC     TYPE   I,
             L_WK_ACT   TYPE   I.

  DATA:  L_IT_TABLE  TYPE FILETABLE,
             L_WA_TABLE LIKE LINE OF L_IT_TABLE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
   CHANGING
     FILE_TABLE         =  L_IT_TABLE
     RC                      =  L_WK_RC
    USER_ACTION      =  L_WK_ACT.

  READ TABLE L_IT_TABLE  INTO L_WA_TABLE INDEX 1.
  P_FNAME = L_WA_TABLE-FILENAME.

ENDFORM.                    " FRM_OPEN_DIALOG
*&---------------------------------------------------------------------*
*&      Form  FRM_SAVE_DIGLOG
*&---------------------------------------------------------------------*
FORM FRM_SAVE_DIGLOG .
  DATA: L_WK_FNAME        TYPE STRING,
            L_WK_PATH           TYPE STRING,
            L_WK_FULLPATH    TYPE STRING.

      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
        CHANGING
          FILENAME            =  L_WK_FNAME
          PATH                  =  L_WK_PATH
          FULLPATH           =  L_WK_FULLPATH.
ENDFORM.                    " FRM_SAVE_DIGLOG

你可能感兴趣的:(c,File,table,dialog,action)