ABAP OOALV DATA_CHANGED 中PROTOCOL 的应用

相关类 CL_GUI_ALV_GRID ,CL_ALV_CHANGED_DATA_PROTOCOL

事件 DATA_CHANGED

首先PROTOCOL只能写在DATA CHANGED事件里面,在其它地方是无效的,所以在需要PROTOCOL的时候,一般需要强制的去触发DATA_CHANGED事件(比如点保存按钮的时候,强制触发DATA_CHANGED)

一 强制触发DATA_CHANGED的写法

  CALL METHOD GO_ALVGRID_RIGHT->IF_CACHED_PROP~SET_PROP 
        EXPORTING
          PROPNAME           = 'GridModified' "单元格假修改
          PROPVALUE          = '1'
        EXCEPTIONS
          PROP_NOT_FOUND     = 1
          INVALID_NAME       = 2
          ERROR_SET_PROPERTY = 3
          OTHERS             = 4
              .
      IF SY-SUBRC <> 0.
*       Implement suitable error handling here
      ENDIF.

      CALL METHOD GO_ALVGRID_RIGHT->CHECK_CHANGED_DATA
*        IMPORTING
*          E_VALID   =
*        CHANGING
*          C_REFRESH = 'X'
          .

 二、添加protocol,调用方法ADD_PROTOCOL_ENTRY,消息类可以在SE91去创建,然后加在这里

FORM FRM_HANDLE_DATA_CHANGED USING PR_DATA_CHANGED
                              TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
                              P_UCOMM TYPE SY-UCOMM.

  DATA LS_MODCELL TYPE LVC_S_MODI .
  READ TABLE PR_DATA_CHANGED->MT_MOD_CELLS INTO LS_MODCELL INDEX 1 .
  IF SY-UCOMM EQ GC_SAVE.
   LOOP AT GT_TABLE_RIGHT WHERE ZPJBH IS INITIAL OR ZWRBTR IS INITIAL
                          AND ZXZ EQ GC_X  .
     IF GT_TABLE_RIGHT-ZPJBH  IS INITIAL  .

        CALL METHOD PR_DATA_CHANGED->ADD_PROTOCOL_ENTRY
         EXPORTING
            I_MSGID     = 'ZSSFDZ'
            I_MSGTY     = 'E'
            I_MSGNO     = '000'
*            I_MSGV1     = 'ZPJBH is required'
*            I_MSGV2     =
*            I_MSGV3     =
*            I_MSGV4     =
            I_FIELDNAME = 'ZPJBH'
*            I_ROW_ID    =
             I_TABIX     = SY-TABIX
        .
      ENDIF.
      IF  GT_TABLE_RIGHT-ZWRBTR IS INITIAL.

        CALL METHOD PR_DATA_CHANGED->ADD_PROTOCOL_ENTRY
          EXPORTING
            I_MSGID     = 'ZSSFDZ'
            I_MSGTY     = 'E'
            I_MSGNO     = '001'
*            I_MSGV1     =
*            I_MSGV2     =
*            I_MSGV3     =
*            I_MSGV4     =
            I_FIELDNAME = 'ZWRBTR'
*            I_ROW_ID    =
             I_TABIX     = SY-TABIX
            .
       ENDIF.
     ENDLOOP.
   ENDIF.
  CALL METHOD PR_DATA_CHANGED->DISPLAY_PROTOCOL
*  EXPORTING
*    I_CONTAINER        =
*    I_DISPLAY_TOOLBAR  =
*    I_OPTIMIZE_COLUMNS =
    .
ENDFORM.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ABAP OOALV是一种在ABAP编程语言面向对象的方式实现的ALVABAP List Viewer)报表。它提供了更灵活和可扩展的方式来创建和展示报表数据。 以下是ABAP OOALV的一些关键步骤和示例代码[^1][^2]: 1. 定义变量和选择屏幕定义:在ABAP程序定义所需的变量,并选择适当的屏幕定义。 2. 创建类:创建一个类来处理ALV报表的逻辑和功能。这个类应该继承自`CL_GUI_ALV_GRID`类。 3. 调用函数:在类定义一个方法来调用ALV函数模块,例如`REUSE_ALV_GRID_DISPLAY`。 4. 获取数据并展示:在类定义一个方法来获取报表数据,并将数据传递给ALV函数模块。 5. 表头字段设置:在类定义一个方法来设置ALV报表的表头字段。 6. ALV输出格式:在类定义一个方法来设置ALV报表的输出格式,例如列宽、对齐方式等。 7. 展示ALV:在类定义一个方法来展示ALV报表。 8. 其他:根据需要,可以在类定义其他方法来处理特定的功能,例如处理单击事件、排序等。 下面是一个简单的示例代码,演示了如何使用ABAP OOALV来创建和展示一个简单的报表: ```abap CLASS lcl_alv_report DEFINITION. PUBLIC SECTION. METHODS: constructor, display_alv. PRIVATE SECTION. DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid. METHODS: get_data, set_field_catalog, set_layout. ENDCLASS. CLASS lcl_alv_report IMPLEMENTATION. METHOD constructor. CREATE OBJECT lo_alv_grid EXPORTING i_parent = cl_gui_container=>screen0. ENDMETHOD. METHOD display_alv. CALL METHOD lo_alv_grid->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = lt_spfli. ENDMETHOD. METHOD get_data. SELECT * FROM spfli INTO TABLE lt_spfli. ENDMETHOD. METHOD set_field_catalog. DATA: lt_fieldcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CALL METHOD lo_alv_grid->get_frontend_fieldcatalog RECEIVING rt_fieldcatalog = lt_fieldcat. LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-outputlen = 20. ENDLOOP. CALL METHOD lo_alv_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lt_fieldcat. ENDMETHOD. METHOD set_layout. DATA: lo_layout TYPE REF TO cl_gui_alv_layout. CREATE OBJECT lo_layout EXPORTING i_grid_title = 'ALV Report'. CALL METHOD lo_alv_grid->set_layout EXPORTING is_layout = lo_layout. ENDMETHOD. ENDCLASS. DATA: lo_report TYPE REF TO lcl_alv_report. START-OF-SELECTION. CREATE OBJECT lo_report. lo_report->get_data( ). lo_report->set_field_catalog( ). lo_report->set_layout( ). lo_report->display_alv( ). ``` 这是一个简单的ABAP OOALV报表的示例,它获取了`SPFLI`表的数据,并展示在ALV报表。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值