ABAP DIALOG開發基本技術參考(主窗體100的INCLUDE-OOP ALV技術)

这篇博客介绍了ABAP中使用DIALOG进行开发,特别是主窗体100的ALV技术。内容包括事件处理如数据改变、F4帮助、按钮点击等,以及如何注册和处理这些事件。通过示例代码展示了如何处理数据变化、获取和修改单元格值,并提供了ALV字段描述和排除表单功能的实现。
摘要由CSDN通过智能技术生成

 *&---------------------------------------------------------------------*
*&  Include           ZINCLUDE_MM079
*&---------------------------------------------------------------------*
FORM GET_CELL USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
                    FP_ROWID FP_FNAME FP_VALUE.
     CALL METHOD er_data_changed->get_cell_value
              EXPORTING
               i_row_id    = FP_ROWID
               i_fieldname = FP_FNAME
              IMPORTING
               e_value     = FP_VALUE.
ENDFORM.
FORM MODIFY_CELL USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
                       FP_ROWID FP_FNAME FP_VALUE.
     CALL METHOD er_data_changed->modify_cell
                  EXPORTING
                    i_row_id    = FP_ROWID
                    i_fieldname = FP_FNAME
                    i_value     = FP_VALUE.
ENDFORM.
FORM handle_data_changed USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
  data: wa_mod_data TYPE lvc_s_modi.
  data: L_NETWR LIKE VBAP-NETWR,
        L_NETPR LIKE VBAP-NETPR,
        L_KWMENG LIKE VBAP-KWMENG.
     CLEAR: L_NETWR.
     if er_data_changed is not initial.  "數據有變化
       ...
     endif.
     SORT er_data_changed->mt_mod_cells by row_id.
     loop at er_data_changed->mt_mod_cells into wa_mod_data.
*          if wa_mod_data-fieldname = 'KWMENG'.
*                PERFORM GET_CELL USING er_data_changed  wa_mod_data-row_id 'NETPR' L_NETPR.
*                L_NETWR = L_NETPR * wa_mod_data-value.
*                PERFORM MODIFY_CELL USING er_data_changed wa_mod_data-row_id 'NETWR' L_NETWR.
*          endif.
     endloop.
ENDFORM.

CLASS lcl_alv_receiver100 DEFINITION .
   PUBLIC SECTION.
     DATA: L_INDEX LIKE SY-TABIX.
     METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
             IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
     METHODS handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
             IMPORTING e_fieldname es_row_no er_event_data et_bad_cells.
     METHODS handle_button_click FOR EVENT button_click OF cl_gui_alv_grid
                                 IMPORTING ES_COL_ID ES_ROW_NO.  "Column ID / Numeric Row ID

    " METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
       IMPORTING e_ucomm.

    " METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
       IMPORTING
         e_object e_interactive.


ENDCLASS.                    "lcl_event_receiver DEFINITION

CLASS lcl_alv_receiver100 IMPLEMENTATION.
  METHOD handle_data_changed.
      PERFORM handle_data_changed USING er_data_changed.
  ENDMETHOD.                    "handle_data_changed
  METHOD handle_f4.
      "PERFORM handle_f4_sel USING e_fieldname es_row_no er_event_data et_bad_cells.
  ENDMETHOD.
  METHOD handle_button_click.
       L_INDEX = ES_ROW_NO-ROW_ID.
       READ TABLE IT_RESULT INTO IT_RESULT INDEX L_INDEX.
       CASE 'X'.
          WHEN P_RAD1.  CALL SCREEN 0200 STARTING AT 5 2 ENDING AT 89 17.
          WHEN P_RAD2.  CALL SCREEN 0201 STARTING AT 5 2 ENDING AT 89 17.
          WHEN OTHERS.
               G_SAVE = 'N'.    "為了不執行修改,刷新
       ENDCASE.
       IF G_SAVE = 'Y'.
            MODIFY IT_RESULT FROM IT_RESULT INDEX L_INDEX.
            PERFORM ALV_REFRESH.
            PERFORM CHECK_SELECT USING L_INDEX.
       ENDIF.
  ENDMETHOD.

 

  METHOD handle_toolbar.
*  Event handler method for event toolbar.
    CONSTANTS:
*  Constants for button type
      c_button_normal           TYPE i VALUE 0,
      c_menu_and_default_button TYPE i VALUE 1,
     c_menu                    TYPE i VALUE 2,
      c_separator               TYPE i VALUE 3,
      c_radio_button            TYPE i VALUE 4,
      c_checkbox                TYPE i VALUE 5,
      c_menu_entry              TYPE i VALUE 6.


ENDCLASS.               "lcl_ALV_event_receiver
DATA: CC0100 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: CCALV100 TYPE REF TO cl_gui_alv_grid.
DATA: g_alv_application100 TYPE REF TO lcl_alv_receiver100.
DATA: LT_EXCLUDE100   TYPE UI_FUNCTIONS.
DATA: L_VAR100    TYPE DISVARIANT.
DATA: L_LAY100    TYPE LVC_S_LAYO.
DATA:  IT_FIELDCAT TYPE LVC_T_FCAT,
       TY_FIELDCAT TYPE LVC_S_FCAT.
CONTROLS: TRIP TYPE TABSTRIP.
DATA: L_SM_NAME TYPE TDSFNAME.

FORM ADD_FIELD_DES USING L_EDIT_MASK TYPE C
                         L_EDIT      TYPE C
                         L_FIELDNAME TYPE C
                         L_TABNAME   TYPE C
                         L_KEY       TYPE C
                         L_CHECKBOX  TYPE C
                         L_F4        TYPE C
                         L_REF_FLD   TYPE C
                         L_REF_TAB   TYPE C
                         L_SELTEX_L  TYPE C
                         L_OUTPUTLEN TYPE I.

  CLEAR TY_FIELDCAT.
  TY_FIELDCAT-EDIT_MASK  = L_EDIT_MASK.
  TY_FIELDCAT-EDIT       = L_EDIT.
  TY_FIELDCAT-FIELDNAME  = L_FIELDNAME."must upper case
  TY_FIELDCAT-TABNAME    = L_TABNAME.  "internal table name
  TY_FIELDCAT-KEY        = L_KEY.      "column with key-color AND frozen
  TY_FIELDCAT-CHECKBOX   = L_CHECKBOX. "the column is checkbox
  TY_FIELDCAT-F4AVAILABL = L_F4.
  TY_FIELDCAT-REF_FIELD  = L_REF_FLD.
  TY_FIELDCAT-REF_TABLE  = L_REF_TAB.
  TY_FIELDCAT-COLTEXT    = L_SELTEX_L.
  TY_FIELDCAT-SELTEXT    = L_SELTEX_L.
  TY_FIELDCAT-OUTPUTLEN  = L_OUTPUTLEN.
  CASE L_FIELDNAME.
    WHEN 'TEXT1'. TY_FIELDCAT-DRDN_HNDL = '1'.
    WHEN 'PAYWY'. TY_FIELDCAT-DRDN_HNDL = 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值