在CX项目中,根据需求,自定义一个表,维护供应商的银行账号信息,当输入供应商编号时,自动在供应商名称列里自动填写供应商名称,用到了ALV  DataChange 事件 ,下面是源代码:

*&---------------------------------------------------------------------*
*& REPORT  ZMM_LIFNR_BANK
*&
*&---------------------------------------------------------------------*
*& PROGRAM NAME     : ZMM_LIFNR_BANK
*& DESCRIPTION      :
*& AUTHOR           :
*& DATE WRITTEN     :
*& TCODE            :
*& NOTE             :
*&---------------------------------------------------------------------*

REPORT ZMM_LIFNR_BANK.
*INCLUDE ZMMLIFNRBANKTOP.

TABLES:ZXK001.
TYPE-POOLS:SLIS.

TYPES BEGIN OF TY_ITAB.
TYPES CHK.
      INCLUDE TYPE ZXK001.
TYPES END OF TY_ITAB.

DATA: IT_ZXK001 TYPE TABLE OF  TY_ITAB WITH HEADER LINE.
DATA: WA_IT_ZXK001 TYPE TY_ITAB.

DATA: ITZXK001 LIKE TABLE OF ZXK001 WITH HEADER LINE.

DATA: GT_FIELDCAT TYPE LVC_T_FCAT WITH HEADER LINE.
DATA: GC_GLAY TYPE LVC_S_GLAY.
DATA: GS_LAYOUT    TYPE LVC_S_LAYO,     "SLIS_LAYOUT_ALV,
      WK_REPID     LIKE SY-REPID.
DATA GS_GRID TYPE LVC_S_GLAY.
DATA TEM_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA GT_EVENTS TYPE SLIS_T_EVENT.
DATA GS_EVENTS LIKE LINE OF GT_EVENTS.

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION. "定义类 捕捉各种事件
  PUBLIC SECTION.
    METHODS HANDLE_MODIFY                   "回车
    FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
    IMPORTING E_MODIFIED ET_GOOD_CELLS.

METHODS HANDLE_ONF4                     "F4
    FOR EVENT ONF4 OF CL_GUI_ALV_GRID
    IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
DATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
SELECT-OPTIONS:
         S_LIFNR FOR ZXK001-LIFNR.
SELECTION-SCREEN END OF BLOCK B1.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM DISPLAY_DATA.

*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM GET_DATA.

SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_ZXK001 FROM ZXK001 WHERE LIFNR IN S_LIFNR.

ENDFORM.                    "GET_DATA

*&---------------------------------------------------------------------*
*&      FORM  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
  DEFINE FILL_ALV.
    CLEAR GT_FIELDCAT.
    GT_FIELDCAT-FIELDNAME = &1.
    GT_FIELDCAT-SCRTEXT_M = &2 .
*    GT_FIELDCAT-OUTPUTLEN = &3.
    GT_FIELDCAT-NO_ZERO   = &3.
    GT_FIELDCAT-DECIMALS_O   = &4.
    APPEND GT_FIELDCAT.
  END-OF-DEFINITION.

FILL_ALV 'LIFNR'   '供应商编号    '  '' ''.
  FILL_ALV 'NAME1'   '供应商名称    '  '' ''.
  FILL_ALV 'BANKN'   '开户银行 '    '  ' ''.
  FILL_ALV 'IBAN'    '银行账号    '   '' ''.

LOOP AT GT_FIELDCAT WHERE FIELDNAME = 'LIFNR'
                         OR  FIELDNAME = 'BANKN'
                         OR  FIELDNAME = 'NAME1'
                         OR  FIELDNAME = 'IBAN'.

IF GT_FIELDCAT-FIELDNAME <> 'NAME1'.
       GT_FIELDCAT-EDIT = 'X'.
    ENDIF.

IF GT_FIELDCAT-FIELDNAME = 'NAME1'.
       GT_FIELDCAT-OUTPUTLEN = '30'.
    ENDIF.
    IF GT_FIELDCAT-FIELDNAME = 'LIFNR'.
*      GT_FIELDCAT-REF_FIELD = 'LIFNR'.
*      GT_FIELDCAT-REF_TABLE = 'LFA1'.
      GT_FIELDCAT-OUTPUTLEN = '20'.

ENDIF.
    IF GT_FIELDCAT-FIELDNAME = 'BANKN'.
      GT_FIELDCAT-REF_FIELD = 'BANKN'.
      GT_FIELDCAT-REF_TABLE = 'TIBAN'.
      GT_FIELDCAT-OUTPUTLEN = '35'.

ENDIF.
    IF GT_FIELDCAT-FIELDNAME = 'IBAN'.
      GT_FIELDCAT-REF_FIELD = 'IBAN'.
      GT_FIELDCAT-REF_TABLE = 'TIBAN'.
      GT_FIELDCAT-OUTPUTLEN = '34'.
    ENDIF.

MODIFY GT_FIELDCAT.
  ENDLOOP.

GS_LAYOUT-STYLEFNAME   = 'FSTYLE'.
  GS_LAYOUT-ZEBRA        = 'X'.
*  GS_LAYOUT-CWIDTH_OPT   = 'X'.
  GS_LAYOUT-BOX_FNAME = 'CHK'.

GS_GRID-EDT_CLL_CB = 'X'.

*  **************定义事件FORM名称*********************
  GS_EVENTS-NAME = 'CALLER_EXIT'.
  GS_EVENTS-FORM = 'CALLER_EXIT'.
  APPEND GS_EVENTS TO GT_EVENTS.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
*      I_CALLBACK_TOP_OF_PAGE   = 'TOP_OF_PAGE'
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      IT_FIELDCAT_LVC          = GT_FIELDCAT[]
      I_GRID_SETTINGS          = GS_GRID
      IS_LAYOUT_LVC            = GS_LAYOUT
      I_SAVE                   = 'X'
      IT_EVENTS                = GT_EVENTS
    TABLES
      T_OUTTAB                 = IT_ZXK001.

ENDFORM.                    " DISPLAY_DATA

*&---------------------------------------------------------------------*
*&      FORM  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->EXTAB      TEXT
*----------------------------------------------------------------------*
FORM SET_PF_STATUS  USING EXTAB TYPE SLIS_T_EXTAB.          "#EC CALLED
  SET PF-STATUS '1000' .
ENDFORM.                    "WHOLE_TOOLBAR

*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->RF_UCOMM   TEXT
*      -->RS         TEXT
*----------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
                          RS TYPE SLIS_SELFIELD.
  DATA:P_COUNT TYPE I.
  DATA: P_ANSWER(1).
  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_ANSWER.
  DATA LS_STYLEROW TYPE LVC_S_STYL .
  DATA LT_STYLETAB TYPE LVC_T_STYL .

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
  RS-REFRESH = 'X'.  "自动刷新

CASE RF_UCOMM.
    WHEN '&NEW'.
        IT_ZXK001-LIFNR = ''.
        IT_ZXK001-NAME1 = ''.
        IT_ZXK001-BANKN = ''.
        IT_ZXK001-IBAN  = ''.
        APPEND IT_ZXK001.
        CLEAR IT_ZXK001.

WHEN '&DEL'.

CLEAR P_COUNT.

LOOP AT IT_ZXK001 WHERE CHK = 'X'.
              P_COUNT = 1.
              EXIT.
        ENDLOOP.

IF P_COUNT <= 0.
            MESSAGE '请选择要删除的数据!' TYPE 'I'.
            RETURN.
        ELSE.
            CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
                     EXPORTING
                         TEXTLINE1            = '确认要删除所选记录吗?'
                         TITEL                = '确认提示'
                         CANCEL_DISPLAY       = ''
                     IMPORTING
                         ANSWER               = P_ANSWER.
                CHECK P_ANSWER = 'J'.
                IF P_ANSWER = 'J'.
                    LOOP AT IT_ZXK001 WHERE CHK = 'X'.
                         DELETE FROM ZXK001 WHERE LIFNR = IT_ZXK001-LIFNR.
                         DELETE IT_ZXK001.
                    ENDLOOP.
                ENDIF.
        ENDIF.
    WHEN '&SAVE'.

CLEAR P_COUNT.

LOOP AT IT_ZXK001 WHERE LIFNR = ''.
              P_COUNT = 1.
              EXIT.
        ENDLOOP.
        IF P_COUNT > 0.
            MESSAGE '供应商字段不能为空!' TYPE 'I'.
            RETURN.
        ELSE.

REFRESH ITZXK001.
            CLEAR ITZXK001.
            LOOP AT IT_ZXK001.
                  MOVE-CORRESPONDING IT_ZXK001 TO ITZXK001.
                  APPEND ITZXK001.
                  CLEAR ITZXK001.
            ENDLOOP.

MODIFY ZXK001 FROM TABLE ITZXK001.
            IF SY-SUBRC EQ 0.
               COMMIT WORK.
               MESSAGE S000(ZMM001).
            ELSE.
               ROLLBACK WORK.
               MESSAGE S001(ZMM001).
            ENDIF.
        ENDIF.

WHEN OTHERS.

ENDCASE.
ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      FORM  CALLER_EXIT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->E_GRID     TEXT
*----------------------------------------------------------------------*
FORM CALLER_EXIT USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.

DATA: L_FIELD TYPE LVC_FNAME,
        LT_F4   TYPE LVC_T_F4,
        LS_F4   TYPE LVC_S_F4.

*  LS_F4-FIELDNAME  = 'UMSKZ'.
*  LS_F4-REGISTER   = 'X'.
  "LS_F4-GETBEFORE  = 'X'. "打'X'会在弹出窗体之前先刷新ALV数据
  "LS_F4-CHNGEAFTER = 'X'. "打'X'会在关闭窗体之后刷新ALV数据
  "LS_F4-INTERNAL   = ''.
  INSERT LS_F4 INTO TABLE LT_F4.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = TEM_GRID.

CALL METHOD TEM_GRID->REGISTER_EDIT_EVENT     "注册GRID事件
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER"事件:回车
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.

*  CALL METHOD TEM_GRID->REGISTER_F4_FOR_FIELDS
*    EXPORTING
*      IT_F4 = LT_F4.

CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER GT_EVENT_RECEIVER->HANDLE_MODIFY FOR TEM_GRID.
  SET HANDLER GT_EVENT_RECEIVER->HANDLE_ONF4   FOR TEM_GRID.

ENDFORM.                    "CALLER_EXIT

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. "实现类 处理回车事件

METHOD HANDLE_MODIFY.
    DATA LS_STYLEROW TYPE LVC_S_STYL .
    DATA LT_STYLETAB TYPE LVC_T_STYL .
    DATA STBL TYPE LVC_S_STBL.

LOOP AT IT_ZXK001 INTO WA_IT_ZXK001.

SELECT SINGLE
                NAME1
                INTO WA_IT_ZXK001-NAME1
                FROM LFA1
                WHERE LIFNR = WA_IT_ZXK001-LIFNR.
         MODIFY IT_ZXK001 FROM WA_IT_ZXK001.
    ENDLOOP.

STBL-ROW = 'X'." 基于行的稳定刷新
    STBL-COL = 'X'." 基于列稳定刷新
    CALL METHOD TEM_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE = STBL.
  ENDMETHOD.                    "HANDLE_MODIFY

METHOD HANDLE_ONF4.
    DATA :PT_RET TYPE TABLE OF DDSHRETVAL ,
          PS_RET TYPE DDSHRETVAL ,
          LS_MODI TYPE LVC_S_MODI.
    FIELD-SYMBOLS <MODTAB> TYPE LVC_T_MODI.

*    SELECT SHBKZ AS UMSKZ
*           LTEXT
*      INTO TABLE ITHELP
*      FROM T074T
*      WHERE KOART = 'D'
*      AND   SPRAS = '1'.
*
*    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*      EXPORTING
*        RETFIELD        = 'UMSKZ'        "内表的关键字段名
*        VALUE_ORG       = 'S'             "'S'
*        DYNPPROG        = SY-REPID      "文本框PROGRAM
*        DYNPNR          = SY-DYNNR       "文本框所在屏幕
*        DYNPROFIELD     = '特殊总账标识'  "文本框名
*        WINDOW_TITLE    = '标题'         "窗体标题
*      TABLES
*        VALUE_TAB       = ITHELP "内表
*                                                                                                                                                                                                                                   "FIELD_TAB       = T_FIELD
*        RETURN_TAB      = PT_RET "返回选择的数据
*      EXCEPTIONS
*        PARAMETER_ERROR = 1
*        NO_VALUES_FOUND = 2
*        OTHERS          = 3.

**    处理 PT_RET 返回的数据,更新ALV CELL即可
    READ TABLE PT_RET INTO PS_RET INDEX 1 .
    IF SY-SUBRC = 0.
      LS_MODI-ROW_ID = ES_ROW_NO-ROW_ID.
      LS_MODI-FIELDNAME = E_FIELDNAME.
      LS_MODI-VALUE = PS_RET-FIELDVAL.
      ASSIGN ER_EVENT_DATA->M_DATA->* TO <MODTAB>.
      APPEND LS_MODI TO <MODTAB>.
    ENDIF.

ER_EVENT_DATA->M_EVENT_HANDLED = 'X'. "通知系统搜索事件处理完毕,停止调用系统标准的SEARCH HELP。
  ENDMETHOD.                    "HANDLE_ONF4
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

ALV DataChange EVENT相关推荐

  1. SAP ABAP ALV(LVC)的一个自定义事件(F4帮助事件,回车ENTER按钮事件)的一个实例

    1. 定义和注册事件接受器类 *----------------------------------------------------------------------* * CLASS LCL_ ...

  2. 给ALV字段添加搜索帮助

    1.引用标准的搜索帮助 在 宏中定义,F4标示,参考表参考字段 GS_FIELDCAT-F4AVAILABL = &5. GS_FIELDCAT-REF_TABLE = &6. GS_ ...

  3. 饿了么多活利器:实时双向复制工具(DRC)

    DRC介绍 饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下图: 要点说明: 跨机房的 Mysql 数据复制完全通过 DRC 来完成 还有很多 ...

  4. DRC(Data Replicate Center)

    DRC(Data Replicate Center) DRC用来做什么? 数据双向复制和数据订阅. 比如:跨机房的 Mysql 数据复制. 比如:数据订阅,监听数据库实时变更情况. DRC设计目标? ...

  5. SAP笔记-abap 银行对账功能开发

    前一段时间花了几天重新设计了一下银行对账功能,其中用到了 abap 的 OO 事件处理方法,及alv 的一些用法和大家分享一下,这次的修改更贴合实际业务操作. doc 档下载:  http://fan ...

  6. 饿了么Mysql异地多_饿了么异地多活技术实现(四)- 实时双向复制工具(DRC)...

    DRC介绍 饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下图: 要点说明:跨机房的 Mysql 数据复制完全通过 DRC 来完成 还有很多业 ...

  7. CLASS ALV Event

    1.Class ALV 的双击.F4事件 2.Call Transaction :Vendor.PO REPORT z_scm_maintain_ekko_ci . TABLES: ekko. DAT ...

  8. OO ALV 设置搜索帮助的三种方式 ONF4 EVENT

    一.在 FIELDCAT 中设置参照 二.CALL FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST ' 三.CALL FUNCTION ' HELP_VALUES_GE ...

  9. 实战ALV OO技术实现添加工具条按钮

    REPORT  Z_ALV_ERIC. *定义使用图标,按钮使用 INCLUDE <ICON>. *定义事件类型 CLASS LCL_EVENT_RECEIVER DEFINITION D ...

最新文章

  1. diy直立双足机器人_速看!近期国内外机器人资讯大汇总
  2. Redis常用操作和内存模型
  3. php 原生多图上传,php 原生多图文件上传
  4. by截取字段 group_深入理解 group by【思考点滴】
  5. 多线程学习笔记(十二)
  6. python双划线_Python中单下划线(_)和双下划线(__)的特殊用法
  7. Pytorch nn.functional.pad()的简单用法
  8. 新安装XCode7/XCode8 模拟器无法运行报-unable to boot the simulator解决方法
  9. 客户端软件 大华_大华“飞燕”,一款主打稳定WiFi的路由器!
  10. python读取中文txt操作 转化为拼音
  11. python通过多进程实行多任务
  12. linux实现定时任务
  13. 基于RV1126平台imx291分析 --- 总结
  14. 移动app性能测试工具:Emmagee使用介绍
  15. H264/H265 PS 流分析
  16. 携程的供应链和流量逻辑|一点财经
  17. C++项目设计与总结
  18. 解决 Could not locate executable null\bin\winutils.exe in the Hadoop binaries 异常
  19. stm32h7 串口idle_【STM32H7教程】第30章 STM32H7的USART应用之八个串口FIFO实现
  20. Domino M-Series 设置说明

热门文章

  1. 2015版App推广全攻略:你所不知道的撕逼营销,事件营销和PR传播
  2. haproxy小结(一)基础概念篇
  3. BAT解密:互联网技术发展之路(5)- 开发层技术剖析
  4. 微信公众平台开发(38)一站到底在线答题
  5. 配置arm-linux-gcc 位置
  6. ExtJs+php学习长连接comet技术开端。
  7. Flex Builder 2 注册码
  8. N001-SQL Server 2016企业版本安装
  9. [转]iOS为UILabel添加长按复制功能
  10. Windows UWP开发系列 – RelativePanel