OOALV data_changed 與data_changed_finished事件

2023-11-08

data_changed在可編輯字段的數據發生變化時才會觸發。可用來檢查輸入數據的正確性。
data_changed_finished在回車時和可編輯字段數據發生變化后,光標移動時觸發,如果可編輯字段數據檢查失敗,則不會觸發此事件。
這兩個事件都需要調用方法才能觸發。

    call METHOD g_grid01->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.//回車觸發事件
    call METHOD g_grid01->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.//修改觸發事件

下面是個完整例子,屏幕就只有一個customer control:

REPORT Z_TALV.

data: gv_repid TYPE sy-repid,
      gv_sname TYPE sy-dynnr.
DATA: gs_data TYPE spfli.

DATA: gt_data LIKE TABLE OF gs_data.

DATA: g_con01  TYPE REF TO cl_gui_custom_container.

DATA: g_grid01 TYPE REF TO cl_gui_alv_grid.

DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: gt_fieldcat TYPE lvc_t_fcat.
data: ok_code type sy-ucomm,
      save_ok type sy-ucomm.
CONSTANTS: g_cus01 TYPE scrfname VALUE 'CUS01'.

*----------------------------------------------------------------------*
*       CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver DEFINITION.
  PUBLIC SECTION.
    " 声明Toolbar事件方法
    METHODS handle_toolbar
      FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.
    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_data_changed_finished
      for EVENT data_changed_finished of cl_gui_alv_grid
      IMPORTING
        e_modified
        et_good_cells.
ENDCLASS.                    "cl_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver IMPLEMENTATION.
  " 实现Toolbar事件方法
  METHOD handle_toolbar.
    DATA: ls_toolbar TYPE stb_button.
    CLEAR: ls_toolbar.
    ls_toolbar-butn_type = 3. " 分隔符
    APPEND ls_toolbar TO e_object->mt_toolbar.
    CLEAR: ls_toolbar.
    ls_toolbar-function = 'RESH'.    " 功能码
    ls_toolbar-icon = icon_REFRESH.  " 图标名称
    ls_toolbar-quickinfo = 'Refresh'.   " 图标的提示信息
    ls_toolbar-disabled = ''.        " X表示灰色,不可用
    ls_toolbar-text = ''.       " 按钮上显示的文本
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "handle_toolbar
  METHOD handle_data_changed.
    PERFORM handle_data_changed using er_data_changed.
  ENDMETHOD.
  METHOD handle_data_changed_finished.
    MESSAGE 'it is work' TYPE 'I'.
  ENDMETHOD.
ENDCLASS.                    "cl_event_receiver IMPLEMENTATION
DATA: event_receiver TYPE REF TO cl_event_receiver.

START-OF-SELECTION.
  PERFORM get_data.

  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text  获取数据
*----------------------------------------------------------------------*
FORM get_data.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE gt_data
    UP TO 30 ROWS
    FROM spfli.

ENDFORM.                    "GET_DATA

*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text  ALV显示字段文本
*----------------------------------------------------------------------*
FORM set_fieldcat.
  CLEAR: gt_fieldcat[].
  DEFINE macro_fieldcat.
    clear gs_fieldcat.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-coltext   = &2.
    gs_fieldcat-hotspot   = &3.
    append gs_fieldcat to gt_fieldcat.
  END-OF-DEFINITION.

  macro_fieldcat 'CARRID'     '航线代码'   'X'.
  macro_fieldcat 'CONNID'     '航班连接Id' ''.
  macro_fieldcat 'COUNTRYFR'  '起飞国家'   ''.
  macro_fieldcat 'CITYFROM'   '起飞城市'   ''.
  macro_fieldcat 'AIRPFROM'   '起飞机场'   ''.
  macro_fieldcat 'COUNTRYTO'  '目标国家'   ''.
  macro_fieldcat 'CITYTO'     '目标城市'   ''.
  macro_fieldcat 'AIRPTO'     '目标机场'   ''.
  macro_fieldcat 'FLTIME'     '航班时间'   ''.
  macro_fieldcat 'DEPTIME'    '启程时间'   ''.
  macro_fieldcat 'ARRTIME'    '到达时间'   ''.
  macro_fieldcat 'DISTANCE'   '距离'       ''.

ENDFORM.                    "SET_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text  布局
*----------------------------------------------------------------------*
*      -->P_LAYOUT   text
*----------------------------------------------------------------------*
FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  p_layout-cwidth_opt = 'X'.   " 自动调节字段长度
  p_layout-sel_mode   = 'D'.   " 选择模式,可选择多行
  p_layout-zebra      = 'X'.   " 颜色交替显示
  p_layout-edit = 'X'.
ENDFORM.                      "SET_LAYOUT

*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text  创建ALV
*----------------------------------------------------------------------*
MODULE init_con OUTPUT.

  DATA: ls_layout TYPE lvc_s_layo.

  IF g_con01 IS INITIAL.
    PERFORM set_fieldcat.
    PERFORM set_layout CHANGING ls_layout.

    " 创建SAP容器实例
    CREATE OBJECT g_con01
      EXPORTING
        container_name              = g_cus01 " 自定义控件名称
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    " 创建GRID实例
    CREATE OBJECT g_grid01
      EXPORTING
        i_parent          = g_con01
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CREATE OBJECT event_receiver.
    " 注册事件handler方法
    SET HANDLER event_receiver->handle_toolbar FOR g_grid01.
    set HANDLER event_receiver->handle_data_changed for g_grid01.
    set HANDLER event_receiver->handle_data_changed_finished FOR g_grid01.
    call METHOD g_grid01->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter."回車觸發事件
    call METHOD g_grid01->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified."修改完成后光標移動觸發事件,但修改完后,data_changed檢查輸入錯誤,就不會走這個事件
    " 调用ALV 显示方法
    CALL METHOD g_grid01->set_table_for_first_display
      EXPORTING
*       i_structure_name              = 'SPFLI' " 参照表结构字段显示
        is_layout                     = ls_layout " 布局
      CHANGING
        it_fieldcatalog               = gt_fieldcat " 显示字段
        it_outtab                     = gt_data[]
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
    IF sy-subrc <> 0.
*     Implement suitable error handling here
    ENDIF.

  ENDIF.

ENDMODULE.                 " INIT_CON  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'S0001'.
IF gv_repid is INITIAL.
  gv_repid = 'Z_TALV'.
  gv_sname = '0101'.
ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_EXIT_0100  INPUT
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
MODULE user_exit_0100 INPUT.
  save_ok = ok_code.
  clear ok_code.
  case save_ok.
    when 'BACK'.
      leave program.
    when 'BTN'.
      MESSAGE 'btn' TYPE 'I'.
  endcase.
ENDMODULE.                 " USER_EXIT_0100  INPUT

form handle_data_changed using
                  p_er_data_changed  TYPE ref to cl_alv_changed_data_protocol.
  data: mod_data TYPE lvc_t_modi,
        wa_mod_data TYPE lvc_s_modi.
  mod_data = p_er_data_changed->mt_mod_cells.
  LOOP AT mod_data INTO wa_mod_data WHERE fieldname = 'CONNID'.
    IF strlen( wa_mod_data-value ) > 4.
      call METHOD p_er_data_changed->add_protocol_entry
        EXPORTING
          i_msgid = '00'
          i_msgty = 'E'
          i_msgno = '001'
          i_msgv1 = 'length is too long'
          i_fieldname = wa_mod_data-fieldname.
    ENDIF.
  ENDLOOP.
ENDFORM.

data_changed事件觸發
data_changed_finshed事件光標移動觸發

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOALV data_changed 與data_changed_finished事件 的相关文章

  • ABAP ALV合计或者小计 添加自定义文本

    自己测试内容 仅供参考
  • ABAP OPEN SQL详解

    本章目录 概要 OPEN SQL 读取数据 1 概要 1 1 R 3体系结构 学习SQL之前先了解一下R 3体系结构 如 图1 所示 SAP R 3一共分为三层结构 其中应用层和数据库层由单独的系统构成 1 表示层 表示层 Presenta
  • SAP ABAP 中的异步调用

    举例场景 创建采购申请的接口中 在执行完BAPI之后返回了一个PR 接着就会执行到commit提交的接口 然如果还需要在创建的时候直接审批 那么就需要再调用PR审批的BAPI 但是你会发现有的PR 在ME23N查看的时候是审批状态 而有的并
  • ABAP GN_DELIVERY_CREATE 报错 VL 561

    GN DELIVERY CREATE 去创建内向交货单的时候 报错 VL 561 Essential transfer parameters are missing in record 表示一些必输字段没输入 诸如一些 物料号 单位 等一些
  • ABAP--新语法--Open SQL--第四天-- From Table

    From Table Internal Table 在 ABAP 7 52 后 支持将内表作为数据源使用 内表作为数据源使用时 需要定义别名并使用转义符 该用法可以用来代替 FOR ALL ENTRIES IN 但FROM 语句中最多使用一
  • 如何让程序在单击按钮时返回表中的多个表字段?

    我正在尝试创建一个程序 允许用户输入foodCode为了收到Item and Description按下按钮后 有没有办法可以将结果放在同一屏幕上的表格中 如何 report demo tables food SELECTION SCREE
  • 如何搜索可用的 RFC 功能模块和表

    我必须承认我不是 SAP R 3 编程方面的专家 所以这更多的是关于这个问题的基本问题 有没有办法获取 SAP 系统上可访问的 RFC 模块和 或表的列表 在互联网上的许多示例中 我发现一个 RFC 模块似乎在每个 SAP 系统上都可用 S
  • 删除 ALV 中选定的行

    我有 ALV 表 并在表工具栏中创建了一个自定义按钮 每当按下按钮时 我想删除选定的行 现在只显示一条消息 以便我可以查看自定义按钮是否正常工作 METHOD on user command CASE e salv function WHE
  • HTTPS 通信失败 ABAP

    我正在开发一个应连接到两个 Web 应用程序的应用程序 第一个 Web 应用程序已完成 http example com 不幸的是 第二个 Web 应用程序使用 HTTPS https example com 抛出这个错误 Http Com
  • ALV 列表中的两级列标题

    我想添加一个标题行来对列标题进行分组 Departure Arrival lt This row is what I want to add Airport Gate Date Airport Gate Date O Hare A10 10
  • 隐藏警告的杂注:where 条件中使用的字段可能包含空值

    我正在寻找一个编译指示 可以用来隐藏当选择的 WHERE 条件中使用的字段可能包含数据库中的 NULL 值时生成的编译器警告 阅读 SAP note 1088403 后 我知道这里可能存在问题 但我无法应用那里建议的解决方案 因为我在 WH
  • SELECT 语句中有多个条件?

    首先 我没有 ABAP 经验 我在这里只是猜测 我想向现有报表中的 SELECT 添加条件 现有代码如下所示 SELECT SINGLE FROM EKPO WHERE EBELN GT MSEG EBELN AND EBELP GT MS
  • ABAP中的求值顺序

    ABAP 是否有明确的评估顺序 例如 在表达式中foo bar 是否可以保证哪种方法foo and bar 首先评估 执行 在 ABAP 关键字文档中找不到此类信息 ABAP 文档 arith exp 算术运算符 https help sa
  • 如何跳过选择屏幕上的必填字段?

    我希望当我单击 Iptal 按钮时它跳过必填字段 但我不想在没有 强制 的情况下控制强制字段 我想在文本框中看到复选标记 例如屏幕截图 通常 当没有必填字段时 Iptal 按钮会调用不同的屏幕 注意 屏幕是标准选择屏幕 我解决这个问题的方法
  • 如何在屏幕退出时隐藏有条件的自定义字段?

    我的任务是自定义标题详细信息屏幕ME33K交易 目标是添加一个包含新字段的框 仅当协议类型是我使用交易定义的类型时才应显示该框SPRO 例如 协议类型ABC 我开始使用CMOD交易中 我创建了一个虚拟框和带有一些硬编码输入值的字段 并且工作
  • 方法调用作为另一个方法调用的参数?

    我是abap OO 的新手 但之前用java开发过 并编写了一个abap cl caretaker 类 它应该处理数据库表及其本地副本 实习生表 上的操作 我想进行以下方法调用 caretaker gt show table caretak
  • 如何在仅引用数据的表中循环

    我正在使用功能模块RSAQ QUERY CALL 取回一张桌子 DATA gr data TYPE REF TO data CALL FUNCTION RSAQ QUERY CALL EXPORTING query ZXXXXXXXX us
  • 从 Fiori 列表报告导航到标准应用程序(例如热点)?

    我已经根据之前创建的 CDS 视图创建了列表报告 Fiori 应用程序 是否有可能在现有和 或附加 CDS 视图中使用一些注释来创建供应商编号上的热点智能字段 IE 当我点击它时 它会将我导航到该供应商的标准 业务合作伙伴 应用程序 如果这
  • 反序列化匿名 JSON 数组?

    我有一个想要反序列化的匿名数组 这里是第一个数组对象的示例 time 08 55 54 date 2016 05 27 timestamp 1464332154807 level 3 message registerResourcePath
  • 如何使用 WHERE 条件中的关联值从 ABAP SQL 消费 CDS?

    我有一个通知标头的 CDS 视图及其状态关联 define view ZNOTIF as select from qmel as notif association 0 to ZNOTIF STATUS as status on statu

随机推荐

  • iOS中的autorelease

    iOS中的autorelease是一种非常重要的内存管理机制 它可以自动释放对象 从而避免内存泄漏和内存溢出等问题 在本文中 我们将详细介绍iOS中的autorelease机制 包括它的原理 使用方法以及注意事项等内容 autoreleas
  • TCP、UDP、IP报头结构体分析

    TCP UDP IP报头结构体分析 TCP数据段格式 TCP是一种可靠的 面向连接的字节流服务 源主机在传送数据前需要先和目标主机建立连接 然后 在此连接上 被编号的数据段按序收发 同时 要求对每个数据段进行确认 保证了可靠性 如果在指定的
  • c盘哪些文件可以删除?正确答案在这里!

    当我们使用电脑时 经常下意识把各种文件数据保存在c盘 导致c盘的空间越来越小 想要清理电脑缓存 c盘哪些文件可以删除 注意 清理文件之前 记得要备份好重要的数据 下面一起来看看哪些c盘文件可以删除吧 操作环境 演示机型 华硕X8AE43In
  • Python下的图像处理库,你要选哪个?

    欢迎大家关注微信公众号 baihuaML 白话机器学习 码字不易 如转载请私信我 在这里 我们一起分享AI的故事 您可以在后台留言 关于机器学习 深度学习的问题 我们会选择其中的优质问题进行回答 在进行数字图像处理时 我们经常需要对图像进行
  • location.host 与 location.hostname 的区别

    location host 与 location hostname 的区别 location host 包含端口 端口是80的话 就不显示 location hostname 不包含端口 http localhost 8888 locati
  • webgl unity_Unity WebGL中的低级插件

    webgl unity Last year we launched a series of technical blog posts on WebGL starting with a couple of posts on memory No
  • nrm 的安装和使用

    NRM介绍 官方解释 开发的npm registry 管理工具 nrm 能够查看和切换当前使用的registry 换言之nrm的作用就是方便用户切换npm的镜像源地址 npm的原始镜像源地址是在国外 国内网络访问比较慢 因此国内的某些大佬机
  • jupyter生成视频动画video anmation

    本文介绍一个正弦余弦波案例来展示jupyter生成动画过程 首先电脑安装一个叫做ffmpeg的软件 只有40M 是一个关于网页制作动画的软件 安装过程见博客 15条消息 安装ffmpeg并写入jupyter matplotlib 山晨啊8的
  • 目录遍历的三种方法

    1 目录的遍历 递归函数 def visitDir path li os listdir path for p in li pathname os path join path p if not os path isfile pathnam
  • Docker与容器的基本概念

    本文主要对Docker和容器的一些基本概念进行一个总结 一 容器与虚拟机 1 什么是容器 Docker官方对容器的解释 一句话概括 容器 Container 就是将软件打包成标准化单元 以用于开发 交付和部署 容器是打包代码及其所有依赖的软
  • mesa图解

    http www sourcecodebrowser com mesa 7 8 2 state 8c html
  • C - Divisors of the Divisors of An Integer Gym - 102040C

    题目链接 题意 就是求n 中因子的因子的个数 题解 n 中某个因子的个数就是n x的累加 证明 其实就是每次褪一层 即每次除去能除于1个3的 依次两个3的 三个3的个数 最终也就能得到3的个数 这里没必要 整除 因为是阶乘 所以即使不能整除
  • Redis初级命令

    一 常用key命令 查看所有key keys 查看key的类型 type key 返回状态1 0 True False 当传入多个key时返回or的结果 即只要有一个存在就返回True exists key key 将key从当前db移动到
  • 学生成绩管理系统数据库设计--MySQL

    MySQL 数据库设计 学生成绩管理系统 设计大纲 友情链接 1 医疗信息管理系统数据库 MySQL 2 邮件管理数据库设计 MySQL 3 点餐系统数据库设计 SQL Server 4 商品管理系统数据库设计 SQL Server 5 S
  • JavaEE架构之传统三层架构,集群架构,分布式架构,微服务架构

    javaEE架构 1 传统三层架构 all in one项目 传统三层架构大致可以分为表现层 业务层和持久层 数据访问层 其中表现层负责接受请求和转发请求 业务层负责处理请求 注 事务管理 日志记录等AOP类型的操作均封装在这一层 持久层主
  • 将web项目导出到远程服务器的tomcat中

    将web项目导出到远程服务器的tomcat中 前期准备 步骤 前期准备 eclipse2017创建的web项目 阿里云服务器中存在tomcat 远程连接工具 windows自带 步骤 1 在eclipse上将完成好的web项目导出为war文
  • ubuntu linux安装pytorch和torchvision

    1 下载镜像 镜像网址 https download pytorch org whl torch stable html 假设你要下载torch1 4 0版本 cp36代表你的环境是python3 6 cu100代表的是你的cuda是10
  • C语言大作业学生成绩管理系统

    1 设计要求 利用所学的知识 理论和实际结合 利用资源 采用模块化的结构 使用模仿修改自主设计相结合的方法 锻炼学生综合分析解决实际问题的编程能力 通过C语言各个函数功能来实现对学生信息的管理 学生信息包括学生姓名 学号 各科成绩 管理方式
  • c++中的成员访问级别和派生继承方式

    1 一个类中的不同变量和函数的访问属性 总共有三种访问级别 public private protected 在类中定义的成员变量和成员函数的时候 如果不在变量前面加上访问级别修饰符 类中默认为私有成员变量或者私有成员函数 而在结构体中如果
  • OOALV data_changed 與data_changed_finished事件

    data changed在可編輯字段的數據發生變化時才會觸發 可用來檢查輸入數據的正確性 data changed finished在回車時和可編輯字段數據發生變化后 光標移動時觸發 如果可編輯字段數據檢查失敗 則不會觸發此事件 這兩個事件