ABAP获取屏幕字段的值

ABAP获取屏幕字段的值

Monday, February 18, 2019

1:12 PM

 

ABAP 处理屏幕事件中存在4个常见的逻辑流:
1. PBO  – PROCESS BEFORE OUTPUT.  
 该事件在屏幕出来之前被触发。

2.  PAI  –  PROCESS AFTER INPUT.
 在屏幕出来之后,负责处理用户的操作响应
 
3. POH   –  PROCESS ON HELP-REQUEST.
 
 处理用户帮助请求(F1) 时响应处理操作,  如当用户按下F1 被触发

4.  POV   –   PROCESS ON VALUE-REQUEST.
处理用户值查询帮助(F4) 时响应处理操作。  Value Search Help 的处理

   

PBO 为在Screen 显示之前,SAP 系统会自动将程序变量(屏幕上的值)放到屏幕字段中。 接着在屏幕显示之后,用户PAI 事件如果触发,系统会自动屏幕字段的值更新到相应的程序变量。

这里需要注意的是: POH 和 POV 的触发中,这时去获取Screen 的字段值 需要使用 Function: DYNP_VALUES_READ 来实现。 原因为: POH 或 POV 触发时 PAI 并没有执行, Screen 字段的值还没有更新到程序变量中。

 

 

 

下例中为通过屏幕参数来控制是否可以选择多文件上传。

 

 

Example:

 

 

*&———————————————————————*

*& Report  ZBC_UPLOAD01

*&———————————————————————*

* Identification

*  Report/Program  : ZBC_UPLOAD01

*  Transaction     :

*  Author          : Wei.Zhu

*  Owner           : IDES01

*  Creation date   : 2019.02.18

*  Project         : N/A

*  Dev. under SAP  : ECC

*&———————————————————————*

*  Attributes

*   Type           : REPORT

*   Develop.-Class : ZBC_COMMON

*———————————————————————*

*  Description (short)

*

*———————————————————————*

* Change-history

* 2019.02.18 TR#NPLK900057 Wei.Zhu    New Creation.

*———————————————————————*

 

REPORT zbc_upload01.

 

TABLESfile_table.

 

“Define Data

TYPESBEGIN OF ty_tab,

         f1 TYPE string,

         f2 TYPE string,

         f3 TYPE string,

       END OF ty_tab.

 

DATAgt_tab1 TYPE STANDARD TABLE OF ty_tab,

      gs_tab1 TYPE ty_tab.

 

DATAlv_file_name TYPE string,

      lt_file_name TYPE filetable.

 

DATAlv_subrc TYPE sysubrc.

 

“—Selection Screen—

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT001.

SELECT-OPTIONSs_fn FOR file_table NO INTERVALS.

SELECTION-SCREEN END OF BLOCK b1.

 

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT002.

PARAMETERSp_c1 AS CHECKBOX DEFAULT ‘X’.

SELECTION-SCREEN END OF BLOCK b2.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_fnlow.

*  p_c1 = zcl_bc_common=>get_dynp_values(

*    EXPORTING

*      iv_repid = sy-repid

*      iv_dynnr = sy-dynnr

*      iv_field_name = ‘P_C1’

*      ).

 

  PERFORM get_dynp_values USING ‘P_C1’

                          CHANGING p_c1.

 

  CALL METHOD cl_gui_frontend_services=>file_open_dialog

    EXPORTING

*     WINDOW_TITLE            =

*     DEFAULT_EXTENSION       =

*     DEFAULT_FILENAME        =

*     FILE_FILTER             =

      initial_directory       ‘c:\temp’

      multiselection          p_c1

    CHANGING

      file_table              lt_file_name

      rc                      lv_subrc

*     USER_ACTION             =

    EXCEPTIONS

      file_open_dialog_failed 1

      cntl_error              2

      error_no_gui            3

      OTHERS                  4.

  IF sysubrc <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

 

  “—Start-of-selection—

 

START-OF-SELECTION.

 

 

FORM get_dynp_values USING pv_field_name TYPE dynpreadfieldname

                     CHANGING chg_field_value.

  DATAlt_dynpfield TYPE TABLE OF dynpread,

        ls_dynpfield TYPE dynpread.

 

  CLEARlt_dynpfield.

  ls_dynpfieldfieldname pv_field_name.

  APPEND ls_dynpfield TO lt_dynpfield.

 

  CALL FUNCTION ‘DYNP_VALUES_READ’

    EXPORTING

      dyname             syrepid

      dynumb             sydynnr

      translate_to_upper ‘X’

    TABLES

      dynpfields         lt_dynpfield

    EXCEPTIONS

      OTHERS             9.

  IF sysubrc 0.

    READ TABLE lt_dynpfield INTO ls_dynpfield

    WITH KEY fieldname pv_field_name.

    chg_field_value ls_dynpfieldfieldvalue.

  ENDIF.

ENDFORM.

 

 

 

 

独立构建为通用Method: GET_DYNP_VALUES

 

 

 

*———————————————————————*

* Class: ZCL_BC_COMMON

* Method Name: GET_DYNP_VALUES

* Author: WEI.ZHU

* Date: 2019.02.18

*———————————————————————*

* Description (short)

* Get Dynpro Values

*———————————————————————*

* Change-history

* 2019.02.18 TR#NPLK900057 Wei.Zhu    New Creation.

*———————————————————————*

 

  METHOD get_dynp_values.

    DATAlt_dynpfield TYPE TABLE OF dynpread,

          ls_dynpfield TYPE dynpread.

 

    CLEARlt_dynpfield.

    ls_dynpfieldfieldname iv_field_name.

    APPEND ls_dynpfield TO lt_dynpfield.

 

    CALL FUNCTION ‘DYNP_VALUES_READ’

      EXPORTING

        dyname             iv_repid

        dynumb             iv_dynnr

        translate_to_upper ‘X’

      TABLES

        dynpfields         lt_dynpfield

      EXCEPTIONS

        OTHERS             9.

    IF sysubrc 0.

      READ TABLE lt_dynpfield INTO ls_dynpfield

      WITH KEY fieldname iv_field_name.

      rv_result ls_dynpfieldfieldvalue.

    ENDIF.

  ENDMETHOD.

Leave a Comment