ABAP - Function ALV 05 添加选择框列、全选、取消全选

news2025/1/20 5:58:23
  • 很多用户不习惯原生GRID的选择模式,所以业务需要用到自定义的选择框来进行数据的操作,显示效果如图所示,增加一条选择列,且配置全选和全选全选的按钮功能,如下图所示。

  • 实现这种功能需要用到Fieldcat的参数控制以及GUI状态的配置和处理 
  • 1.Fieldcat参数控制,将改成设置成选择框的样式,且该列可以被编辑
** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,
     gs_fieldcat LIKE LINE OF gt_fieldcat.

** FieldCat的宏
DATA gv_pos TYPE i.

DEFINE %%add_fieldcat.
  gv_pos = gv_pos + 1.
  gs_fieldcat-col_pos = gv_pos.
  gs_fieldcat-fieldname = &1.
  gs_fieldcat-scrtext_m = &2.

  CASE &1.        "根据fieldname字段给结构做赋值控制
    WHEN 'SEL'.
      gs_fieldcat-checkbox = 'X'. "该列选择框显示
      gs_fieldcat-edit     = 'X'. "该列可以编辑
  ENDCASE.

  APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.

** Fieldcat字段映射处理
  %%add_fieldcat:'EBELN'    '采购单号',  "( 前面字段值不可变 后面字段描述可变 每一行都是)
                 'EBELP'    '采购订单行号',
                 'SEL'      '选择'.
  • 2.GUI状态的配置和处理。需要在GUI状态添加自定义按钮,并且做数据更新。ALV增加自定义按钮参考:https://mp.csdn.net/mp_blog/creation/editor/136279698
FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

"应用方法将修改ALV的数据保存到内表中
  DATA lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA l_tabix LIKE sy-tabix.  "系统参数   行号

"此处代码将用户输入读入内表(这一步不可少)
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据
    IMPORTING
      e_grid = lr_grid.

  CALL METHOD lr_grid->check_changed_data.
  rs_selfield-refresh = 'X'.   "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层
  rs_selfield-row_stable = 'X'. "保证行、列位置在自动刷新时不变
  rs_selfield-col_stable = 'X'.

  CASE r_ucomm.
    WHEN 'ALL'.
      LOOP AT gt_data INTO gw_data.
        gw_data-sel = 'X'.
        MODIFY gt_data FROM gw_data.
      ENDLOOP.

    WHEN 'SAL'.
      LOOP AT gt_data INTO gw_data.
        gw_data-sel = ''.
        MODIFY gt_data FROM gw_data.
      ENDLOOP.
  ENDCASE.

ENDFORM.


  • 完整代码
TYPES:BEGIN OF ty_data,
       sel TYPE char1,
       ebeln TYPE ekpo-ebeln,
       ebelp TYPE ekpo-ebelp,
       END OF ty_data.

DATA gt_data TYPE TABLE OF ty_data.
DATA gw_data TYPE ty_data.

** Layout  变量定义
DATA gs_layout   TYPE lvc_s_layo.

** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,
     gs_fieldcat LIKE LINE OF gt_fieldcat.

** FieldCat的宏
DATA gv_pos TYPE i.

DEFINE %%add_fieldcat.
  gv_pos = gv_pos + 1.
  gs_fieldcat-col_pos = gv_pos.
  gs_fieldcat-fieldname = &1.
  gs_fieldcat-scrtext_m = &2.

  CASE &1.
    WHEN 'SEL'.
      gs_fieldcat-checkbox = 'X'. "当做选择框显示
      gs_fieldcat-edit     = 'X'. "该字段可以编辑
  ENDCASE.

  APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.

START-OF-SELECTION.

SELECT ekpo~ebeln  "采购订单抬头数据- 采购单号
       ekpo~ebelp  "采购订单明细数据- 采购订单行号
  INTO CORRESPONDING FIELDS OF TABLE gt_data
  FROM ekpo
  UP TO 20 ROWS.

** Fieldcat字段映射处理
  %%add_fieldcat:'EBELN'    '采购单号',  "( 前面字段值不可变 后面字段描述可变 每一行都是)
                 'EBELP'    '采购订单行号',
                 'SEL'      '选择'.

** Layout布局处理
  gs_layout-cwidth_opt = 'X'.     "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)
  gs_layout-zebra = 'X'.          "斑马纹输出

** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,Status
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program        = sy-repid
      i_callback_pf_status_set  = 'FRM_SET_STATUS'
      i_callback_user_command   = 'FRM_USER_COMMAND'
      is_layout_lvc             = gs_layout
      it_fieldcat_lvc           = gt_fieldcat
    TABLES
      t_outtab                 = gt_data[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

FORM frm_set_status USING p_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD'.
ENDFORM.


FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

"应用方法将修改ALV的数据保存到内表中
  DATA lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA l_tabix LIKE sy-tabix.  "系统参数   行号

"此处代码将用户输入读入内表(这一步不可少)
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据
    IMPORTING
      e_grid = lr_grid.

  CALL METHOD lr_grid->check_changed_data.
  rs_selfield-refresh = 'X'.   "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层
  rs_selfield-row_stable = 'X'. "保证行、列位置在自动刷新时不变
  rs_selfield-col_stable = 'X'.

  CASE r_ucomm.
    WHEN 'ALL'.
      LOOP AT gt_data INTO gw_data.
        gw_data-sel = 'X'.
        MODIFY gt_data FROM gw_data.
      ENDLOOP.

    WHEN 'SAL'.
      LOOP AT gt_data INTO gw_data.
        gw_data-sel = ''.
        MODIFY gt_data FROM gw_data.
      ENDLOOP.
  ENDCASE.

ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[02 git ] 清华大学电子系科协软件部2023暑期培训

本视频为清华大学电子系科协软件部2023年暑期培训内容的录屏,主要培训内容为游戏开发、网站建设中常用的软件工具,为未来一年软件部新部员维护科协网站、开发清华大学人工智能挑战赛(THUAI)作知识铺垫。本次培训还邀请到两位嘉宾讲…

Apache celeborn 安装及使用教程

1.下载安装包 https://celeborn.apache.org/download/ 测0.4.0时出现https://github.com/apache/incubator-celeborn/issues/835 2.解压 tar -xzvf apache-celeborn-0.3.2-incubating-bin.tgz 3.修改配置文件 cp celeborn-env.sh.template celeborn-env.shcp log4j2.xml.…

【PX4SimulinkGazebo联合仿真】在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化

在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化 系统架构Matlab官方例程Control a Simulated UAV Using ROS 2 and PX4 Bridge运行所需的环境配置PX4&Simulink&Gazebo联合仿真实现方法建立Simulink模型并完成基本配置整体框架各子系统实现…

人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?

#ai作画 目录 一.AI绘画的概念 1. 数据集准备: 2. 模型训练: 3. 生成绘画: 二.AI绘画的应用领域 三.AI绘画的发展 四.AI绘画背后的技术剖析 1.AI绘画的底层原理 2.主流模型的发展趋势 2.1VAE — 伊始之门 2.2GAN 2.2.1GAN相较于…

香港服务器掉包原因及处理方法

在使用香港服务器的过程中,有时会遇到“掉包”现象,即数据传输过程中数据包丢失或延迟。这不仅影响用户体验,还可能对企业运营造成不良影响。那么,香港服务器掉包的原因是什么?又该如何处理呢?小库评测将为您科普相关知识。 一、…

消息中间件篇之RabbitMQ-消息重复消费

一、导致重复消费的情况 1. 网络抖动。 2. 消费者挂了。 消费者消费消息后,当确认消息还没有发送到MQ时,就发生网络抖动或者消费者宕机。那当消费者恢复后,由于MQ没有收到消息,而且消费者有重试机制,消费者就会再一次消…

一招鲜吃遍天!ChatGPT高级咒语揭秘:记忆、洗稿、速写SEO文章(一)

🌟 摘要 🌟 这个专栏系列的初衷是针对特定痛点精心设计GPT提示词,在这篇文章中,我们深入探讨了利用GPT技术解决三个常见挑战:增强记忆力、内容创新、以及SEO文章速写的高级技巧。这些挑战分别对应三个独特的解决策略,我们将逐一详细解析。 首先,解决记忆增强的挑战,我…

聊聊JVM运行时数据区的堆内存

聊聊JVM运行时数据区的堆内存 内存模型变迁: Java堆在JVM启动时创建内存区域去实现对象、数组与运行时常量的内存分配,它是虚拟机管理最大的,也是垃圾回收的主要内存区域 。 内存模型变迁: 为什么要有年轻区和老年区?…

js逆向-2

#md5加密,某宝案例演示。 #免责声明:本文仅供学习使用,请勿用于其他违法行为(╥ω╥)

通过STM32F756 QSPI来读写数据

通过STM32F756 QSPI来读写数据 手上做了一款STM32F756IGT6的开发板,是网上的公板子,扩展了32MB SDRAM, 但QSPI有一个引脚是有错误, 后面找了出来, 同时引出了大量的IO接口,可以支持LCD,但我没有…

DHCP配置案例-通过DHCP Relay功能从DHCP Server获取IP地址

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

普中51单片机学习(LCD1602)

LCD1602 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔&#…

【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试

文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…

win10安装使用AxurePR9

背景:win10 安装、汉化 Axure Pr9 下载 安装包 链接:https://pan.baidu.com/s/1taMgh2zLbaFK7VTfUXTHdQ 提取码:kygo 安装 修改安装目录 打开是英文的 汉化 复制lang包到Axure安装包 再打开就是中文 问题 发布html后火狐无法打开 一、…

Sublime Text4配置C#运行环境

这里写自定义目录标题 前言部署.NET环境Sublime Text4配置C#编译环境1. 下载插件 运行测试 前言 今天把家里的9年前的远古神机搬了出来,重装了个win7的精简版,本打算装个VScode测试一下是否能写C#代码,结果是可以的,但&#xff0…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量), 将各个ip地址截取,并统计出现次数,并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。 强大的节点功能,不仅仅节点的种类很多&#xf…

git 获取仓库代码与提交代码

1. 建文件夹,获取项目的完整代码 2.Git安装 打开安装程序后,一直点击下一步,直到以下位置: 此处代表使用VIM作为Git默认的编辑器。继续下一步,直到: 这里选择第一项,即仅仅在Bash中使用Git。如果有Linux的学…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管,显示输入信号的频率。完成功能仿真后,用AD软件,画出原理图以及PCB。 2.电路设计 输入信号的参数为: 可见,输入为168HZ,测量值为170HZ,误差在可接受的范围内。 3.PCB设…

C++ 离散化算法设计原则:压缩的都是精华

公众号:编程驿站 1. 离散化 离散化是离散数学中的概念。离散化算法,指把无限空间中的离散数据映射到一个有限的存储空间中,并且对原数据进行有序索引化。主打压缩的都是精化。 离散化流程: 对离散化数列{235,897,458,7654,458…