*&---------------------------------------------------------------------*
*& Report YDEMO_006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------* REPORT YDEMO_006. DATA: BEGIN OF itab OCCURS ,
mblnr LIKE mseg-mblnr ,
kostl LIKE mseg-kostl ,
END OF itab . DATA: ok_code LIKE sy-ucomm .
DATA: l_valid() TYPE c. DATA: go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_variant TYPE disvariant ,
gt_filt TYPE lvc_t_filt,
gs_filt TYPE lvc_s_filt,
sla TYPE lvc_s_layo . CLASS lcl_event_receiver DEFINITION DEFERRED .
DATA: event_receiver TYPE REF TO lcl_event_receiver. *---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "lcl_event_receiver DEFINITION *---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
BREAK LZH. PERFORM handle_data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
ENDCLASS. "lcl_event_receiver IMPLEMENTATION INITIALIZATION.
PERFORM fieldcat_init USING gt_fieldcat[]. START-OF-SELECTION.
CALL SCREEN . *&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK' OR 'EXIT'.
LEAVE PROGRAM.
WHEN 'ENTE'.
PERFORM enter.
WHEN 'CHANGE'.
PERFORM change.
ENDCASE.
CLEAR ok_code .
ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------*
*& Form load_data_into_grid
*&---------------------------------------------------------------------*
FORM load_data_into_grid.
SELECT * FROM mseg INTO CORRESPONDING FIELDS OF TABLE itab
UP TO ROWS . sla-cwidth_opt = 'X'.
sla-zebra = 'X'. CALL METHOD go_grid->set_table_for_first_display
EXPORTING
is_variant = gs_variant
i_save = 'A'
is_layout = sla
CHANGING
it_outtab = itab[]
it_fieldcatalog = gt_fieldcat[]
EXCEPTIONS
invalid_parameter_combination =
program_error =
too_many_lines =
OTHERS = . CALL METHOD go_grid->set_ready_for_input "处于编辑状态
EXPORTING
i_ready_for_input = . CALL METHOD cl_gui_control=>set_focus "设置焦点在go_grid 上
EXPORTING
control = go_grid .
ENDFORM. " load_data_into_grid *&--------------------------------------------------------------------*
*& Form fieldcat_init
*&--------------------------------------------------------------------*
FORM fieldcat_init USING rt_fieldcat TYPE lvc_t_fcat.
DATA: ls_fieldcat TYPE lvc_s_fcat. PERFORM frm_catlg_set USING:
'MBLNR' 'X' '凭证' '' 'MBLNR' 'MSEG' rt_fieldcat,
'KOSTL' '' '成本中心' 'X' '' '' rt_fieldcat.
ENDFORM. "fieldcat_init *---------------------------------------------------------------------*
* FORM frm_catlg_set *
*---------------------------------------------------------------------*
FORM frm_catlg_set USING p_field p_key p_text p_edit ref_f ref_t
rt_fieldcat TYPE lvc_t_fcat .
DATA: tmp_fieldcat TYPE lvc_s_fcat. tmp_fieldcat-fieldname = p_field.
tmp_fieldcat-key = p_key .
tmp_fieldcat-scrtext_l = p_text.
tmp_fieldcat-edit = p_edit.
tmp_fieldcat-ref_field = ref_f.
tmp_fieldcat-ref_table = ref_t. APPEND tmp_fieldcat TO rt_fieldcat .
CLEAR tmp_fieldcat .
ENDFORM. " FRM_CATLG_SET *&---------------------------------------------------------------------*
*& Form change
*&---------------------------------------------------------------------*
FORM change .
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'. IF go_grid->is_ready_for_input( ) = .
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = .
ELSE.
CALL METHOD go_grid->check_changed_data "把修改的内容更改到内表里
IMPORTING
e_valid = l_valid.
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = .
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
EXCEPTIONS
finished =
OTHERS = .
ENDIF.
ENDFORM. " change *&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN100'.
gs_variant-report = sy-repid. IF go_grid IS INITIAL.
CREATE OBJECT go_grid
EXPORTING
i_parent = cl_gui_container=>screen0.
CREATE OBJECT event_receiver. SET HANDLER event_receiver->handle_data_changed FOR go_grid. IF sy-batch IS INITIAL.
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回车时触发
* i_event_id = cl_gui_alv_grid=>mc_evt_modified. "单元格更改触发
ENDIF. PERFORM load_data_into_grid.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------*
*& Form ENTER
*&---------------------------------------------------------------------*
FORM enter .
DATA: ucomm LIKE sy-ucomm. ucomm = '&DATA_SAVE'." '&REFRESH'.
CALL METHOD go_grid->set_function_code
CHANGING
c_ucomm = ucomm.
ENDFORM. " ENTER *&---------------------------------------------------------------------*
*& Form HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM handle_data_changed USING data_changed TYPE REF TO cl_alv_changed_data_protocol..
FIELD-SYMBOLS: <fs_mod_rows> TYPE STANDARD TABLE,
<fs_cells> TYPE lvc_t_modi ,
<fs_cell_wa> TYPE lvc_s_modi ,
<fs> LIKE LINE OF itab.
BREAK LZH. IF NOT data_changed->mp_mod_rows IS INITIAL.
ASSIGN data_changed->mp_mod_rows->* TO <fs_mod_rows>.
ASSIGN data_changed->mt_mod_cells TO <fs_cells>.
LOOP AT <fs_mod_rows> ASSIGNING <fs>.
IF <fs>-kostl = 'ABC' .
READ TABLE <fs_cells> INDEX sy-tabix ASSIGNING <fs_cell_wa>.
CALL METHOD data_changed->add_protocol_entry
EXPORTING
i_msgid = 'OO'
i_msgty = 'E'
i_msgno = ''
i_msgv1 = '不可以为ABC'
i_fieldname = 'KOSTL'
i_row_id = <fs_cell_wa>-row_id
* i_tabix = tabix
.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " HANDLE_DATA_CHANGED ************************************************************************
*5、拓展内容
*CL_ALV_CHANGED_DATA_PROTOCOL参数的常用方法和属性
*
*方法 用途
*MODIFY_CELL 修改指定位置单元格的值
*GET_CELL_VALUE 获取单元格的值
*ADD_PROTOCOL_ENTRY 弹出一个消息,必须使用系统标准的消息类
*MODIFY_PROTOCOL_ENTRY 修改消息
*PROTOCOL_IS_VISIBLE 是否显示错误信息提示
*REFRESH_PROTOCOL 删除错误消息
*
*属性 用途
*MT_PROTOCOL LOGs
*MT_MOD_CELLS 更新的单元格信息
*MP_MOD_ROWS 更新了的行的信息
*MT_GOOD_CELLS 正确的CELL的值
*MT_DELETED_ROWS 被删除的行信息
*MT_INSERTED_ROWS 新插入的行信息 *PS:alv编辑字段的检查,通常包括输入字段的重复性检查和存在性检查,想一想怎么实现
************************************************************************

ABAP DEMO ALV-监听数据修改的更多相关文章

  1. 关于微信小程序使用watch监听数据变化的方法

    众所周知,Vue中,可以使用监听属性 watch来观察和响应 Vue 实例上的数据变化,那么小程序能不能实现这一点呢? 监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一个方法 ...

  2. $scope.$watch()——监听数据变化

    $scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...

  3. $watch监听数据变化和run方法

    angular中$watch方法可以监听数据的变化. $scope.$watch('phone',function(){ $scope.phone.fre = $scope.phone.num> ...

  4. vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化

    一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...

  5. vue教程2-08 自定义键盘信息、监听数据变化vm.$watch

    vue教程2-08 自定义键盘信息 @keydown.up @keydown.enter @keydown.a/b/c.... 自定义键盘信息: Vue.directive('on').keyCode ...

  6. ZooKeeper 笔记(2) 监听数据变化

    ZK中的每个节点都可以存储一些轻量级的数据,这些数据的变化会同步到集群中的其它机器.在应用中程序员可以添加watcher来监听这些数据的变化,watcher只会触发一次,所以触发过后想要继续监听,必须 ...

  7. 微信小程序实现watch属性监听数据变化

    Vue 提供了一种通用的方式来观察和响应 Vue 实例上的数据变动:监听属性 watch. 虽然watch的滥用会导致性能不佳,但在一些情况下我们还是需要watch,使得代码更加简洁.逻辑更加清晰(其 ...

  8. SQL Server CDC配合Kafka Connect监听数据变化

    写在前面 好久没更新Blog了,从CRUD Boy转型大数据开发,拉宽了不少的知识面,从今年年初开始筹备.组建.招兵买马,到现在稳定开搞中,期间踏过无数的火坑,也许除了这篇还很写上三四篇. 进入主题, ...

  9. Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置修改及测试步骤

    测试环境:Oracle Enterprise Linux 64-bit (5.8版本) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/orac ...

  10. mvc 缓存 sqlCacheDependency 监听数据变化

    mvc 缓存   对于MVC有Control缓存和Action缓存. 一.Control缓存 Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来 ...

随机推荐

  1. SQL Server Default Trace查看是谁对数据库进行了DDL操作

    在我们的工作中可能会遇到这样一种情形.由于数据库中某些对象被altered/created/deleted,造成我们的应用程序crash. 当我们把问题解决之后,老板可能会问发生了什么?为什么会这样? ...

  2. Oracle substr() 字符截取函数

    1.substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a ...

  3. shell编程练习题

    求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前ss ...

  4. 1066 Root of AVL Tree (25)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  5. 《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数

        C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? ...

  6. (2)Go基本数据类型

    Go语言的基本类型有: bool string int.int8.int16.int32.int64 uint.uint8.uint16.uint32.uint64.uintptr byte // u ...

  7. VS2019输出信息到调试控制台

    System.Diagnostics.Debug.WriteLine(format, args);

  8. linux 9.故障修复和网络配置

    一.linux系统故障修复       1.不知道root密码的前提下 破解root密码 服务器必须在身边           grub引导菜单              按任意键进入->e ( ...

  9. zabbix—自动发现端口并监控

    自动批量检查agent开放的端口 PS:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控:  如果服务器会随机出现端口且每次启动程序都会改变,可以采用第二种方法,来监控指定的端 ...

  10. Unity3D 2D模拟经营游戏 洗车沙龙 完整源码

    Car Wash Salon Game 描述洗车模板与几个迷你游戏相关的汽车清洁,洗涤和装饰. 简单但有趣的游戏和伟大的视觉效果. 此模板不包含在应用中! 自定义应用程序的示例,有些功能在本项目中不受 ...