了解 ALV 中的 field catalog (ABAP List Viewer)
在 ABAP 中,字段目录是使用 ALV (ABAP List Viewer) 定义内部表中的数据显示方式的关键元素。它提供对 ALV 中显示的字段的各种属性的控制,例如列标题、对齐方式、可见性、可编辑性等。关键概念:
Field Catelog 字段目录:这是一个表(对于现代 ALV 网格,通常为 lvc_t_fcat
类型,对于旧 ALV 网格,通常为 slis_t_fieldcat_alv
),其中包含有关 ALV 中显示的内部表的每个字段的元数据。
它定义了每列的显示方式(例如,列标题、字段对齐方式、输出长度)。
创建字段目录:您可以手动定义字段目录,也可以使用 LVC_FIELDCATALOG_MERGE
等功能模块根据数据字典结构 (DDIC) 自动创建一个字段目录。生成目录后,您可以对其进行修改以调整字段属性。
Field catalog
全局结构类型的所有字段都以相同的名称出现在数据表中。现在需要对字典结构进行更改或显示额外的列。
在这种情况下,我们可以调用函数模块 ( LVC_FIELDCATALOG_MERGE
),该模块将字典结构的字段目录返回到 lvc_t_fcat
类型的表。
现在我们可以循环它并可以进行我们想要的任何更改。
- 不支持
REUSE_*ALV*
功能模块。我建议切换到CL_SALV_*
类。文档更好,有更多的示例程序 (DEMO_SALV_*
),您可以获得支持。 - 如果你想获得基于字典的字段描述 (duh),你需要一个字典结构。如果您使用 在 ABAP 级别组装结构类型
TYPE ...
BEGIN OF ... END OF ...
,据我所知,各个字段的字典类型首先转换为 ABAP 类型,然后才组装成结构类型。无论如何,原始字段的字典引用会丢失。不要在代码中定义输出表的结构,而是使用字典结构。
结构 slis_fieldcat_alv
提供了几种不同的文本组件,这些组件用作列标签。选择的文本取决于当前列宽(这通常取决于显示的数据的长度)。确保你相应地更改它们!
通常的技术是:通过传递 I_STRUCTURE_NAME
,您可以获得与此 DDIC 结构(更改参数 ct_fieldcat
)对应的字段目录。然后,您可以根据需要修改此内部表,并将修改后的表传递给 REUSE_ALV_GRID_DISPLAY
。
在我不区分不同大小的文本版本的情况下,我使用以下宏将所有文本字段设置为相同的值。
define set_field
data:lt_fcat type lvc_t_fcat.
data:tabname type ref to data,tabline type ref to data.field-symbols:<gt> type standard table,<gs> type any.call function 'LVC_FIELDCATALOG_MERGE'exportingi_structure_name = 'DDIC_STRUCTURE'changingct_fieldcat = lt_fcatexceptionsinconsistent_interface = 1program_error = 2others = 3." Creating tablecall method cl_alv_table_create=>create_dynamic_tableexportingit_fieldcatalog = lt_fcatimportingep_table = tabname.assign tabname->* to <gt>.
create data tabline like line of <gt>.
assign tabline->* to <gs>.
示例代码:
Report zalv.
DATA: t_fcat TYPE lvc_t_fcat. " INTERNAL TABLE
FIELD-SYMBOLS: TYPE lvc_s_fcat.CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'EXPORTINGi_structure_name = 'SFLIGHT'CHANGINGct_fieldcat = t_fcatEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.LOOP AT t_fcat ASSIGNING .CASE -fieldname .WHEN 'PLANETYPE'.-coltext = 'PLANE'.WHEN 'SEATSMAX'.-no_out = 'X'.ENDCASE.ENDLOOP.
REPORT zalv.
TYPES:BEGIN OF stu,carrid TYPE sflight-carrid,connid TYPE sflight-connid,fldate TYPE sflight-fldate,w_check,END OF stu.
DATA:fs_itab TYPE stu, " INTERNAL TABLEt_itab LIKE TABLE OF fs_itab. " WORK AREA
DATA:r_grid TYPE REF TO cl_gui_alv_grid,r_container TYPE REF TO cl_gui_custom_container.
DATA:t_fcat TYPE lvc_t_fcat,wa_fcat TYPE lvc_s_fcat.
SELECT carrid connid fldate FROM
sflight INTO CORRESPONDING FIELDS OF TABLE t_itab.
CALL SCREEN 100.
*&---------------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------
MODULE status_0100 OUTPUT.SET PF-STATUS 'SCREEN'.SET TITLEBAR 'TITLE'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------
*text
*--------------------------------------------------------------------
MODULE user_command_0100 INPUT.CASE sy-ucomm.WHEN 'BACK'.LEAVE TO SCREEN 0.ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------
*& Module SET_HANDLER OUTPUT
*&-------------------------------------------------------------------
*text
*----------------------------------------------------------------------
MODULE set_handler OUTPUT.CREATE OBJECT r_containerEXPORTINGcontainer_name = 'CONTAINER'.CREATE OBJECT r_gridEXPORTINGi_parent = r_container.
*POPULATING THE FIELD CATALOG.wa_fcat-fieldname = 'W_CHECK'.wa_fcat-coltext = 'CHECK'.wa_fcat-checkbox = 'X'.wa_fcat-edit = 'X'.wa_fcat-col_pos = 1.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.wa_fcat-fieldname = 'CARRID'.wa_fcat-ref_table = 'SFLIGHT'.wa_fcat-ref_field = 'CARRID'.wa_fcat-col_pos = 2.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.wa_fcat-fieldname = 'CONNID'.wa_fcat-ref_table = 'SFLIGHT'.wa_fcat-ref_field = 'CONNID'.wa_fcat-col_pos = 3.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.CALL METHOD r_grid->set_table_for_first_displayCHANGINGit_fieldcatalog = t_fcatit_outtab = t_itab.
ENDMODULE. " SET_HANDLER OUTPUT
REPORT zalv.
TYPES:BEGIN OF stu,carrid TYPE sflight-carrid,connid TYPE sflight-connid,fldate TYPE sflight-fldate,w_check,END OF stu.
DATA:
fs_itab TYPE stu, " INTERNAL TABLE
t_itab LIKE TABLE OF fs_itab. " WORK AREA
DATA:
r_grid TYPE REF TO cl_gui_alv_grid,
r_container TYPE REF TO cl_gui_custom_container.
DATA:
t_fcat TYPE lvc_t_fcat,
wa_fcat TYPE lvc_s_fcat.
SELECT carrid connid fldate FROM
sflight INTO CORRESPONDING FIELDS OF TABLE t_itab.
CALL SCREEN 100.
*&---------------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------
MODULE status_0100 OUTPUT.SET PF-STATUS 'SCREEN'.SET TITLEBAR 'TITLE'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------
*text
*--------------------------------------------------------------------
MODULE user_command_0100 INPUT.CASE sy-ucomm.WHEN 'BACK'.LEAVE TO SCREEN 0.ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------
*& Module SET_HANDLER OUTPUT
*&-------------------------------------------------------------------
*text
*----------------------------------------------------------------------
MODULE set_handler OUTPUT.CREATE OBJECT r_containerEXPORTINGcontainer_name = 'CONTAINER'.CREATE OBJECT r_gridEXPORTINGi_parent = r_container.
*POPULATING THE FIELD CATALOG.wa_fcat-fieldname = 'W_CHECK'.wa_fcat-coltext = 'CHECK'.wa_fcat-checkbox = 'X'.wa_fcat-edit = 'X'.wa_fcat-col_pos = 1.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.wa_fcat-fieldname = 'CARRID'.wa_fcat-ref_table = 'SFLIGHT'.wa_fcat-ref_field = 'CARRID'.wa_fcat-col_pos = 2.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.wa_fcat-fieldname = 'CONNID'.wa_fcat-ref_table = 'SFLIGHT'.wa_fcat-ref_field = 'CONNID'.wa_fcat-col_pos = 3.APPEND wa_fcat TO t_fcat.CLEAR wa_fcat.CALL METHOD r_grid->set_table_for_first_displayCHANGINGit_fieldcatalog = t_fcatit_outtab = t_itab.
ENDMODULE. " SET_HANDLER OUTPUT
参考链接
- https://answers.sap.com/questions/3380700/using-the-fm-lvcfieldcatalogmerge.html
- https://answers.sap.com/questions/6058081/fieldcatalog-merge-in-alv-report.html
- https://wiki.scn.sap.com/wiki/display/ABAP/Field+catalog+types
- https://ultimasolution.pl/refresh-alv-grid-and-keep-position-and-current-cell-abap
相关文章:
了解 ALV 中的 field catalog (ABAP List Viewer)
在 ABAP 中,字段目录是使用 ALV (ABAP List Viewer) 定义内部表中的数据显示方式的关键元素。它提供对 ALV 中显示的字段的各种属性的控制,例如列标题、对齐方式、可见性、可编辑性等。关键概念: Field Catelog 字段目…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之修改密码和个人资料
🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎃1.修改密码 -持久…...

十一、CentOS Stream 9 安装 Docker
一、Docker 环境安装 1、软件源(仓库)信息 使用如下命令可列出当前系统配置的所有软件源(仓库)信息 # 列出所有软件源 dnf repolist 这表明系统有三个仓库 AppStream 、 BaseOS、Extras-Common 被启用 2、配置软件源镜像 使用如下命令可配置 Docker 软件包下载的镜像地址 …...

FreeRTOS学习 --- 中断管理
什么是中断? 让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断 中断执行机制,可简单概括为三步: 1,中断请求 外设产生中断请求(GPIO外部中断、定时器中断…...

如何在Intellij IDEA中识别一个文件夹下的多个Maven module?
目录 问题描述 理想情况 手动添加Module,配置Intellij IDEA的Project Structure 问题描述 一个文件夹下有多个Maven项目,一个一个开窗口打开可行但是太麻烦。直接open整个文件夹会发现Intellij IDEA默认可能就识别一个或者几个Maven项目,如…...
机器学习模型--线性回归、逻辑回归、分类
一、线性回归 级别1:简单一元线性回归(手工实现) import numpy as np import matplotlib.pyplot as plt# 生成数据 X np.array([1, 2, 3, 4, 5]) y np.array([2, 4, 5, 4, 5])# 手动实现梯度下降 def gradient_descent(X, y, lr0.01, epo…...
gitlab个别服务无法启动可能原因
目录 一、gitlab的puma服务一直重启 1. 查看日志 2. 检查配置文件 3. 重新配置和重启 GitLab 4. 检查系统资源 5. 检查依赖和服务状态 6. 清理和优化 7. 升级 GitLab 8. 查看社区和文档 二、 gitlab个别服务无法启动可能原因 1.服务器内存或磁盘已满 2.puma端口冲突…...
react的antd表格数据回显在form表单中
1、首先为table添加编辑按钮 {title: 操作,align: center,render: (_: any, record: any) > (<div style{{ display: flex, alignItems: center, justifyContent: space-evenly }}><Buttonsize"small"onClick{() > deitor(record)} style{{ margin…...
深度分析:网站快速收录与网站内容多样性的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/87.html 网站快速收录与网站内容多样性之间存在着密切的关系。以下是对这一关系的深度分析: 一、网站内容多样性对快速收录的影响 提升搜索引擎抓取效率: 多样化的…...

feign 远程调用详解
在平常的开发工作中,我们经常需要跟其他系统交互,比如调用用户系统的用户信息接口、调用支付系统的支付接口等。那么,我们应该通过什么方式进行系统之间的交互呢?今天,简单来总结下 feign 的用法。 1:引入依…...

【Android】jni开发之导入opencv和libyuv来进行图像处理
做视频图像处理时需要对其进行水印的添加,放在应用层调用工具性能方面不太满意,于是当下采用opencvlibyuv方法进行处理。 对于Android的jni开发不是很懂,我的需求是导入opencv方便在cpp中调用,但目前找到的教程都是把opencv作为模…...

【Elasticsearch】terms聚合误差问题
Elasticsearch中的聚合查询在某些情况下确实可能存在误差,尤其是在处理分布式数据和大量唯一值时。这种误差主要来源于以下几个方面: 1.分片数据的局部性 Elasticsearch的索引通常被分成多个分片,每个分片独立地计算聚合结果。由于数据在分…...
深入理解 `box-sizing: border-box;`:CSS 布局的利器
深入理解 box-sizing: border-box;:CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中,box-sizing 属性决定了元素的总宽度和高度是…...
【原子工具】快速幂 快速乘
题幂算.一切即1 阴阳迭变积微著,叠浪层峦瞬息功 莫道浮生千万事,元知万象一归宗 文章目录 快速幂原始快速幂(O(logn))二分递归形式非递归形式 模下意义的快速幂(O(logn))二分递归形式非递归形式 快速乘龟速…...

Apache SeaTunnel 整体架构运行原理
概述 SeaTunnel 缘起 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长及业务需求的快速变化,企业需要具备强大的数据集成能力来高效地处理数据。SeaTunnel通过其高度可扩展和灵活的架构,帮助企业…...
Nginx如何实现 TCP和UDP代理?
文章目录 前言 Nginx之TCP和UDP代理 工作原理示意图 配置文件和命令参数注释 基本命令 配置实例说明 TCP代理实例UDP代理实例 总结 前言 Nginx是一个高性能的HTTP和反向代理服务器,同时也支持TCP/UDP代理。在1.9.13版本后,Nginx已经支持端口转发&…...

蓝桥杯思维训练营(三)
文章目录 题目详解680.验证回文串 II30.魔塔游戏徒步旅行中的补给问题观光景点组合得分问题 题目详解 680.验证回文串 II 680.验证回文串 II 思路分析:这个题目的关键就是,按照正常来判断对应位置是否相等,如果不相等,那么就判…...

开箱即用的.NET MAUI组件库 V-Control 发布了!
之前写过挺多的MAUI Sample,其中有很多代码可以打包成组件,当组件完善到一定程度,我会把控件封装起来放到控件库中。 今天,在这个仓库建立一年零八个月后,我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …...

动手学图神经网络(9):利用图神经网络进行节点分类 WeightsBiases
利用图神经网络进行节点分类Weights&Biases 引言 在本篇博客中,将深入探讨如何使用图神经网络(GNNs)来完成节点分类任务。以 Cora 数据集为例,该数据集是一个引用网络,节点代表文档,推断每个文档的类别。同时,使用 Weights & Biases(W&B)来跟踪实验过程和…...
【文件上传、秒传、分片上传、断点续传、重传】
文章目录 获取文件对象文件上传(秒传、分片上传、断点续传、重传)优化 获取文件对象 input标签的onchange方法接收到的参数就是用户上传的所有文件 <html lang"en"><head><title>文件上传</title><style>#inp…...
SQL进阶之旅 Day 18:数据分区与查询性能
【SQL进阶之旅 Day 18】数据分区与查询性能 文章简述 在现代数据库系统中,随着数据量的快速增长,如何高效地管理和查询大规模数据成为开发人员和数据分析师面临的重要挑战。本文深入探讨了数据分区的概念及其对查询性能的提升作用,结合理论…...

阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
运行以下命令,安装Nginx相关依赖。 yum install -y gcc-c yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 运行wget命令下载Nginx 1.21.6。 您可以通过Nginx开源社区直接获取对应版本的安装包URL&…...
ReLU 新生:从死亡困境到强势回归
背景 在深度学习领域,激活函数的探索已成为独立研究课题。诸如 GELU、SELU 和 SiLU 等新型激活函数,因具备平滑梯度与出色的收敛特性,正备受关注。经典 ReLU 凭借简洁性、固有稀疏性及其独特优势拓扑特性,依旧受青睐。然而&#…...
使用Conda管理服务器多版本Python环境的完整指南
在服务器环境中管理多个Python版本是开发者和系统管理员常见的需求,尤其是当不同项目依赖特定版本的Python时。本文将重点介绍如何通过Conda实现多版本Python的隔离与管理,确保服务器环境的稳定性和灵活性。 为什么需要多版本Python管理? 服…...

前端杂货铺——TodoList
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

C#子线程更新主线程UI及委托回调使用示例
1.声明线程方法 2.线程中传入对象 3.声明委托与使用 声明委托对象 委托作为参数传入方法 4.在线程中传入委托 5.调用传入的委托...

UOS无法安装deb软件包
UOS无法安装deb软件包 问题描述解决办法: 关闭安全中心的应用隔离结果验证 问题描述 UOS安装Linux微信的deb包时,无法正常安装 解决办法: 关闭安全中心的应用隔离 要关闭-安全中心的应用隔离后才可以正常软件和运行。 应用安全----》 允许任意应用。 结果验证 # …...

VUE前端实现自动打包成压缩文件
VUE前端实现自动打包成压缩文件 背景思路实现打包代码实现 尾巴 背景 做前端开发的兄弟们都经历过每次开发完成之后发包需要进行打包,然后将打包文件压缩。每次打好包了都得手动压缩一遍,就有点繁琐。今天我们就使用一种命令行自动压缩的方法࿰…...

408第一季 - 数据结构 - 线性表II
链表 头节点始终指向第一个 头节点的好处: 第一个好处 这里L是头节点 可以发现,删除第一个也可以统一了 第二个好处 这是无头节点,空和非空指向的不一样 然后有头节点就可以统一了! 双链表 插入 第一步要在第四步之前&…...
网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层
网络通讯分层 网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次,每个层次专注于特定功能。目前主流的分层模型包括OSI七层模型和TCP/IP四层(或五层)模型,以下是详细解析: 一、OSI七层模型&#…...