了解 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…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
