ALV DataChange EVENT
在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的更多相关文章
- SAP Grid control( ALV Grid 列表 自定义 按钮)
ALV 列表和按钮 效果 源代码 PROGRAM bcalvc_tb_menu_with_def_but. *&&&&&&&&& ...
- Model-View-Controller Explained in C++
The Permanent URL is: Model-View-Controller Explained in C++. The Model-View-Controller (MVC) is not ...
- ALV TREE中双击触发PAI事件的方法
用事件类实现双击事件,实例化后使用set handler注册到ALV对象.斜体部分为事件方法的具体实现. 代码如下 CLASS lcl_tree_event_receiver DEFINITION. ...
- 00 alv抬头等
*&---------------------------------------------------------------------* *& Report ZHJ_TEST0 ...
- ABAP ALV单个单元格状态编辑
*&---------------------------------------------------------------------* *& Report ZPPR0024 ...
- SAP ALV显示并打印(非OO方式)
*&---------------------------------------------------------------------* *& Report Z_SD_CPF ...
- SAP ALV OO 选择行打印
&---------------------------------------------------------------------* *& Report ZSDF001 * ...
- ALV用例大全
一.ALV介绍 The ALV Grid Control (ALV = SAP List Viewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允 ...
- ALV详解:OO ALV
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- 屏幕对象的F1/F4输入帮助功能
1.HELP-REQUST[FOR{LOW|HIGH}]字段的F1帮助 当选择SAP屏幕功能的制定字段按F1键时可以调关注用自定义的程序或者系统帮助文件,该功能通常称为F1帮助. TYPES:syst ...
- Main Memory Object-Relational Database Management System
Main Memory Object-Relational Database Management System FastDBMain Memory Relational Database Manag ...
- JAVA中IO和NIO的详解分析,内容来自网络和自己总结
用一个例子来阐释: 一辆客车上有10个乘客,他们的目的地各不相同,当没有售票员的时候,司机就需要不断的询问每一站是否有乘客需要下车,需要则停下,不需要则继续开车,这种就是阻塞的方式. 当有售票员的时候 ...
- K-means clustering (K-means聚类)
问题: K-所有值聚类是无监督学习算法 设数据集.当中,. 如果这个数据能够分为类. 把这个问题模型化: , 当中代表第类的聚点(中心点.均值). 该模型能够用EM算法进行训练: 初始化,. E步:固 ...
- Swift - 使用表格组件(UITableView)实现分组列表
1,样例说明: (1)列表以分组的形式展示 (2)同时还自定义分区的头部和尾部 (3)点击列表项会弹出消息框显示该项信息. 2,效果图: 3,代码如下: 1 2 3 4 5 6 7 8 9 ...
- svn自动备份
#!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH DATE=` ...
- android studio 9.png 报错
Eclipse里能正常运行,但是导入到Android Studio里就报如下的错误 百度了下,说有两种解决办法一种是改后缀名,还有一种是重新在Android Studio里画一下点9图片.但是这个项目 ...
- vc++远程调试工具
简单来说: 1>在远程机器跑VC自带的远程调试工具msvsmon.exe,并把要调试的程序跑起来 2>用VC调试器附加进程,即可调试 先展开来说: VC8,VC9都自带远程调试工具,可以在 ...
- haskell,lisp,erlang你们更喜欢哪个?
haskell,lisp,erlang你们更喜欢哪个? haskell,lisp,erlang你们更喜欢哪个?
- python基础教程_学习笔记10:异常
异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.假设异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止运行: >>> ...