ABAP接口日志查询程序

合集下载

SAP ABAP开发开启表日志记录

SAP ABAP开发开启表日志记录

一、目标
为记录部分业务表的修改记录,需要开启系统的表日志记录功能二、用到的事物代码
SE11、RZ10 、SCU3
三、操作步骤(截图) :
1、在命令行中输入SE11
2、输入表名,并点击“修改”按钮
3、进入界面后点选工具栏的“技术设置”按钮
4、勾选“日志数据修改”选项,然后“保存”并“激活”。

5、命令行输入事物代码“RZ10” .
6、在“编辑参数文件”子页面选择“扩展维护”选项
7、在“参数文件”栏位选择“子系统参数文件”
8、点击“修改”进入下一页面
9、点击“参数”按钮添加新的参数
10、在“参数名称”栏位填入“rec/client’, 在“参数值”栏位填入自身的client。

然后点击“复制”按钮。

点击“后退”按钮回到上一界面。

11、点击“复制”按钮并退回上一界面
12、点击“保存”。

13、点击按钮“是”。

14、点击‘’
15、继续点击‘’
16、退出系统并重启服务器,使配置参数生效。

17、查看前面所设置的表的修改日志,在命令行中输入事物代码“SCU3”
18、点击按钮“Evaluate log”
19、在“定制对象或表”栏位输入表名
在“限制”子页面输入需要查询的时间段
在“评估为“子页面选择“表”
在“output options”勾选“ALV Grid display”选项
然后点击执行按钮“”
下一界面将列出在此段时间内各种业务对该表所作的修改。

机密:第 11 页共 11页。

ABAP入门知识最全总结新人小白必备学习资料

ABAP入门知识最全总结新人小白必备学习资料
ABAP是一种面向对象的编程语言, 支持结构化编程和面向对象编程两 种方式,具有强大的数据处理和报 表生成功能。
SAP系统与ABAP关系
01
SAP系统是一款广泛应用于企业 资源计划(ERP)、供应链管理 (SCM)、客户关系管理 (CRM)等领域的软件产品。
02
ABAP是SAP系统的开发语言, 用于编写SAP系统中的业务逻辑、 数据处理和报表生成等功能。
调试日志
在调试过程中,可以开启调试日 志功能,记录程序执行过程中的 详细信息和操作步骤。这对于复 杂问题的排查和分析非常有帮助。
08
实战案例分析与经验分 享
案例一:简单报表开发实例
报表需求分析与设计
明确报表目的、数据源和输出格式,设计报 表布局和字段。
ABAP报表开发流程
创建报表程序,定义数据源和选择条件,编 写报表逻辑和输出处理。
根据实际需求设置报表的输出格式, 如PDF、Excel、Word等。
格式调整
调整报表的页面设置、边距、字体、 颜色等,确保报表输出的美观和易读 性。
报表性能优化策略
数据源优化
优化数据库查询语句,减少数据冗余和提高查询 效率。
报表缓存
合理利用报表缓存机制,减少重复计算和数据库 访问次数。
分页处理
对于大量数据的报表,采用分页处理技术,提高 报表加载速度和用户体验。
Eclipse与SAP系统连接
配置Eclipse连接参数,连接到SAP系统,实现ABAP代码的上传、下载和执行等操作。
其他辅助工具推荐
SAP Notepad
一款轻量级的文本编辑器,支持ABAP语法高亮显示和代 码折叠等功能,适合编写简单的ABAP程序。
ABAP Doc

SAPBAPI函数使用及示例

SAPBAPI函数使用及示例

SAPBAPI函数使用及示例SAP BAPI(Business Application Programming Interface)是SAP系统中的一种编程接口,用于实现外部系统与SAP系统的集成。

BAPI函数是SAP系统中提供的一类函数,可以用于对SAP业务对象的读取、创建、修改和删除等操作。

使用BAPI函数可以方便地与SAP系统进行交互,并且不需要了解SAP系统的内部复杂逻辑。

下面以创建销售订单为例,介绍BAPI函数的使用方法及示例。

首先,需要了解BAPI函数的命名规则。

通常,BAPI函数以“BAPI_”开头,后面跟着业务对象名称和操作类型。

比如,创建销售订单的BAPI函数名为“BAPI_SALESORDER_CREATEFROMDAT2”。

接下来是使用BAPI函数的步骤:1.查找BAPI函数:可以通过SAP的事务代码“BAPI”来查找需要使用的BAPI函数。

在其中,可以根据不同的功能模块、业务对象和操作类型进行。

2.准备BAPI输入参数:每个BAPI函数都有一组输入参数,用于传递需要操作的对象的信息。

比如创建销售订单的BAPI函数需要传入订单的基本信息、物料明细等。

可以通过查阅SAP的官方文档或使用SAP的元数据浏览器来了解每个参数的含义和数据类型。

3. 调用BAPI函数:在外部系统中调用BAPI函数,传入合适的输入参数。

可以使用不同的开发语言(如Java、C#等)来实现调用。

需要注意的是,调用BAPI函数需要使用SAP的RFC(Remote Function Call)机制,确保能够与SAP系统进行通信。

4.处理BAPI返回结果:BAPI函数的返回结果通常是一个结构体,包含执行结果的状态码、错误消息等信息。

外部系统可以根据返回结果进行相应的处理,比如判断操作是否成功、记录错误日志等。

下面是一个使用BAPI函数创建销售订单的示例(使用ABAP语言实现):```DATA: sales_order TYPE bapibus2024_orderhdr,sales_order-doc_type = 'ZOR'.sales_order-sales_org = '1000'.sales_order-distribution_channel = '01'.sales_order-division = '00'.CALLFUNCTION'BAPI_SALESORDER_CREATEFROMDAT2'EXPORTINGorder_header_in = sales_orderTABLESreturn = return.IF return-type = 'E'.WRITE: / 'Error occurred:', return-message.ELSE.WRITE: / 'Sales order created:', return-salesdocument.ENDIF.```在这个示例中,首先定义了一个结构体`sales_order`,用于存储销售订单的基本信息。

SAP异常日志查看手册

SAP异常日志查看手册

SAP异常日志查看手册1、ZPOLOG有记录的。

TCODE:ZPOLOG,选择接口名称,日期,日志代码2、查看日志信息:凡是E:打头的,都是WMS或MES代码中抛回的错误信息类似这种的,就是PO报的错误,可能是网络、配置等多方面原因引起的点击消息标识可以查看SAP端的日志,此日志保存一个月3、登录PO:测试机::50000/dir/start/index.jsp正式机::50000/dir/start/index.jsp 点击Configuration and Monitoring Home。

用户名:piuser 密码:1234qwer4、选择适配器引擎-》消息监控器5、如果是在PO端产生的错误,因错误而终止会有数字,打开后可以看到具体的报错原因。

目前发现的PO端常发生的问题:a)配置问题,字段为空值未设置为在XML中必须显示b)特殊字符问题,出现乱码c)外围系统WebService连不通。

可以用SoapUI进行测试d)外围系统调用PO的WebService连不通,多数是URL地址错误点击成功或因错误而终止的资料,可以直接链接到查看PI消息界面6、查看PI消息日志。

点击高级按钮,再勾选消息头数据,出现日志查询条件。

输入接口名称接口名称可以查询\\10.8.8.8\sap项目文件\07.Report&Interface Development报表&接口开发\中来股份SAP ERP项目PO接口开发清单_V1.1.xls7、选中需要查看的消息。

a)时间会跟电脑时间有2分钟左右的差异b)发送者组件:接口的发起方c)接收者组件:接口的接收方d)打开消息:打开发送者发送至接收者的消息e)相关消息:打开来回双方通讯的消息8、最下方的XML文件就是传送的实际内容9、拷贝出来进行XML格式化,然后进行分析。

sap webservice调用日志

sap webservice调用日志

sap webservice调用日志标题:通过SAP WebService调用日志,提升工作效率在日常工作中,我们经常需要通过SAP WebService调用日志来获取系统的运行状态和相关信息。

这些日志记录着系统的各种操作和事件,对于我们及时发现问题、解决故障至关重要。

本文将介绍如何利用SAP WebService调用日志的方法,以提升工作效率。

一、SAP WebService调用日志的基本原理SAP WebService是一种基于SOAP协议的网络服务,通过该服务可以实现各种操作,包括调用日志。

通过SAP WebService调用日志,我们可以获取系统的运行状态、错误信息、性能指标等重要数据,帮助我们及时发现和解决问题。

二、SAP WebService调用日志的步骤1. 创建SAP WebService连接:首先,我们需要在SAP系统中创建一个Web服务连接对象,用于与远程系统进行通信。

通过该连接对象,我们可以访问日志数据并进行相应的操作。

2. 调用日志接口:在连接对象中,我们可以找到相应的日志接口,通过调用该接口,可以获取所需的日志信息。

在调用接口时,可以指定一些查询条件,如时间范围、日志级别等,以过滤出符合要求的日志记录。

3. 解析和处理日志数据:一旦获取到日志数据,我们可以对其进行解析和处理,以便更好地理解系统的运行状态。

可以使用一些工具或编程语言进行解析,提取出有用的信息,并根据需要进行分析和统计。

4. 故障处理和优化:通过分析日志数据,我们可以及时发现系统存在的问题和潜在的风险,从而采取相应的措施进行故障处理和性能优化。

可以根据日志中的错误信息定位问题,并进行相应的修复和调整。

三、SAP WebService调用日志的应用场景1. 故障排查:通过调用日志,我们可以查找系统中出现的错误和异常,帮助我们快速定位故障,并进行相应的修复和调整。

2. 性能优化:通过分析日志数据,我们可以了解系统的性能瓶颈和优化空间,从而进行相应的调整和优化,提升系统的响应速度和稳定性。

查看日志的几种方法

查看日志的几种方法

查看日志的几种方法《查看日志的几种方法》方法一:通过文本编辑器查看朋友们,咱们平时查看日志,一个简单直接的办法就是用文本编辑器。

像大家熟悉的记事本、Notepad++ 这些,都能派上用场。

比如说,你把要查看的日志文件直接拖到记事本里,它就会打开啦。

然后,你就能一行一行地看里面的内容。

这就好比你在翻一本记录着各种事情的小本子,每一行字都可能藏着重要的信息。

不过,用这种方法的时候,要是日志文件特别大,可能打开就会有点慢。

但别着急,咱们耐心等等,总能看到我们想看的东西。

还有哦,有些日志的格式可能不太规整,看起来会有点费劲。

但只要咱们仔细点,多瞅瞅,总能从那些密密麻麻的字里找到有用的线索。

用文本编辑器查看日志,简单又方便,适合大多数情况。

方法二:使用专门的日志查看工具咱来说说另一种查看日志的办法,就是用专门的日志查看工具。

现在网上有不少这样的工具,比如说 LogViewer、ELK 等等。

这些工具可厉害了,它们能让查看日志变得更轻松、更高效。

这些工具一般都有一些很实用的功能。

比如说,可以按照时间顺序排列日志,这样你就能很清楚地看到事情发生的先后顺序。

还能根据关键词搜索,一下就找到你关心的那些内容,省得你在一堆文字里慢慢找。

而且,有的工具还能把不同来源的日志整合在一起,让你一次性看个清楚,不用来回切换。

这就好比把散落的珍珠串成了一条漂亮的项链,方便又好看。

使用专门的工具查看日志,虽然可能需要花点时间去熟悉怎么操作,但一旦掌握了,那可真是如虎添翼,能帮咱们更快更好地解决问题。

《查看日志的几种方法》方法一:在操作系统的日志查看器中查看朋友们,咱电脑系统里其实自带了日志查看器,用它来看日志挺方便的。

就拿 Windows 系统来说吧,在“控制面板”里找到“管理工具”,然后就能看到“事件查看器”。

打开它,你会发现各种分类的日志,像系统日志、应用程序日志等等。

这里面的日志信息都整理得挺清楚的,每一条都告诉你是什么时候发生的,严重程度咋样。

abap debug的五种方式

abap debug的五种方式

abap debug的五种方式
ABAP Debug是一种用于调试SAP ABAP程序的工具。

下面是ABAP Debug 的五种方式:
1. Classic Debugger:Classic Debugger是ABAP Debug的最基本版本,它允许用户在程序中设置断点、单步执行代码、查看和修改变量值以及跟踪函数调用。

用户可以通过菜单选项或快捷键直接进入Classic Debugger。

2. New Debugger:New Debugger是ABAP Debug的新版本,它比Classic Debugger更加灵活和易于使用。

New Debugger可以在不改变程序代码的情况下动态修改变量值,还可以在运行时插入代码。

此外,New Debugger还提供了更多的调试选项和功能。

3. Debugging Workbench:Debugging Workbench是一个集成了Classic Debugger和New Debugger的调试工具。

它提供了更多的调试选项和功能,如调试程序的不同层次、跟踪执行路线、检查用户权限等。

4. ABAP Trace:ABAP Trace是一种跟踪ABAP程序执行过程的工具,它可以帮助用户识别程序中的性能瓶颈和错误。

用户可以通过设置不同的跟踪选项,对程序进行跟踪并生成详细的日志信息。

5. SQL Trace:SQL Trace是一种跟踪SAP系统中数据库操作的工具,它可以帮助用户优化SQL查询语句和提高系统性能。

用户可以通过设置不同的跟踪选项,对SQL查询进行跟踪并生成详细的日志信息。

ABAP端调PO接口步骤

ABAP端调PO接口步骤

ABAP端调PO接口步骤ABAP是SAP系统中一种高级的编程语言,可用于开发和定制SAP应用程序。

在ABAP端调用PO接口的步骤如下:1.确定接口的目标和需求:在开始开发之前,需要明确你要调用的PO(采购订单)接口的目标和要求。

例如,你可能需要根据特定的条件过滤订单,获取特定的订单详细信息,或者更新订单状态等。

2.确定可用的接口和方法:根据你的需求,查找并确定可用的PO接口和方法。

SAP系统提供了各种各样的接口和方法,可以根据不同的需求调用。

可以通过SAP帮助文档、开发文档、论坛等途径找到相应的接口和方法。

3.创建ABAP程序:在ABAP开发工具中创建一个新的ABAP程序。

这个程序将用于调用PO接口和方法。

确保你有足够的权限和访问权限来执行这个任务。

4.定义输入和输出参数:根据接口和方法的要求,定义输入和输出参数。

输入参数包括订单号、日期范围、供应商等信息,用于指定你要获取的订单。

输出参数包括订单详细信息,如订单号、日期、供应商、物料等。

确保参数的数据类型和长度与接口定义一致。

5.调用接口:在ABAP程序中使用调用语句调用PO接口和方法。

根据接口的要求,传递输入参数并接收返回的输出参数。

确保在调用接口之前进行输入参数的合法性检查,并处理返回的错误或异常信息。

6. 处理返回结果:根据接口返回的输出参数,处理返回结果。

根据你的需求,你可能需要对返回的订单详细信息进行进一步的处理,如保存到数据库、打印到屏幕、导出到Excel等。

7.错误处理:在调用PO接口时,可能会发生错误或异常情况。

确保你的ABAP程序可以处理并恰当地报告这些错误或异常。

根据接口的错误代码和错误消息,编写适当的错误处理逻辑。

8.调试和测试:在完成ABAP程序的编写后,通过调试和测试来验证你的代码的正确性和可靠性。

使用ABAP调试器来跟踪代码的执行和变量的值,并进行单元测试和集成测试来确保程序的功能和性能。

9.优化和改进:根据测试结果,对代码进行优化和改进。

记录ABAP开发的日常——查看对象长文本的方法

记录ABAP开发的日常——查看对象长文本的方法

记录ABAP开发的日常——查看对象长文本的方法1.使用SE38事务码在SAP系统中,可以通过SE38事务码来查看程序的长文本。

首先,打开SE38事务码,在名称字段输入要查看长文本的对象名称,然后点击"展开"按钮。

在弹出的窗口中,选择"Other Long Texts"选项。

这将打开一个新的窗口,显示对象的长文本。

2.使用SE80事务码另一种查看对象长文本的方法是使用SE80事务码。

打开SE80事务码后,选择要查看长文本的对象类型,比如程序、功能、报表等。

然后,在对象列表中选择要查看长文本的对象,右键点击并选择"Properties"选项。

在弹出的窗口中,选择"Documentation"选项卡。

这将显示对象的长文本。

3.使用SE84事务码4.使用SE24事务码5.使用SE11事务码使用SE11事务码可以查看数据库表的长文本。

在SE11事务码中,输入要查看的表名,然后点击"文本"按钮。

这将打开一个新的窗口,显示表的长文本。

6.在SAPGUI中查看另一种查看对象长文本的方法是使用SAP GUI界面。

在SAP GUI中,选择"System"菜单,然后选择"Services"选项,再选择"Long Text Object"。

在弹出的窗口中,选择要查看长文本的对象类型和对象名称,然后点击"Display"按钮。

这将打开一个新的窗口,显示对象的长文本。

abap 查看方法

abap 查看方法

ABAP 查看方法1. 概述ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言,用于开发和定制企业资源计划(ERP)软件。

在ABAP中,方法是一种用于封装和组织代码的重要概念。

本文将介绍如何在ABAP中查看方法。

2. 方法的定义和作用在ABAP中,方法是一段可重复使用的代码块,用于执行特定的功能。

方法可以包含输入参数、输出参数和局部变量,并且可以被其他程序或方法调用。

通过将代码封装在方法中,可以提高代码的可读性、可维护性和重用性。

3. 查看方法的步骤为了查看一个方法,我们需要按照以下步骤进行操作:步骤1:进入ABAP编辑器首先,在SAP系统中打开事务码SE38,并输入需要查看的程序名称或T-code。

步骤2:选择程序在ABAP编辑器中,选择要查看方法所属的程序。

如果你知道程序名称,可以直接输入并点击“显示”。

步骤3:选择类在程序中找到包含所需方法的类。

类是面向对象编程(OOP)中最基本的概念之一,在ABAP中也起着重要作用。

点击类名以进入该类。

步骤4:查看方法列表在类中,可以找到一个包含所有方法的列表。

这个列表将显示每个方法的名称、输入参数、输出参数和可见性等信息。

可以使用滚动条浏览整个列表,并找到所需的方法。

步骤5:选择方法在方法列表中,选择要查看的方法。

点击方法名以进入该方法。

步骤6:查看代码在进入方法后,可以看到该方法的代码实现。

可以阅读和理解代码,了解该方法的功能和逻辑。

4. 查看特定类型的方法有时候,我们可能只对某种特定类型的方法感兴趣,比如公共方法或私有方法。

在ABAP中,可以根据可见性来过滤并查看特定类型的方法。

查看公共方法如果想要查看一个类中的所有公共(public)方法,可以按照以下步骤进行操作:1.在类中选择“Public Section”。

2.在“Public Section”下方会显示所有公共方法的列表。

abap sql查询获得转换后的值使用例程

abap sql查询获得转换后的值使用例程

标题:深度解析ABAP SQL查询获得转换后的值使用例程在ABAP编程中,SQL查询是一种非常常见的操作,它可以帮助我们从数据库中检索数据并进行处理。

而在这个过程中,经常会涉及到获得转换后的值使用例程,这是一个非常重要的主题。

在本文中,我们将从简到繁地探讨ABAP中SQL查询获得转换后的值使用例程,帮助您更好地理解和运用这一技术。

一、初识ABAP SQL查询和转换后的值使用例程在开始深入研究之前,我们先来简单了解一下ABAP中的SQL查询和转换后的值使用例程是什么。

在ABAP编程中,SQL查询是用来从数据库中检索数据的一种语言,它可以帮助我们实现数据的增删改查操作。

而转换后的值使用例程则是在SQL查询中对检索到的数据进行处理和转换的过程,可以理解为是对数据进行加工的一个环节。

二、深入探讨ABAP中的SQL查询在ABAP中,我们可以使用OpenSQL语句来进行数据库操作,其中包括了对数据库进行查询的功能。

在进行SQL查询的过程中,我们需要注意一些语法和规则,比如字段名的写法、条件表达式的使用等等。

我们还需要注意SQL注入的问题,确保我们的查询是安全可靠的。

三、详解转换后的值使用例程当我们获得了查询到的数据后,有时候我们需要对这些数据进行进一步的处理和转换。

这时候转换后的值使用例程就发挥了作用,它可以帮助我们实现对数据的加工、转换、计算等功能。

在实际应用中,我们可以使用ABAP语言来编写这些例程,以实现我们的需求。

四、实例分析:使用ABAP SQL查询获得转换后的值使用例程为了更好地理解ABAP中SQL查询获得转换后的值使用例程,在这里我们来举一个具体的实例进行分析。

假设我们需要从数据库中查询员工的工资信息,并进行加薪操作,那么我们就可以使用SQL查询来检索员工的工资数据,并通过转换后的值使用例程来实现加薪的逻辑。

五、个人观点和总结作为一名经验丰富的ABAP写手,我深知ABAP中SQL查询获得转换后的值使用例程的重要性。

调用外部接口时记录日志的方法-概述说明以及解释

调用外部接口时记录日志的方法-概述说明以及解释

调用外部接口时记录日志的方法-概述说明以及解释1.引言1.1 概述概述部分的内容可以写作以下内容:引言部分将介绍本篇文章的主要内容和目的,即探讨调用外部接口时记录日志的方法。

在现代软件开发中,我们经常需要和外部服务或接口进行交互,这些外部接口可能是第三方的API,也可能是内部的微服务。

为了追踪调用过程中的错误和异常情况,记录日志是一种常见的技术手段。

本文将从调用外部接口的重要性和记录日志的作用两个方面来详细探讨。

在软件开发中,调用外部接口是非常常见的场景。

我们可能需要与第三方的服务进行数据交换、调用其提供的功能接口或者获取某些数据。

而这些外部接口的可靠性往往是我们无法控制的,可能会出现各种异常情况,如网络中断、超时、服务不可用等。

因此,我们需要一种方法来记录每次调用的详细信息,以便在出现问题时能够快速定位和解决。

而记录日志的作用也不仅仅是为了追踪错误和异常情况。

日志还可以为我们提供关键的性能指标和可用性度量,帮助我们了解接口的响应时间、吞吐量和错误率等重要信息。

通过分析这些日志,我们可以及时发现潜在的性能问题和瓶颈,并采取相应的优化措施。

同时,日志还可以作为调试的有力工具,帮助我们在调用外部接口时进行问题定位和调试。

因此,本文将从调用外部接口的重要性和记录日志的作用两个方面入手,介绍一些常用的记录日志的方法和技巧。

我们将讨论如何选择合适的日志级别和格式,如何记录请求和响应的详细信息,以及如何处理和分析日志数据。

希望通过本文的阐述,读者能够对调用外部接口时记录日志的方法有更深入的了解,并能够在实际项目中应用和实践。

1.2 文章结构文章结构是指文章的整体布局和组织方式。

一个良好的文章结构能够使读者更好地理解和消化文章内容,同时也能使作者更清晰地表达自己的观点和思路。

文章结构通常包括引言、正文和结论三个部分。

引言部分用于引出文章的主题和目的,正文部分是文章的核心内容,用于详细阐述和分析论题,结论部分则对文章进行总结,提出建议和展望。

sap标准日志编程文档(slg0 SLG1)

sap标准日志编程文档(slg0 SLG1)
相关FM:BAL_DB_SEARCH、BAL_DB_LOAD、BAL_DSP_LOG_DISPLAY。
Vi删除日志
删除日志有删除数据库中的日志FM:BAL_DB_DELETE
示例
注:
日志的添加有多种形式:
1)将标准的Message记日志。
2)将Text记日志。
3)日志需要附加更多信息,如FIOA交易,需要在记录日志的同时附加合同号的信息,以确定哪些合同处理成功,哪些合同处理失败、失败的原因是什么。
iv.保存日志
这里的保存日志指的是将日志保存到数据库中。在程序结束后,没有保存的日志数据将被丢失。
FM:BAL_DB_SAVE。要查看是否已保存至数据库事务代码:SLG1
v.查找、读取、显示日志
对于新建的日志,可以直接用FM:BAL_DSP_LOG_DISPLAY进行显示。
对于以前保存的日志,显示前还需进行查找、加载等操作。
查找日志
运行后日志保存保至数据库中,可根据事务码:G进入界面。
输入日志存放的OBJECT与SUBOBJECT。
F8执行:
也可通过DEMO2程序查找日志:运行程序:
删除日志
删除日志可通过事务码SLG2:
也可通过程序DEMO3删除日志。
为日志附加文档
运行DEMO4如图:
点击明细:
程序代码:
文档名为ZLM_DOCUMENT_LOG,通过事务SE61来进行创建和维护。
输入SE61:
单击显示:如图
在程序中创建文档:
运行程序:
在创建日志和添加完内容后,日志的数据存在于内存中,此时需要显示日志只需调用FM:BAL_DSP_LOG_DISPLAY。
日后查看日志,需要先查找、读取。查找(FM:BAL_DB_SEARCH)需要指定日志创建时分配的标志,再根据查找结果加载日志内容,然后显示。

ABAP接口日志查询程序

ABAP接口日志查询程序

*&---------------------------------------------------------------------**& Report ZMME_LOG*&*&---------------------------------------------------------------------**&*&说明:配置表ZTMM_LOG_CONF中的主键字段名和消息字段名以“,”隔开*&---------------------------------------------------------------------*REPORT zmme_log.TABLES: syst,zsmm_log.*&---------------------------------------------------------------------** TYPES*&---------------------------------------------------------------------*TYPE-POOLS: slis."ALVTYPE-POOLS: icon."图标TYPE-POOLS: bkkdc."域文本TYPE-POOLS: abap.TYPES BEGIN OF ty_itab.TYPES status(4) TYPE c. "状态(红绿灯)INCLUDE TYPE zsmm_log.TYPES: stext TYPE functext.TYPES END OF ty_itab.TYPES: BEGIN OF ty_fname,value TYPE fdname,END OF ty_fname.TYPES: BEGIN OF ty_fvalue,value TYPE char20,END OF ty_fvalue.*&---------------------------------------------------------------------** CONSTANTS*&---------------------------------------------------------------------**&---------------------------------------------------------------------** GLOBAL DATA*&---------------------------------------------------------------------*DATA: gv_repid TYPE sy-repid.*&---------------------------------------------------------------------** GLOBAL INTERNAL TABLES*&---------------------------------------------------------------------*DATA: gwa_log_conf TYPE ztmm_log_conf,gt_log_conf TYPE TABLE OF ztmm_log_conf.DATA: gt_itab TYPE TABLE OF ty_itab,gwa_itab TYPE ty_itab."ALV相关变量DATA: gt_fieldcat TYPE lvc_t_fcat,gwa_layout TYPE lvc_s_layo,gt_event_exit TYPE slis_t_event_exit.DATA: gt_component_tab TYPE abap_component_tab,gs_component_desc TYPE LINE OF abap_component_tab,gr_struc_type TYPE REF TO cl_abap_structdescr,gr_tab_type TYPE REF TO cl_abap_tabledescr,gr_struc TYPE REF TO data,gr_tab TYPE REF TO data,ld_comp(40) TYPE c.FIELD-SYMBOLS: <gs_selection> TYPE any,<gt_selection> TYPE table.*&---------------------------------------------------------------------** GLOBAL RANGES*&---------------------------------------------------------------------**&---------------------------------------------------------------------** SELECTION-SCREEN*&---------------------------------------------------------------------*SELECT-OPTIONS: s_zfname FOR zsmm_log-zfname MATCHCODE OBJECT zmm_sh_ interface,"接口名称s_datum FOR syst-datum, "日期s_uzeit FOR syst-uzeit, "时间s_zitype FOR zsmm_log-zitype, "接口类型s_rtype FOR zsmm_log-rtype. "状态**&---------------------------------------------------------------------*** GLOBAL MACROS**&---------------------------------------------------------------------****&---------------------------------------------------------------------*** EVENTS BEFORE MAIN PROGRAM**&---------------------------------------------------------------------**INITIALIZATION.* PERFORM frm_initprogm. "程序初始化***AT SELECTION-SCREEN OUTPUT.***AT SELECTION-SCREEN ON VALUE-REQUEST FOR.***AT SELECTION-SCREEN.***TOP-OF-PAGE.**&---------------------------------------------------------------------*** MAIN PROGRAM**----------------------------------------------------------------------*START-OF-SELECTION.* INITIALIZE DATAPERFORM frm_initialize_data.** PROCESS INPUT DATA (FOR INBOUND INTERFACES)* PERFORM FRM_PROCESS_INPUT_DATA.** SELECT DATA FROM DATABASEPERFORM frm_select_data.** PROCESS SELECTED DATA* PERFORM FRM_PROCESS_DATA.*END-OF-SELECTION.** COMBINE RESULTS FROM THE PROCESSING (MAY NOT BE NECESSARY)* PERFORM FRM_COMBINE_DATA.* OUTPUT RESULT TO FILE OR SPOOL/SCREENPERFORM frm_output_data.*&---------------------------------------------------------------------**& FORM FRM_INITIALIZE_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_initialize_data .SELECT * FROM ztmm_log_confINTO CORRESPONDING FIELDS OF TABLE gt_log_confWHERE zfname IN s_zfname"接口名称AND zitype IN s_zitype."接口类型ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_SELECT_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_select_data .DATA: lv_tabname TYPE objectname.DATA: lv_str_where TYPE string.DATA: lwa_fname TYPE ty_fname.DATA: lt_kname TYPE TABLE OF ty_fname."主键字段DATA: lt_mname TYPE TABLE OF ty_fname."消息字段FIELD-SYMBOLS: <lfs_value> TYPE any.DATA: lv_value TYPE string.DATA: lv_lenth TYPE i.DATA: lv_stext TYPE functext.LOOP AT gt_log_conf INTO gwa_log_conf."接口描述CLEAR: lv_stext.SELECT SINGLE stext INTO lv_stextFROM tftitWHERE funcname = gwa_log_conf-zfname."查询条件:传输日期IF gwa_log_conf-zdname IS NOT INITIAL.CONCATENATE gwa_log_conf-zdname ' IN S_DATUM' INTO lv_str_where RESPECTING BLANKS.ENDIF."查询条件:传输时间IF lv_str_where IS INITIAL.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE gwa_log_conf-ztname ' IN S_UZEIT' INTO lv_str_whe re RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-ztname ' IN S_U ZEIT'INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF."查询条件:传输状态IF lv_str_where IS INITIAL.IF gwa_log_conf-zsname IS NOT INITIAL.CONCATENATE gwa_log_conf-zsname ' IN S_RTYPE' INTO lv_str_whe re RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-zsname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-zsname ' IN S_R TYPE'INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF."动态获取日志信息lv_tabname = gwa_log_conf-ztable.PERFORM create_dynamic_tablesUSINGlv_tabname'DOCS'.IF <gt_selection> IS ASSIGNED.SELECT * FROM (lv_tabname)INTO CORRESPONDING FIELDS OF TABLE <gt_selection>WHERE (lv_str_where).IF sy-subrc = 0 AND <gs_selection> IS ASSIGNED.SPLIT gwa_log_conf-zkey AT ',' INTO TABLE lt_kname.SPLIT gwa_log_conf-zmname AT ',' INTO TABLE lt_mname.LOOP AT <gt_selection> INTO <gs_selection>."功能模块的名称gwa_itab-zfname = gwa_log_conf-zfname."功能模块的描述gwa_itab-stext = lv_stext."传输日期ASSIGN COMPONENT gwa_log_conf-zdname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-sydat = <lfs_value>.ENDIF."传输日期ASSIGN COMPONENT gwa_log_conf-ztname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-sytim = <lfs_value>.ENDIF."接口类型gwa_itab-zitype = gwa_log_conf-zitype."主键值CLEAR: lwa_fname.LOOP AT lt_kname INTO lwa_fname.ASSIGN COMPONENT lwa_fname-value OF STRUCTURE <gs_selecti on> TO <lfs_value>.* IF sy-subrc = 0 AND <lfs_value> IS NOT INITIAL.IF <lfs_value> IS ASSIGNED.lv_value = <lfs_value>.ELSE.lv_value = ''.ENDIF.CONDENSE lv_value NO-GAPS.IF gwa_itab-zkvalue IS INITIAL.CONCATENATE lv_value ',' INTO gwa_itab-zkvalue.ELSE.CONCATENATE gwa_itab-zkvalue lv_value ',' INTO gwa_itab -zkvalue.ENDIF.* ENDIF.AT LAST.* IF gwa_itab-zkvalue IS NOT INITIAL."去除最后一位的逗号CONDENSE gwa_itab-zkvalue NO-GAPS.lv_lenth = strlen( gwa_itab-zkvalue ).lv_lenth = lv_lenth - 1.IF lv_lenth > 0.gwa_itab-zkvalue = gwa_itab-zkvalue+0(lv_lenth).ENDIF.* ENDIF.ENDAT.CLEAR: lwa_fname.ENDLOOP."传输状态ASSIGN COMPONENT gwa_log_conf-zsname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-rtype = <lfs_value>.IF gwa_itab-rtype = 'E'.gwa_itab-status = '@5C@'.ELSE.gwa_itab-status = '@5B@'.ENDIF.ENDIF."消息CLEAR: lwa_fname.LOOP AT lt_mname INTO lwa_fname.ASSIGN COMPONENT lwa_fname-value OF STRUCTURE <gs_selecti on> TO <lfs_value>.IF sy-subrc = 0 AND <lfs_value> IS NOT INITIAL.lv_value = <lfs_value>.CONDENSE lv_value NO-GAPS.IF gwa_itab-rtmsg IS INITIAL.CONCATENATE lv_value ',' INTO gwa_itab-rtmsg.ELSE.CONCATENATE gwa_itab-rtmsg lv_value ',' INTO gwa_itab -rtmsg.ENDIF.ENDIF.AT LAST.IF gwa_itab-rtmsg IS NOT INITIAL."去除最后一位的逗号CONDENSE gwa_itab-rtmsg NO-GAPS.lv_lenth = strlen( gwa_itab-rtmsg ).lv_lenth = lv_lenth - 1.gwa_itab-rtmsg = gwa_itab-rtmsg+0(lv_lenth).ENDIF.ENDAT.CLEAR: lwa_fname.ENDLOOP.APPEND gwa_itab TO gt_itab.CLEAR: gwa_itab.ENDLOOP.ENDIF.ENDIF.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form create_dynamic_tables*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_GS_DIMEN text* -->P_GS_NAME text*----------------------------------------------------------------------*FORM create_dynamic_tables USING id_dimen TYPE objectnameid_name TYPE objectname.CLEAR gs_component_desc.CLEAR gt_component_tab.gs_component_desc-name = id_name.IF id_dimen IS NOT INITIAL.gs_component_desc-type ?=cl_abap_structdescr=>describe_by_name( id_dimen ).gs_component_desc-as_include = 'X'.APPEND gs_component_desc TO gt_component_tab.ENDIF.* LOOP AT gt_dimen INTO gs_dimen.* IF gs_dimen IS NOT INITIAL.* IF id_name = 'BUCHUNG' AND gs_dimen = 'GSBER'.* CONTINUE.* ENDIF.* ASSIGN gs_dimen TO <field>.* CLEAR gs_component_desc.* gs_component_desc-name = <field>.* CONCATENATE 'glu1-' <field> INTO ld_comp.**check existance before creating field JET* gs_component_desc-type ?= cl_abap_elemdescr=>describe_by_name( * ld_comp ).* APPEND gs_component_desc TO gt_component_tab.* ENDIF.** ENDLOOP.* get fields selected by customer -* ensure they are not duplicates! JT* do not allow balancing fields, if left variant selected and splitte r*active JT* LOOP AT gt_fagl_fc INTO gs_fagl_fc.* IF gs_fagl_fc-field IS NOT INITIAL.* ASSIGN gs_fagl_fc-field TO <field>.* CLEAR gs_component_desc.* gs_component_desc-name = <field>.* CONCATENATE 'glu1-' <field> INTO ld_comp.**check existance before creating field JET** gs_component_desc-type ?= cl_abap_elemdescr=>describe_by_name( * ld_comp ).* APPEND gs_component_desc TO gt_component_tab.* ENDIF.* ENDLOOP.gr_struc_type = cl_abap_structdescr=>create( gt_component_tab ).gr_tab_type = cl_abap_tabledescr=>create( gr_struc_type ).CREATE DATA: gr_struc TYPE HANDLE gr_struc_type,gr_tab TYPE HANDLE gr_tab_type.ASSIGN: gr_struc->* TO <gs_selection>,gr_tab->* TO <gt_selection>. " to replace the extractENDFORM. " create_dynamic_tables*&---------------------------------------------------------------------**& FORM FRM_OUTPUT_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_output_data .PERFORM frm_layout_build.PERFORM frm_fieldcat_init.PERFORM frm_display_alv.ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_LAYOUT_BUILD*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_layout_build .gwa_layout-cwidth_opt = 'X'."优化列宽选项是否设置gwa_layout-zebra = 'X'."斑马线ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_FIELDCAT_INIT*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_fieldcat_init .DATA: lwa_fieldcat TYPE lvc_s_fcat.DEFINE d_get_field.CLEAR LWA_FIELDCAT.LWA_FIELDCAT-FIELDNAME = &1.LWA_FIELDCAT-SCRTEXT_L = &2.lwa_fieldcat-REF_table = &3.lwa_fieldcat-REF_FIELD = &4.IF &1 = 'BOX'.LWA_FIELDCAT-EDIT = 'X'.LWA_FIELDCAT-CHECKBOX = 'X'.ENDIF.APPEND LWA_FIELDCAT TO GT_FIELDCAT.END-OF-DEFINITION.REFRESH gt_fieldcat.d_get_field 'STATUS' '传输状态' '' ''.d_get_field 'ZFNAME' '函数模块' 'ZTMM_LOG_CONF' 'ZFNAME'.d_get_field 'STEXT' '接口描述' '' ''.d_get_field 'SYDAT' '传输日期' 'ZSMM_LOG' 'SYDAT'.d_get_field 'SYTIM' '传输时间' 'ZSMM_LOG' 'SYTIM'.d_get_field 'ZITYPE' '接口类型' 'ZTMM_LOG_CONF' 'ZITYPE'.d_get_field 'ZKVALUE' '主键值' '' ''.d_get_field 'RTYPE' '传输状态' 'ZSMM_LOG' 'RTYPE'.d_get_field 'RTMSG' '消息' '' ''.ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_DISPLAY_ALV*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_display_alv .DATA: lwa_event_exit TYPE slis_event_exit.gv_repid = sy-repid.CLEAR: gt_event_exit[].lwa_event_exit-ucomm = '&ALL'.lwa_event_exit-after = 'X'.APPEND lwa_event_exit TO gt_event_exit.lwa_event_exit-ucomm = '&SAL'.lwa_event_exit-after = 'X'.APPEND lwa_event_exit TO gt_event_exit.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = gv_repid* i_callback_pf_status_set = 'FRM_USER_STATUS'i_callback_user_command = 'FRM_USER_COMMAND'is_layout_lvc = gwa_layoutit_fieldcat_lvc = gt_fieldcatit_event_exit = gt_event_exitTABLESt_outtab = gt_itabEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.* IMPLEMENT SUITABLE ERROR HANDLING HEREENDIF.ENDFORM.**&---------------------------------------------------------------------***& FORM FRM_USER_STATUS**&---------------------------------------------------------------------**FORM frm_user_status USING extab TYPE slis_t_extab.*ENDFORM. "FRM_USER_STATUS*&---------------------------------------------------------------------**& FORM FRM_USER_COMMAND*&---------------------------------------------------------------------*FORM frm_user_command USING ok_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.DATA: lf_check TYPE c.DATA: lwa_grid TYPE REF TO cl_gui_alv_grid.DATA: lwa_stable TYPE lvc_s_stbl.DATA: lwa_layo TYPE lvc_s_layo.CLEAR:lf_check.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lwa_grid.CALL METHOD lwa_grid->check_changed_data."获取ALV当前输出格式CALL METHOD lwa_grid->get_frontend_layoutIMPORTINGes_layout = lwa_layo.CASE ok_ucomm.WHEN '&IC1'."双击"显示日志详细信息PERFORM frm_get_detail USING rs_selfield.WHEN OTHERS.ENDCASE.lwa_layo-cwidth_opt = 'X'."优化列宽选项是否设置CALL METHOD lwa_grid->set_frontend_layoutEXPORTINGis_layout = lwa_layo.rs_selfield-refresh = 'X'.rs_selfield-col_stable = 'X'.rs_selfield-row_stable = 'X'.ENDFORM. "FRM_USER_COMMAND*&---------------------------------------------------------------------**& Form FRM_GET_DETAIL*&---------------------------------------------------------------------** 显示日志详细信息*----------------------------------------------------------------------** -->p_selfield text*----------------------------------------------------------------------*FORM frm_get_detail USING p_selfield TYPE slis_selfield.DATA: lv_tabname TYPE objectname.DATA: lv_str_where TYPE string."主键字段DATA: lwa_kname TYPE ty_fname,lt_kname TYPE TABLE OF ty_fname."主键字段值DATA: lwa_kvalue TYPE ty_fvalue,lt_kvalue TYPE TABLE OF ty_fvalue.READ TABLE gt_itab INTO gwa_itab INDEX p_selfield-tabindex.READ TABLE gt_log_conf INTO gwa_log_conf WITH KEY zfname = gwa_itab -zfname."查询条件:传输日期IF gwa_log_conf-zdname IS NOT INITIAL.CONCATENATE gwa_log_conf-zdname ' EQ ''' gwa_itab-sydat '''' INT O lv_str_where RESPECTING BLANKS.ENDIF."查询条件:传输时间IF lv_str_where IS INITIAL.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE gwa_log_conf-ztname ' EQ ''' gwa_itab-sytim '''' IN TO lv_str_where RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-ztname ' EQ ''' g wa_itab-sytim ''''INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF.SPLIT gwa_log_conf-zkey AT ',' INTO TABLE lt_kname.SPLIT gwa_itab-zkvalue AT ',' INTO TABLE lt_kvalue.LOOP AT lt_kname INTO lwa_kname.READ TABLE lt_kvalue INTO lwa_kvalue INDEX sy-tabix.IF lv_str_where IS INITIAL.CONCATENATE lwa_kname-value ' EQ ''' lwa_kvalue-value '''' INTO lv_str_where RESPECTING BLANKS.ELSE.CONCATENATE lv_str_where ' AND ' lwa_kname-value ' EQ ''' lwa_k value-value ''''INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDLOOP."动态获取日志信息CLEAR: lv_tabname.lv_tabname = gwa_log_conf-ztable.PERFORM create_dynamic_tablesUSINGlv_tabname'DOCS'.IF <gt_selection> IS ASSIGNED.SELECT * FROM (lv_tabname)INTO CORRESPONDING FIELDS OF TABLE <gt_selection>WHERE (lv_str_where).IF sy-subrc = 0 AND <gs_selection> IS ASSIGNED.CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'EXPORTINGi_title = '详细信息'* I_SELECTION = 'X'* I_ALLOW_NO_SELECTION =i_zebra = 'X'i_screen_start_column = 10i_screen_start_line = 10i_screen_end_column = 180i_screen_end_line = 20* I_CHECKBOX_FIELDNAME =* I_LINEMARK_FIELDNAME =* I_SCROLL_TO_SEL_LINE = 'X'i_tabname = '<GT_SELECTION>'i_structure_name = lv_tabname* IT_FIELDCAT =* IT_EXCLUDING =* I_CALLBACK_PROGRAM =* I_CALLBACK_USER_COMMAND =* IS_PRIVATE =* IMPORTING* ES_SELFIELD =* E_EXIT =TABLESt_outtab = <gt_selection> * EXCEPTIONS* PROGRAM_ERROR = 1* OTHERS = 2.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.ENDIF.ENDIF.ENDFORM.相关表结构:。

ABAPSAP接口通用日志存储,以及查看

ABAPSAP接口通用日志存储,以及查看

ABAPSAP接⼝通⽤⽇志存储,以及查看 在外部调⽤接⼝时,通常会需要保存外部的调⽤记录,期间会⽤到表,这⾥将传⼊的表转换成json格式(也可以转换成XML),并存⼊通⽤⽇志表中。

1.SE11,新建通⽤的LOG表,表结构参考下图:2.在接⼝中,如果需要保存记录,则调⽤下⾯代码。

DATA: json_ser TYPE REF TO cl_trex_json_serializer,json_des TYPE REF TO cl_trex_json_deserializer.DATA: jsonstr TYPE string.CREATE OBJECT json_serEXPORTINGdata = it_plm007[].CALL METHOD json_ser->serialize.CALL METHOD json_ser->get_dataRECEIVINGrval = jsonstr.ls_zrfc_logs-funcname = 'Z_RFC_PLM_007'.ls_zrfc_logs-zsystem = p_system.ls_zrfc_logs-uname = p_uname.ls_zrfc_logs-zname1 = p_name1.ls_zrfc_logs-erdat = sy-datum.ls_zrfc_logs-uzeit = sy-uzeit.* ls_zrfc_logs-ep_type = ep_type.* ls_zrfc_logs-ep_message = ep_message.ls_zrfc_logs-jsonstr1 = jsonstr.MODIFY zrfc_logs FROM ls_zrfc_logs.IF sy-subrc EQ0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.View Code3.写个查看⽇志的报表效果如下图所⽰附上代码:主程序:*&---------------------------------------------------------------------**& Report ZIT0010*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zit0010.INCLUDE zit0010_head.INCLUDE zit0010_screen.INCLUDE zit0010_form.START-OF-SELECTION.PERFORM frm_get_data. "动态创建内表 <dyn_table>,并⽣成lt_alv_cat PERFORM frm_get_data2.END-OF-SELECTION.PERFORM f_display_data.View Code包含⽂件ZIT0010_HEAD*&---------------------------------------------------------------------**& 包含 ZIT0010_HEAD*&---------------------------------------------------------------------*TABLES:tftit.DATA: d_ref TYPE REF TO data,d_ref2 TYPE REF TO data,lt_alv_cat TYPE TABLE OF lvc_s_fcat,ls_alv_cat LIKE LINE OF lt_alv_cat.DATA: lt_table LIKE TABLE OF dntab.DATA: ls_table TYPE dntab.DATA: dyn_table TYPE REF TO data.DATA: dyn_wa TYPE REF TO data.FIELD-SYMBOLS :<dyn_table> TYPE table,<dyn_wa> TYPE any,<dyn_field> TYPE any,<fs_str> TYPE any.DATA: dyn_table2 TYPE REF TO data.DATA: dyn_wa2 TYPE REF TO data.FIELD-SYMBOLS :<dyn_table2> TYPE table,<dyn_wa2> TYPE any,<dyn_field2> TYPE any,<fs_str2> TYPE any.DATA: go_excel TYPE ole2_object,go_workbook TYPE ole2_object,go_sheet TYPE ole2_object.DATA: gs_layout TYPE lvc_s_layo,gt_fieldcat TYPE lvc_t_fcat.TYPES: BEGIN OF sy_output,funcname TYPE zrfc_logs-funcname,zsystem TYPE zrfc_logs-zsystem,uname TYPE zrfc_logs-uname,zname1 TYPE zrfc_logs-zname1,erdat TYPE zrfc_logs-erdat,uzeit TYPE zrfc_logs-uzeit,posnr TYPE zrfc_logs-posnr,p_str1 TYPE zrfc_logs-p_str1,p_str2 TYPE zrfc_logs-p_str2,p_str3 TYPE zrfc_logs-p_str3,p_str4 TYPE zrfc_logs-p_str4,p_str5 TYPE zrfc_logs-p_str5,ep_type TYPE zrfc_logs-ep_type,ep_message TYPE zrfc_logs-ep_message,jsonstr1 TYPE zrfc_logs-jsonstr1,jsonstr2 TYPE zrfc_logs-jsonstr2,jsonstr3 TYPE zrfc_logs-jsonstr3,jsonstr4 TYPE zrfc_logs-jsonstr4,jsonstr5 TYPE zrfc_logs-jsonstr5,structure TYPE fupararef-structure.TYPES: zcolor(4),message TYPE char200, "cellcolor TYPE lvc_t_scol,slbox,END OF sy_output.DATA: gt_output TYPE TABLE OF sy_output,gs_output TYPE sy_output.DATA: gt_fupararef LIKE TABLE OF fupararef,gs_fupararef LIKE fupararef.DATA: gt_events TYPE slis_t_event,gs_events LIKE LINE OF gt_events.DATA: g_grid TYPE REF TO cl_gui_alv_grid.DATA: gt_bad_cells TYPE lvc_t_modi.*data: gt_fieldcat type lvc_t_fcat.DATA: g_row_id TYPE lvc_s_roid-row_id.FIELD-SYMBOLS: <gs_outtab> TYPE any.CLASS lcl_event_receiver DEFINITION DEFERRED.DATA:go_grid TYPE REF TO cl_gui_alv_grid,go_event_receiver TYPE REF TO lcl_event_receiver.*----------------------------------------------------------------------** CLASS lcl_event_receiver DEFINITION*----------------------------------------------------------------------*CLASS lcl_event_receiver DEFINITION.PUBLIC SECTION.CLASS-METHODS:on_f4 FOR EVENT onf4 OF cl_gui_alv_gridIMPORTING sendere_fieldnamee_fieldvaluees_row_noer_event_dataet_bad_cellse_display,on_data_changed FOR EVENT data_changed OF cl_gui_alv_gridIMPORTING e_onf4e_onf4_beforee_onf4_afterer_data_changede_ucommsender.* PRIVATE SECTION.* TYPES: ddshretval_table TYPE TABLE OF ddshretval.* CLASS-METHODS: my_f4* IMPORTING sender TYPE REF TO cl_gui_alv_grid* et_bad_cells TYPE lvc_t_modi* es_row_no TYPE lvc_s_roid* er_event_data TYPE REF TO cl_alv_event_data* e_display TYPE c* e_fieldname TYPE lvc_fname* EXPORTING im_lt_f4 TYPE ddshretval_table.ENDCLASS. "lcl_event_receiver DEFINITION*----------------------------------------------------------------------** CLASS lcl_event_receiver IMPLEMENTATION*----------------------------------------------------------------------*CLASS lcl_event_receiver IMPLEMENTATION.METHOD on_f4.* FIELD-SYMBOLS:<fs_alv> TYPE gs_output.CASE e_fieldname.WHEN 'STRUCTURE'.READ TABLE gt_output ASSIGNING FIELD-SYMBOL(<fs_alv>) INDEX es_row_no-row_id.IF sy-subrc = 0.PERFORM frm_get_sturct_f4 USING <fs_alv>-funcname CHANGING <fs_alv>-structure.LOOP AT gt_output ASSIGNING FIELD-SYMBOL(<ls_output>) WHERE funcname EQ <fs_alv>-funcname. <ls_output>-structure = <fs_alv>-structure.ENDLOOP.ENDIF.* WHEN .WHEN OTHERS.ENDCASE.PERFORM f_refresh_alv.* CALL METHOD go_grid->refresh_table_display.* DATA: ls_f4 TYPE ddshretval,* lt_f4 TYPE TABLE OF ddshretval.* FIELD-SYMBOLS: <itab> TYPE lvc_t_modi.* DATA: ls_modi TYPE lvc_s_modi.* CALL METHOD my_f4* EXPORTING* sender = sender* es_row_no = es_row_no* er_event_data = er_event_data* et_bad_cells = et_bad_cells* e_display = e_display* e_fieldname = e_fieldname* IMPORTING* im_lt_f4 = lt_f4.* ASSIGN er_event_data->m_data->* TO <itab>.* read table lt_f4 into ls_f4 with key fieldname = 'STRUCTURE'.* if not ls_f4 is initial.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'STRUCTURE'.* ls_modi-value = ls_f4-fieldval.* append ls_modi to <itab>.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'VALUE'.* if ls_f4-fieldval < 'D'.* ls_modi-value = 100.* elseif ls_f4-fieldval < 'R'.* ls_modi-value = 1000.* else.* ls_modi-value = 10000.* endif.* append ls_modi to <itab>.* endif.* READ TABLE lt_f4 INTO ls_f4 WITH KEY fieldname = 'STRUCTURE'.* IF NOT ls_f4 IS INITIAL.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'STRUCTURE'.* ls_modi-value = ls_f4-fieldval.* APPEND ls_modi TO <itab>.* ENDIF.* er_event_data->m_event_handled = 'X'.ENDMETHOD.METHOD on_data_changed.ENDMETHOD. "on_data_changed* METHOD my_f4.* DATA: lw_tab LIKE LINE OF gt_output,* lt_fcat TYPE lvc_t_fcat,* ls_fieldcat TYPE lvc_s_fcat,* l_tabname TYPE dd03v-tabname,* l_fieldname TYPE dd03v-fieldname,* l_help_valu TYPE help_info-fldvalue,* lt_bad_cell TYPE lvc_t_modi,* lp_wa TYPE REF TO data.* FIELD-SYMBOLS: <l_field_value> TYPE any,* <ls_wa> TYPE any.* CALL METHOD sender->get_frontend_fieldcatalog* IMPORTING* et_fieldcatalog = lt_fcat.* READ TABLE gt_output INDEX es_row_no-row_id INTO lw_tab.* CREATE DATA lp_wa LIKE LINE OF gt_output.* ASSIGN lp_wa->* TO <ls_wa>.* <ls_wa> = lw_tab.* READ TABLE lt_fcat WITH KEY fieldname = e_fieldname INTO ls_fieldcat.* MOVE ls_fieldcat-ref_table TO l_tabname.* MOVE ls_fieldcat-fieldname TO l_fieldname.* ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE lw_tab TO <l_field_value>. * WRITE <l_field_value> TO l_help_valu.* PERFORM f4_set USING sender* lt_fcat* lt_bad_cell* es_row_no-row_id* <ls_wa>.* CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'* EXPORTING* tabname = l_tabname* fieldname = l_fieldname* display = e_display* value = l_help_valu* callback_program = 'STRUCTURE' "'ZTEST7'* callback_form = 'F4'* TABLES* return_tab = im_lt_f4* EXCEPTIONS* parameter_error = 1* no_values_found = 2* OTHERS = 3.* ENDMETHOD. "my_f4ENDCLASS. "lcl_event_receiver*FORM f4_set USING r_grid TYPE REF TO cl_gui_alv_grid* rt_fieldcat TYPE lvc_t_fcat* rt_bad_cells TYPE lvc_t_modi* r_row_id TYPE lvc_s_roid-row_id* rs_outtab.* g_grid = r_grid.* gt_fieldcat = rt_fieldcat.* gt_bad_cells = rt_bad_cells.* g_row_id = r_row_id.* ASSIGN rs_outtab TO <gs_outtab>.*ENDFORM. "f4_setView Code包含⽂件ZIT0010_SCREEN*&---------------------------------------------------------------------**& 包含 ZIT0010_SCREEN*&---------------------------------------------------------------------*SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: s_fname FOR tftit-funcname,s_uname FOR sy-uname,s_erdat FOR sy-datum.SELECTION-SCREEN: END OF BLOCK b01.View Code包含⽂件ZIT0010_FORM*&---------------------------------------------------------------------**& 包含 ZIT0010_FORM*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& Form FRM_GET_DATA*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_get_data .*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = 'ZRFC_LOGS'TABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录CLEAR lt_alv_cat.LOOP AT lt_table INTO ls_table.* IF LS_TABLE-FIELDNAME NE 'MANDT'.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = 'ZRFC_LOGS'.ls_alv_cat-ref_field = ls_table-fieldname.IF ls_table-fieldname EQ'MEINS'.ls_alv_cat-no_convext = 'X'.* CLEAR: ls_alv_cat-ref_field,ls_alv_cat-ref_table.ENDIF.ls_alv_cat-seltext = ls_table-fieldtext.ls_alv_cat-scrtext_l = ls_table-fieldtext.ls_alv_cat-scrtext_m = ls_table-fieldtext.ls_alv_cat-scrtext_s = ls_table-fieldtext.APPEND ls_alv_cat TO lt_alv_cat.* ENDIF.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号* ASSIGN d_ref->* TO <dyn_table>.***创建动态⼯作区结构* CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区* ASSIGN dyn_wa->* TO <dyn_wa>.* zcolorDELETE lt_alv_cat[] WHERE fieldname EQ'MANDT'.* ls_alv_cat-fieldname = 'ZCOLOR'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'ZCOLOR'.* ls_alv_cat-seltext = '更新结果'.* ls_alv_cat-scrtext_l = '更新结果'.* ls_alv_cat-scrtext_m = '更新结果'.* ls_alv_cat-scrtext_s = '更新结果'.* APPEND ls_alv_cat TO lt_alv_cat.* ls_alv_cat-fieldname = 'MESSAGE'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'MESSAGE'.* ls_alv_cat-seltext = '更新信息'.* ls_alv_cat-scrtext_l = '更新信息'.* ls_alv_cat-scrtext_m = '更新信息'.* ls_alv_cat-scrtext_s = '更新信息'.* APPEND ls_alv_cat TO lt_alv_cat.ls_alv_cat-fieldname = 'STRUCTURE'.* ls_alv_cat-ref_table = 'FUPARAREF'.* ls_alv_cat-ref_field = 'STRUCTURE'.ls_alv_cat-seltext = 'JSON转换结构'.ls_alv_cat-scrtext_l = 'JSON转换结构'.ls_alv_cat-scrtext_m = 'JSON转换结构'.ls_alv_cat-scrtext_s = 'JSON转换结构'.ls_alv_cat-edit = 'X'.ls_alv_cat-f4availabl = 'X'.APPEND ls_alv_cat TO lt_alv_cat.CLEAR: ls_alv_cat.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_GET_DATA2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_get_data2 .SELECT *INTO CORRESPONDING FIELDS OF TABLE @gt_outputFROM zrfc_logsWHERE funcname IN @s_fnameAND uname in @s_unameAND erdat IN @s_erdat.SELECT *INTO TABLE @gt_fupararefFROM fupararefWHERE funcname IN @s_fnameAND paramtype EQ'T'.LOOP AT gt_output INTO gs_output.READ TABLE gt_fupararef INTO gs_fupararef WITH KEY funcname = gs_output-funcname. IF sy-subrc EQ0.ENDIF.CLEAR: gs_output.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form F_DISPLAY_DATA*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM f_display_data .PERFORM f_set_layout.* PERFORM F_SET_FIELDCAT.PERFORM f_set_event.PERFORM f_alv_display TABLES gt_output.ENDFORM.FORM f_set_event.gs_events-name = 'CALLER_EXIT'.gs_events-form = 'CALLER_EXIT'.APPEND gs_events TO gt_events[].ENDFORM.FORM f_set_layout.CLEAR: gs_layout.gs_layout-box_fname = 'SLBOX'.gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.gs_layout-ctab_fname = 'CELLCOLOR'.ENDFORM.*FORM F_SET_FIELDCAT.* CLEAR: GT_FIELDCAT[].* DATA: LS_FIELDCAT TYPE LVC_S_FCAT.* DEFINE SET_FIELDCAT.* CLEAR: LS_FIELDCAT.* LS_FIELDCAT-FIELDNAME = &1.* LS_FIELDCAT-REF_FIELD = &2.* LS_FIELDCAT-REF_TABLE = &3.* LS_FIELDCAT-CONVEXIT = &4.* LS_FIELDCAT-DO_SUM = &5.* LS_FIELDCAT-SELTEXT = &6.* LS_FIELDCAT-SCRTEXT_L = &6.* LS_FIELDCAT-SCRTEXT_M = &6.* LS_FIELDCAT-SCRTEXT_S = &6.* LS_FIELDCAT-COLTEXT = &6.* APPEND LS_FIELDCAT TO GT_FIELDCAT.* END-OF-DEFINITION.**显⽰内容* SET_FIELDCAT 'RBUKRS' 'RBUKRS' 'ACDOCA' '' '' '公司代码'.* SET_FIELDCAT 'GJAHR' 'GJAHR' 'ACDOCA' '' '' '会计年度'.* SET_FIELDCAT 'BUDAT' 'BUDAT' 'ACDOCA' '' '' '过账⽇期'.*ENDFORM.FORM f_alv_display TABLES it_table.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidi_callback_pf_status_set = 'F_SET_PF_STATUS'i_callback_user_command = 'F_USER_COMMAND'is_layout_lvc = gs_layoutit_events = gt_eventsit_fieldcat_lvc = lt_alv_cati_save = 'U'TABLESt_outtab = it_tableEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.ENDIF.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_set_pf_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS'STD'.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.PERFORM f_check_change_data.CASE r_ucomm.WHEN 'ZCHANGE'.* PERFORM frm_save_zchange. "保存资产更改数据WHEN '&IC1'."双击事件READ TABLE gt_output INTO gs_output INDEX rs_selfield-tabindex.IF sy-subrc EQ0.* BREAK it0003.IF gs_output-structure IS INITIAL.MESSAGE'请选择结构名'TYPE'S' DISPLAY LIKE'E'.ENDIF.CHECK NOT gs_output-structure IS INITIAL.IF rs_selfield-fieldname+0(7) EQ'JSONSTR'.PERFORM frm_get_lvcs.PERFORM frm_change_json USING rs_selfield-fieldname.PERFORM frm_display_alv2.ENDIF.ENDIF.ENDCASE.PERFORM f_refresh_alv.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_check_change_data.DATA: lo_grid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTINGe_grid = lo_grid.lo_grid->check_changed_data( ).ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_refresh_alv.DATA: lo_grid TYPE REF TO cl_gui_alv_grid,ls_is_stable TYPE lvc_s_stbl.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTINGe_grid = lo_grid.ls_is_stable-col = 'X'.ls_is_stable-row = 'X'.lo_grid->refresh_table_display(EXPORTINGis_stable = ls_is_stableEXCEPTIONSfinished = 1OTHERS = 2 ).IF sy-subrc <> 0.ENDIF.ENDFORM.FORM frm_get_sturct_f4 USING pc_func TYPE fupararef-funcname CHANGING pc_struc TYPE fupararef-structure. DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE. DATA: lt_fupararef LIKE TABLE OF fupararef.lt_fupararef[] = gt_fupararef[].DELETE lt_fupararef[] WHERE funcname NE pc_func.* BREAK it0003.CALL FUNCTION'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTINGretfield = 'STRUCTURE'value_org = 'S'TABLESvalue_tab = lt_fupararefreturn_tab = lt_ret_tabEXCEPTIONSparameter_error = 1no_values_found = 2OTHERS = 3.IF sy-subrc = 0.READ TABLE lt_ret_tab INDEX 1.IF sy-subrc = 0AND lt_ret_tab-fieldval IS NOT INITIAL.pc_struc = lt_ret_tab-fieldval.ENDIF.ENDIF.ENDFORM. " FRM_GET_ARKTX_F4FORM caller_exit USING ls_data TYPE slis_data_caller_exit.BREAK it0003.* DATA: call_f4 TYPE REF TO lcl_event_receiver.* CREATE OBJECT call_f4.* CALL METHOD call_f4->HANDLE_F4_HELP.DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.DATA: lt_wa_f4 TYPE lvc_s_f4,lt_f4 TYPE lvc_t_f4.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = l_ref_alv.SET HANDLER lcl_event_receiver=>on_f4 FOR l_ref_alv.SET HANDLER lcl_event_receiver=>on_data_changed FOR l_ref_alv.lt_wa_f4-fieldname = 'STRUCTURE'.lt_wa_f4-register = 'X'.lt_wa_f4-getbefore = 'X'.lt_wa_f4-chngeafter = 'X'.* lt_wa_f4-internal = 'X'.APPEND lt_wa_f4 TO lt_f4.CALL METHOD l_ref_alv->register_f4_for_fieldsEXPORTINGit_f4 = lt_f4.* CASE e_fieldname.* WHEN 'STRUCTURE'.* READ TABLE gt_output ASSIGNING FIELD-SYMBOL(<fs_alv>) INDEX es_row_no-row_id.* IF sy-subrc = 0.* PERFORM frm_get_sturct_f4 USING <fs_alv>-funcname CHANGING <fs_alv>-structure.* LOOP AT gt_output ASSIGNING FIELD-SYMBOL(<ls_output>) WHERE funcname EQ <fs_alv>-funcname. * <ls_output>-structure = <fs_alv>-structure.* ENDLOOP.* ENDIF.** WHEN .* WHEN OTHERS.* ENDCASE.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_GET_LVCS*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------** -->P_RS_SELFIELD_FIELDNAME text*&---------------------------------------------------------------------*FORM frm_get_lvcs.FIELD-SYMBOLS :<fs_filed> TYPE any.ASSIGN COMPONENT'STRUCTURE'OF STRUCTURE gs_output TO <fs_filed>.CLEAR: lt_table[].DATA: lv_tabname TYPE dntab-tabname.lv_tabname = <fs_filed>.*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = lv_tabnameTABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录CLEAR lt_alv_cat.LOOP AT lt_table INTO ls_table.* IF LS_TABLE-FIELDNAME NE 'MANDT'.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = <fs_filed>.ls_alv_cat-ref_field = ls_table-fieldname.IF ls_table-fieldname EQ'MEINS'.ls_alv_cat-no_convext = 'X'.* CLEAR: ls_alv_cat-ref_field,ls_alv_cat-ref_table.ENDIF.ls_alv_cat-seltext = ls_table-fieldtext.ls_alv_cat-scrtext_l = ls_table-fieldtext.ls_alv_cat-scrtext_m = ls_table-fieldtext.ls_alv_cat-scrtext_s = ls_table-fieldtext.APPEND ls_alv_cat TO lt_alv_cat.* ENDIF.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号ASSIGN d_ref->* TO <dyn_table>.*创建动态⼯作区结构CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区ASSIGN dyn_wa->* TO <dyn_wa>.* zcolor* DELETE lt_alv_cat[] WHERE fieldname EQ 'MANDT'.* ls_alv_cat-fieldname = 'ZCOLOR'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'ZCOLOR'.* ls_alv_cat-seltext = '更新结果'.* ls_alv_cat-scrtext_l = '更新结果'.* ls_alv_cat-scrtext_m = '更新结果'.* ls_alv_cat-scrtext_s = '更新结果'.* APPEND ls_alv_cat TO lt_alv_cat.* ls_alv_cat-fieldname = 'MESSAGE'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'MESSAGE'.* ls_alv_cat-seltext = '更新信息'.* ls_alv_cat-scrtext_l = '更新信息'.* ls_alv_cat-scrtext_m = '更新信息'.* ls_alv_cat-scrtext_s = '更新信息'.* APPEND ls_alv_cat TO lt_alv_cat.* BREAK it0003.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_CHANGE_JSON*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_change_json USING p_rs_selfield_fieldname.DATA : json_ser TYPE REF TO cl_trex_json_serializer,json_des TYPE REF TO cl_trex_json_deserializer.FIELD-SYMBOLS :<fs_filed> TYPE any.ASSIGN COMPONENT p_rs_selfield_fieldname OF STRUCTURE gs_output TO <fs_filed>. DATA: lv_json TYPE string.lv_json = <fs_filed>.* FIELD-SYMBOLS :<fs_filed2> TYPE any.* ASSIGN COMPONENT 'STRUCTURE' OF STRUCTURE gs_output TO <fs_filed2>.* DATA: lv_tabname TYPE tabname.* lv_tabname = <fs_filed2>.DATA: ls_zbpms011 LIKE zbpms011.DATA : jsonstr TYPE string.CREATE OBJECT json_des.IF lv_json+0(1) EQ'['. "表结构CALL METHOD json_des->deserializeEXPORTINGjson = lv_jsonIMPORTINGabap = <dyn_table>. "<dyn_table>.ELSE.CALL METHOD json_des->deserializeEXPORTINGjson = lv_jsonIMPORTINGabap = <dyn_wa>. "<dyn_table>.APPEND <dyn_wa> TO <dyn_table>.ENDIF.* BREAK it0003.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DISPLAY_ALV2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_display_alv2 .PERFORM f_set_layout2.* PERFORM F_SET_FIELDCAT.* PERFORM f_set_event.PERFORM f_alv_display TABLES <dyn_table>.ENDFORM.*&---------------------------------------------------------------------**& Form F_SET_LAYOUT2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM f_set_layout2 .CLEAR: gs_layout.* gs_layout-box_fname = 'SLBOX'.gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.* gs_layout-ctab_fname = 'CELLCOLOR'.ENDFORM.View Code。

ABAP--如何在ABAP中使用日志管理

ABAP--如何在ABAP中使用日志管理

*" TABLES*" T_LOG_MESSAGE STRUCTURE Z_LOG_MESSAGE*" EXCEPTIONS*" LOG_HEADER_INCONSISTENT*" LOGGING_ERROR*"----------------------------------------------------------------------* Author :Ashim Chowdhury* DESCRIPTION: This function module is used insert messages in the * application logCONSTANTS: c_message TYPE syst-msgid VALUE 'ZMESSAGE',c_999 TYPE syst-msgno VALUE '999'.DATA:l_log_handle TYPE balloghndl,l_s_log TYPE bal_s_log,l_dummy type string,l_ext_no type bal_s_log-extnumber,l_s_mdef TYPE bal_s_mdef.if T_LOG_MESSAGE[] is not initial.l_s_log-object = I_LOG_OBJECT.l_ext_no = I_EXTNUMBER.l_s_log-extnumber = l_ext_no.* Create the log with header dataCALL FUNCTION 'BAL_LOG_CREATE'EXPORTINGi_s_log = l_s_logIMPORTINGE_LOG_HANDLE = l_log_handleEXCEPTIONSLOG_HEADER_INCONSISTENT = 1OTHERS = 2.IF sy-subrc <> 0.case sy-subrc.when 1.raise LOG_HEADER_INCONSISTENT.when others.raise LOGGING_ERROR.endcase.ENDIF.l_s_mdef-log_handle = l_log_handle.* Set the default valueCALL FUNCTION 'BAL_GLB_MSG_DEFAULTS_SET' EXPORTINGi_s_msg_defaults = l_s_mdefEXCEPTIONSOTHERS = 0.* Loop the message table and write the messages into the logloop at T_LOG_MESSAGE.* Use the message type ZMESSAGE and msg no 999* Issue the message in a dummy variablemessage ID C_message type t_log_message-MSGTY number C_999 with t_log_message-MSG_TEXT_1 t_log_message-MSG_TEXT_2t_log_message-MSG_TEXT_3 t_log_message-MSG_TEXT_4into l_dummy.* The parameters set by message statement will be used* Add the message in the logPERFORM msg_add.endloop.* save logs in the databaseCALL FUNCTION 'BAL_DB_SAVE'EXPORTINGI_SAVE_ALL = 'X'EXCEPTIONSLOG_NOT_FOUND = 1SAVE_NOT_ALLOWED = 2NUMBERING_ERROR = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.endif.ENDFUNCTION.*--------------------------------------------------------------------* FORM MSG_ADD*--------------------------------------------------------------------* Add the message to the log*-------------------------------------------------------------------*FORM msg_add.DATA:l_s_msg TYPE bal_s_msg.* define data of message for Application Logl_s_msg-msgty = sy-msgty.l_s_msg-msgid = sy-msgid.l_s_msg-msgno = sy-msgno.l_s_msg-msgv1 = sy-msgv1.l_s_msg-msgv2 = sy-msgv2.l_s_msg-msgv3 = sy-msgv3.l_s_msg-msgv4 = sy-msgv4.* add this message to log file* (I_LOG_HANDLE is not specified, we want to add to the default log.* If it does not exist we do not care =>EXCEPTIONS log_not_found = 0) CALL FUNCTION 'BAL_LOG_MSG_ADD'EXPORTING* I_LOG_HANDLE =i_s_msg = l_s_msgEXCEPTIONSlog_not_found = 0OTHERS = 1.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM.5)在程序中使用ZIU_MESSAGE_LOGGING函数来维护应用日志,代码如下Data declaration->* Internal table for message loggingDATA: it_log_message TYPE STANDARD TABLE OF z_log_message,wa_log_message TYPE z_log_message,l_ext_number TYPE string.Constants:c_obj_zxiproxy TYPE balobj_d VALUE 'ZTESTLOG'.* Now populate the internal table with the log messages as shown below.wa_log_message-* msgty is the type of the message.* E -> Error, W -> Warning, S -> Success* Logging code for insert message into logCLEAR wa_log_message.wa_log_message-msgty = 'E'. “ Can use W or Swa_log_message-msg_text_1 = < Message text 1>.wa_log_message-msg_text_2 = < Message text 2>wa_log_message-msg_text_3 = < Message text 3>wa_log_message-msg_text_4 = < Message text 4>* Append the message into the internal tableAPPEND wa_log_message TO it_log_message.At the end transfer the log message to the system log by calling function module ZIU_MESSAGE_LOGGING. L_EXT_NUMBER will bt any string of your choice. * Function module ZIU_MESSAGE_LOGGING will do the logging* i_log_object is the object type (to be configrd using txn SLG0CALL FUNCTION 'ZIU_MESSAGE_LOGGING'EXPORTINGi_log_object = c_obj_zxiproxyi_extnumber = l_ext_numberTABLESt_log_message = it_log_messageEXCEPTIONSlog_header_inconsistent = 1logging_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.ENDIF.4、使用TCODE:SLG1查看应用日志。

SAPABAPRFC接口通用日志工具:abapfmlogger

SAPABAPRFC接口通用日志工具:abapfmlogger

SAPABAPRFC接⼝通⽤⽇志⼯具:abapfmlogger很早之前就想写个能记录函数模块⽇志的通⽤⼯具,最早尝试时,没有想清楚插⼊代码的体积过⼤问题的解决⽅案。

在⼀些群友的提醒下,了解到可以⽤特殊办法来处理这⼀问题。

不过当时⽐较忙,没有动笔,后来也渐渐忘记。

最近⼜想起这件事,花了2天完成了⼀个初步的实现。

介绍给⼤家,希望能有参考价值。

本⽂链接:原创内容,转载请注明2020.10.20 前些天发现了⼀些bug,之前下载过的话请更新到。

简介⽬标本⼯具有⼏个⽬标:把⽇志数据存储到⼀个统⼀⽇志表中,避免为每个接⼝创建⽇志表,从⽽减少重复⼯作量。

⽤⼀段通⽤代码实现⽇志存储,可以通过配置表来开关功能。

以JSON格式存储⽇志,并提供⼀定的索引查询功能。

允许根据⽇志的唯⼀ID来重处理数据(类似事务代码WE19)。

⽬前⽬标1, 2已经实现,3, 4部分实现,还在完善中。

原理基本原理是使⽤⼀些动态编程技术,在函数运⾏时获取参数值,转换为JSON数据存储到表中。

⽇志使⽤唯⼀ID作为主键。

重处理时,根据⽇志记录,动态⽣成ABAP变量,并从JSON中获取值,赋值给变量,再动态地调⽤⽇志中记录的FM。

代码量⽬前还很⽐较少,只有⼏百⾏,可以阅读包含⽂件ZAFL_MACROS和类ZCL_AFL_UTILITIES以了解更多细节。

关于ABAP动态编程,如果有不懂的地⽅,可以参考:这⼀系列⽂章:项⽬地址项⽬名:abap fm loggerGithub地址:请使⽤安装,如果你觉得有帮助的话,欢迎Star.使⽤介绍abap fm logger的⽤法,包含代码、配置、报表等。

报表⽇志存储在表ZAFL_LOG中,报表程序ZAFL_VIEWER可以⽤于查询/重处理⽇志点击JSON字段可以查看参数详情。

选中⽇志⾏,点击⼯具栏的“Process Selected Item”,则程序会尝试使⽤选中的⽇志的参数记录重新调⽤相应接⼝。

⽇志存储只需要2个复制粘贴就能完成代码部分,⾮常简单:1, 添加包含⽂件ZAFL_MACROS到需要记录⽇志的FM的函数组中,FUNCTION-POOL zzxxxx.INCLUDE zafl_macros.2, 在函数中调⽤相应的宏,FUNCTION z_fm.**初始化logger,需要在FM的开头部分调⽤/afl/log_init.**可选,最多指定3个⽤于搜索的字段(⽐如公司代码、物料号等)/afl/set_custom_fields 'cust field1''cust field2''cust field3'.**可选,记录状态码,如S/E等,最多2位/afl/set_status 'S''message'.**保存⽇志,必须在FM的结尾处/afl/save.ENDFUNCTION.这⾥, /afl/log_init 和 /afl/save 是必选的,⽽ /afl/set_custom_fields 和 /afl/set_status 提供了⼀些灵活功能,可以按需选择是否调⽤。

SAP-ABAP批量查询SAP标准日志(更改历史記錄)

SAP-ABAP批量查询SAP标准日志(更改历史記錄)

描述OBJECTCLAS對象物料主数据变更查询(MM03)MATERIAL采购信息记录变更查询(ME1L)INFOSATZ采购申请(PR)BANF采购订单变更查询(PO)EINKBELEG销售凭证(含合同、订单等)VERKBELEG客户DEBI供应商KRED信⽤(FD32)KLIMCDHDR -抬头表OBJECTCLAS对象类OBJECTID对象值CHANGENR⽂档更改编号CHANGE_IND U 更新I 插⼊E 删除 (单字段⽂档) D 删除J 插⼊ (单字段⽂档)SAP-ABAP批量查询SAP标准⽇志(更改历史記錄)常⽤對象名:如何查找对象1.对象表:TCDOBTCDOBT(SE11,根據表查詢對象)/SCDO(根據對象查詢表)2.⽤单号,编码模糊查询3.限定时间与⽤户进⾏测试批量查询标准⽇志⽅法⼀:事务代码(SE38):RSSCD100 / (RC1CD100\RSSCD1TS)⽅法⼆:后台表(SE11):CDHDR 和 CDPOSCDPOS-项⽬表OBJECTCLAS对象类OBJECTID对象值CHANGENR⽂档更改编号TABNAME表名TABKEY已更改的表记录码FNAME字段名CHNGIND修改类型 (U, I, E, D)TEXT_CASE标识:X=⽂本更改UNIT_OLD更改⽂档,参照的单位UNIT_NEW更改⽂档,参照的单位CUKY_OLD更改⽂档,参照货币CUKY_NEW更改⽂档,参照货币VALUE_NEW更改字段的新内容VALUE_OLD更改字段的新内容*&---------------------------------------------------------------------**& Report ZCDHDR_CDPOS*&*&---------------------------------------------------------------------**&*& 标准程序:RSSCD100*&---------------------------------------------------------------------*REPORT zcdhdr_cdpos NO STANDARD PAGE HEADING .TYPE-POOLS: slis.TABLES: cdhdr,cdred,tcdob.DATA: fldct TYPE slis_t_fieldcat_alv,slayt TYPE slis_layout_alv ,varnt LIKE disvariant,repid LIKE sy-repid .DATA: itab TYPE TABLE OF cdred WITH HEADER LINE.DATA: it_cdhdr TYPE TABLE OF cdhdr WITH HEADER LINE.DATA: it_cdred TYPE TABLE OF cdred WITH HEADER LINE.SELECT-OPTIONS :s_clas FOR tcdob-object OBLIGATORY ,s_objtid FOR cdhdr-objectid,s_usrnam FOR cdhdr-username ,s_udate FOR cdhdr-udate DEFAULT sy-datum,s_time FOR cdhdr-utime,s_tcode FOR cdhdr-tcode,s_tab FOR cdred-tabname,s_fname FOR cdred-fname,s_tabkey FOR cdred-tabkey .AT SELECTION-SCREEN OUTPUT.%_s_clas_%_app_%-text = '对象类'.%_s_objtid_%_app_%-text = '对象值'.%_s_usrnam_%_app_%-text = '⽤户名'.%_s_udate_%_app_%-text = '⽇期'.%_s_time_%_app_%-text = '时间'.%_s_tcode_%_app_%-text = '事务码'.%_s_tab_%_app_%-text = '修改的表名'.%_s_fname_%_app_%-text = '字段名'.%_s_tabkey_%_app_%-text = 'KEY值'.START-OF-SELECTION.PERFORM getdata.PERFORM outdata.*&---------------------------------------------------------------------**& Form getdata*&---------------------------------------------------------------------* FORM getdata.CLEAR: itab,itab[],it_cdhdr,it_cdhdr[].SELECT * INTO TABLE it_cdhdrFROM cdhdrWHERE objectclas IN s_clas ANDobjectid IN s_objtid ANDusername IN s_usrnam ANDudate IN s_udate ANDutime IN s_time ANDtcode IN s_tcode .LOOP AT it_cdhdr.CLEAR: it_cdred,it_cdred[].CALL FUNCTION'CHANGEDOCUMENT_READ'EXPORTINGchangenumber = it_cdhdr-changenrobjectclass = it_cdhdr-objectclasobjectid = it_cdhdr-objectidTABLESeditpos = it_cdredEXCEPTIONSno_position_found = 1wrong_access_to_archive = 2time_zone_conversion_error = 3OTHERS = 4.IF sy-subrc = 0.LOOP AT it_cdred WHERE fname IN s_fname AND tabname IN s_tab ANDtabkey IN s_tabkey .APPEND it_cdred TO itab.ENDLOOP.ENDIF.ENDLOOP.ENDFORM. "getdata*&---------------------------------------------------------------------**& Form outdata*&---------------------------------------------------------------------* FORM outdata.DATA lines(10).slayt-colwidth_optimize = 'X'.slayt-zebra = 'X'.slayt-detail_initial_lines = 'X'. "&ETA 空单元格也显⽰ repid = sy-repid.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY' EXPORTINGi_callback_program = repidi_structure_name = 'CDRED'i_save = 'A'is_layout = slayti_callback_user_command = 'USER_COMMAND' TABLESt_outtab = itabEXCEPTIONSprogram_error = 1OTHERS = 2.ENDFORM. "outdata*&--------------------------------------------------------------------**& Form user_command*&--------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfld TYPE slis_selfield.CASE r_ucomm.WHEN '&IC1'.READ TABLE itab INDEX rs_selfld-tabindex.CHECK sy-subrc = 0.WHEN 'REFRESH'.PERFORM getdata.ENDCASE.rs_selfld-row_stable = 'X'.rs_selfld-col_stable = 'X'.rs_selfld-refresh = 'X'.ENDFORM. "user_command*&--------------------------------------------------------------------**& Form set_status*&--------------------------------------------------------------------* FORM set_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS'STANDARD' EXCLUDING rt_extab . ENDFORM. "set_statusZCDHDR_CDPOS。

ABAP记录

ABAP记录

ABAP重点记录:透明表:在数据库服务器上物理的存储数据记录, 可以被ABAP程序访问,是所有控制字段的集合A 应用表 (主数据和业务数据)C 定制表, 仅由消费者维护, 非SAP输入L 存储当前数据表,传送空闲G 定制表, 不受 SAP 更新影响, 只 INS 全部E 控制表,SAP和用户有分开的关键字范围S 系统表, 只被SAP维护, 修改=调整W 系统表,内容可运输通过各个TR对象视图:是一组透明表在特定关系下的映射,可以被SQL程序访问,是事先已经运行过的SQL 的结果,无真实存储物理表,物化视图是提前执行SQL,真实存储在物理表中库:在表中抽取一部分,建立一个个性化的库数据元素:用二维表格形式来表示事物及其之间的关系,字段名、字段的数据类型合起来称为数据元素结构:是数据类型的定义在数据库服务器上没有物理的存储空间,也不能被ABAP程序访问内表多行,结构一行,簇表不能做内联接关键字是一组在表中可以唯一确定这条记录的字段,不能为空Database views :和数据库的视图形同,连接条件是必须自定义. Projection views: 用于屏蔽一些字段(一般用于保护数据时使用). Help views: 该类视图可以用搜索帮助的"selection method"中使用,参与连接表必须存在外键. Maintenance views:允许你进行对几个表的数据进行修改,参与连接表必须存在外键,他们的连接条件是不能自定义的;Append Views:这种视图主要用于增强;在四种类型视图只有Database views是通过inner join来建立.其他类型的视图使用的outer join 语句建立的ABAP改一个程序要用一个用户,不同用户改相同程序会生成不同的请求号内表关键字可以重复,内表做运算,是暂存表配置和程序跨CLIENT,业务数据不跨CLIENT语言代码ZH数据库中保存的1,要用1数据超过100万条不能用selectSLICENSE - Administer SAP Licenses 使用SAP Keygen算号GS01 - 创建集GS02 - 更改集GS03 - 显示集GS04 - 删除集SE81 - 应用层次SE30 - ABAP 对象运行时间分析SM50 - 工作进程概述SM36-定义后台jobSM37 - 作业选择概览SM38 - 队列维护事务SE93 - 维护事务代码(根据描述查事务码)/H调试权限SMARTFORMS - SAP Smart FormsSE54 - 生成表格视图SM31 - 调用诸如 SM30 的视图维护SE84根据结构查表或者ST05进行跟踪SE85根据字段查表SM58 - 异步 RFC 错误日志SCEM - CATT - EMSE80 - 对象浏览器(可建开发类)SM59 - RFC 目的(显示/维护)SE43 - 可用Tcode层次树SE09 -释放本地产生的传输请求SE91 - 消息维护CT04 - 特性管理CL02 - 分类管理ST22查看转储错误分析(短存储)OSS1-连接SAP OSSSPRO_ADMIN -定制项目管理SEARCH_SAP_MENU 在 SAP 菜单中查找SQ01 - SAP 查询: 维护查询用SQ01名称ZFIAP003创建,建立功能区选表LFA1供应商一般数据表格,msert table建立关联,LFA1、LFB1、LFBK、BAKA,用户组分配ZFISLOF,环境-查询,设计表格显示内容,ZFIAP004,点创建,显示功能区,调用功能区ZFIAP003。

abap 查看方法

abap 查看方法

abap 查看方法ABAP(Advanced Business Application Programming)是SAP 系统中的一种编程语言,它主要用于开发SAP的业务应用程序和增强现有的SAP系统功能。

在ABAP中,我们可以通过查看方法来了解代码的实现细节和功能。

本文将以"ABAP查看方法"为标题,介绍ABAP中查看方法的相关内容。

一、什么是查看方法在ABAP中,查看方法是一种用于查看代码实现的工具。

通过查看方法,我们可以直接查看和分析已经存在的函数模块、类方法以及其他ABAP对象的实现代码。

这样有助于我们更好地理解代码逻辑、排查问题以及进行代码优化。

二、如何使用查看方法在ABAP中,我们可以使用SE80事务码进入ABAP开发工具。

在这个工具中,我们可以通过查看对象来查看代码实现。

具体操作如下:1. 打开SE80事务码,进入ABAP开发工具。

2. 在左侧的导航树中选择对应的对象类型,如函数模块、类方法等。

3. 在对象列表中选择要查看的对象。

4. 点击"展开"按钮展开对象的实现代码。

5. 在代码编辑器中查看代码实现。

三、查看方法的作用通过查看方法,我们可以达到以下几个目的:1. 理解代码逻辑:通过查看方法,我们可以直接查看代码的实现细节,从而更好地理解代码的逻辑和功能。

2. 排查问题:当遇到问题时,通过查看方法可以帮助我们定位问题所在,并进行问题分析和修复。

3. 代码优化:通过查看方法,我们可以对代码进行分析和优化,提高代码的性能和可维护性。

四、查看方法的注意事项在使用查看方法时,我们需要注意以下几点:1. 不要修改代码:查看方法只是用来查看代码的工具,不要在这里进行任何修改操作。

2. 注意代码版本:在查看方法时,需要注意查看的代码版本,确保查看的是正确的代码实现。

3. 注意代码权限:有些代码可能有访问权限限制,需要确保自己有足够的权限才能查看。

五、总结通过ABAP的查看方法,我们可以直接查看和分析代码的实现细节,从而更好地理解代码逻辑、排查问题和进行代码优化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*&---------------------------------------------------------------------**& Report ZMME_LOG*&*&---------------------------------------------------------------------**&*&说明:配置表ZTMM_LOG_CONF中的主键字段名和消息字段名以“,”隔开*&---------------------------------------------------------------------*REPORT zmme_log.TABLES: syst,zsmm_log.*&---------------------------------------------------------------------** TYPES*&---------------------------------------------------------------------*TYPE-POOLS: slis."ALVTYPE-POOLS: icon."图标TYPE-POOLS: bkkdc."域文本TYPE-POOLS: abap.TYPES BEGIN OF ty_itab.TYPES status(4) TYPE c. "状态(红绿灯)INCLUDE TYPE zsmm_log.TYPES: stext TYPE functext.TYPES END OF ty_itab.TYPES: BEGIN OF ty_fname,value TYPE fdname,END OF ty_fname.TYPES: BEGIN OF ty_fvalue,value TYPE char20,END OF ty_fvalue.*&---------------------------------------------------------------------** CONSTANTS*&---------------------------------------------------------------------**&---------------------------------------------------------------------** GLOBAL DATA*&---------------------------------------------------------------------*DATA: gv_repid TYPE sy-repid.*&---------------------------------------------------------------------** GLOBAL INTERNAL TABLES*&---------------------------------------------------------------------*DATA: gwa_log_conf TYPE ztmm_log_conf,gt_log_conf TYPE TABLE OF ztmm_log_conf.DATA: gt_itab TYPE TABLE OF ty_itab,gwa_itab TYPE ty_itab."ALV相关变量DATA: gt_fieldcat TYPE lvc_t_fcat,gwa_layout TYPE lvc_s_layo,gt_event_exit TYPE slis_t_event_exit.DATA: gt_component_tab TYPE abap_component_tab,gs_component_desc TYPE LINE OF abap_component_tab,gr_struc_type TYPE REF TO cl_abap_structdescr,gr_tab_type TYPE REF TO cl_abap_tabledescr,gr_struc TYPE REF TO data,gr_tab TYPE REF TO data,ld_comp(40) TYPE c.FIELD-SYMBOLS: <gs_selection> TYPE any,<gt_selection> TYPE table.*&---------------------------------------------------------------------** GLOBAL RANGES*&---------------------------------------------------------------------**&---------------------------------------------------------------------** SELECTION-SCREEN*&---------------------------------------------------------------------*SELECT-OPTIONS: s_zfname FOR zsmm_log-zfname MATCHCODE OBJECT zmm_sh_ interface,"接口名称s_datum FOR syst-datum, "日期s_uzeit FOR syst-uzeit, "时间s_zitype FOR zsmm_log-zitype, "接口类型s_rtype FOR zsmm_log-rtype. "状态**&---------------------------------------------------------------------*** GLOBAL MACROS**&---------------------------------------------------------------------****&---------------------------------------------------------------------*** EVENTS BEFORE MAIN PROGRAM**&---------------------------------------------------------------------**INITIALIZATION.* PERFORM frm_initprogm. "程序初始化***AT SELECTION-SCREEN OUTPUT.***AT SELECTION-SCREEN ON VALUE-REQUEST FOR.***AT SELECTION-SCREEN.***TOP-OF-PAGE.**&---------------------------------------------------------------------*** MAIN PROGRAM**----------------------------------------------------------------------*START-OF-SELECTION.* INITIALIZE DATAPERFORM frm_initialize_data.** PROCESS INPUT DATA (FOR INBOUND INTERFACES)* PERFORM FRM_PROCESS_INPUT_DATA.** SELECT DATA FROM DATABASEPERFORM frm_select_data.** PROCESS SELECTED DATA* PERFORM FRM_PROCESS_DATA.*END-OF-SELECTION.** COMBINE RESULTS FROM THE PROCESSING (MAY NOT BE NECESSARY)* PERFORM FRM_COMBINE_DATA.* OUTPUT RESULT TO FILE OR SPOOL/SCREENPERFORM frm_output_data.*&---------------------------------------------------------------------**& FORM FRM_INITIALIZE_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_initialize_data .SELECT * FROM ztmm_log_confINTO CORRESPONDING FIELDS OF TABLE gt_log_confWHERE zfname IN s_zfname"接口名称AND zitype IN s_zitype."接口类型ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_SELECT_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_select_data .DATA: lv_tabname TYPE objectname.DATA: lv_str_where TYPE string.DATA: lwa_fname TYPE ty_fname.DATA: lt_kname TYPE TABLE OF ty_fname."主键字段DATA: lt_mname TYPE TABLE OF ty_fname."消息字段FIELD-SYMBOLS: <lfs_value> TYPE any.DATA: lv_value TYPE string.DATA: lv_lenth TYPE i.DATA: lv_stext TYPE functext.LOOP AT gt_log_conf INTO gwa_log_conf."接口描述CLEAR: lv_stext.SELECT SINGLE stext INTO lv_stextFROM tftitWHERE funcname = gwa_log_conf-zfname."查询条件:传输日期IF gwa_log_conf-zdname IS NOT INITIAL.CONCATENATE gwa_log_conf-zdname ' IN S_DATUM' INTO lv_str_where RESPECTING BLANKS.ENDIF."查询条件:传输时间IF lv_str_where IS INITIAL.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE gwa_log_conf-ztname ' IN S_UZEIT' INTO lv_str_whe re RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-ztname ' IN S_U ZEIT'INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF."查询条件:传输状态IF lv_str_where IS INITIAL.IF gwa_log_conf-zsname IS NOT INITIAL.CONCATENATE gwa_log_conf-zsname ' IN S_RTYPE' INTO lv_str_whe re RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-zsname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-zsname ' IN S_R TYPE'INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF."动态获取日志信息lv_tabname = gwa_log_conf-ztable.PERFORM create_dynamic_tablesUSINGlv_tabname'DOCS'.IF <gt_selection> IS ASSIGNED.SELECT * FROM (lv_tabname)INTO CORRESPONDING FIELDS OF TABLE <gt_selection>WHERE (lv_str_where).IF sy-subrc = 0 AND <gs_selection> IS ASSIGNED.SPLIT gwa_log_conf-zkey AT ',' INTO TABLE lt_kname.SPLIT gwa_log_conf-zmname AT ',' INTO TABLE lt_mname.LOOP AT <gt_selection> INTO <gs_selection>."功能模块的名称gwa_itab-zfname = gwa_log_conf-zfname."功能模块的描述gwa_itab-stext = lv_stext."传输日期ASSIGN COMPONENT gwa_log_conf-zdname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-sydat = <lfs_value>.ENDIF."传输日期ASSIGN COMPONENT gwa_log_conf-ztname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-sytim = <lfs_value>.ENDIF."接口类型gwa_itab-zitype = gwa_log_conf-zitype."主键值CLEAR: lwa_fname.LOOP AT lt_kname INTO lwa_fname.ASSIGN COMPONENT lwa_fname-value OF STRUCTURE <gs_selecti on> TO <lfs_value>.* IF sy-subrc = 0 AND <lfs_value> IS NOT INITIAL.IF <lfs_value> IS ASSIGNED.lv_value = <lfs_value>.ELSE.lv_value = ''.ENDIF.CONDENSE lv_value NO-GAPS.IF gwa_itab-zkvalue IS INITIAL.CONCATENATE lv_value ',' INTO gwa_itab-zkvalue.ELSE.CONCATENATE gwa_itab-zkvalue lv_value ',' INTO gwa_itab -zkvalue.ENDIF.* ENDIF.AT LAST.* IF gwa_itab-zkvalue IS NOT INITIAL."去除最后一位的逗号CONDENSE gwa_itab-zkvalue NO-GAPS.lv_lenth = strlen( gwa_itab-zkvalue ).lv_lenth = lv_lenth - 1.IF lv_lenth > 0.gwa_itab-zkvalue = gwa_itab-zkvalue+0(lv_lenth).ENDIF.* ENDIF.ENDAT.CLEAR: lwa_fname.ENDLOOP."传输状态ASSIGN COMPONENT gwa_log_conf-zsname OF STRUCTURE <gs_selec tion> TO <lfs_value>.IF sy-subrc = 0.gwa_itab-rtype = <lfs_value>.IF gwa_itab-rtype = 'E'.gwa_itab-status = '@5C@'.ELSE.gwa_itab-status = '@5B@'.ENDIF.ENDIF."消息CLEAR: lwa_fname.LOOP AT lt_mname INTO lwa_fname.ASSIGN COMPONENT lwa_fname-value OF STRUCTURE <gs_selecti on> TO <lfs_value>.IF sy-subrc = 0 AND <lfs_value> IS NOT INITIAL.lv_value = <lfs_value>.CONDENSE lv_value NO-GAPS.IF gwa_itab-rtmsg IS INITIAL.CONCATENATE lv_value ',' INTO gwa_itab-rtmsg.ELSE.CONCATENATE gwa_itab-rtmsg lv_value ',' INTO gwa_itab -rtmsg.ENDIF.ENDIF.AT LAST.IF gwa_itab-rtmsg IS NOT INITIAL."去除最后一位的逗号CONDENSE gwa_itab-rtmsg NO-GAPS.lv_lenth = strlen( gwa_itab-rtmsg ).lv_lenth = lv_lenth - 1.gwa_itab-rtmsg = gwa_itab-rtmsg+0(lv_lenth).ENDIF.ENDAT.CLEAR: lwa_fname.ENDLOOP.APPEND gwa_itab TO gt_itab.CLEAR: gwa_itab.ENDLOOP.ENDIF.ENDIF.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form create_dynamic_tables*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_GS_DIMEN text* -->P_GS_NAME text*----------------------------------------------------------------------*FORM create_dynamic_tables USING id_dimen TYPE objectnameid_name TYPE objectname.CLEAR gs_component_desc.CLEAR gt_component_tab.gs_component_desc-name = id_name.IF id_dimen IS NOT INITIAL.gs_component_desc-type ?=cl_abap_structdescr=>describe_by_name( id_dimen ).gs_component_desc-as_include = 'X'.APPEND gs_component_desc TO gt_component_tab.ENDIF.* LOOP AT gt_dimen INTO gs_dimen.* IF gs_dimen IS NOT INITIAL.* IF id_name = 'BUCHUNG' AND gs_dimen = 'GSBER'.* CONTINUE.* ENDIF.* ASSIGN gs_dimen TO <field>.* CLEAR gs_component_desc.* gs_component_desc-name = <field>.* CONCATENATE 'glu1-' <field> INTO ld_comp.**check existance before creating field JET* gs_component_desc-type ?= cl_abap_elemdescr=>describe_by_name( * ld_comp ).* APPEND gs_component_desc TO gt_component_tab.* ENDIF.** ENDLOOP.* get fields selected by customer -* ensure they are not duplicates! JT* do not allow balancing fields, if left variant selected and splitte r*active JT* LOOP AT gt_fagl_fc INTO gs_fagl_fc.* IF gs_fagl_fc-field IS NOT INITIAL.* ASSIGN gs_fagl_fc-field TO <field>.* CLEAR gs_component_desc.* gs_component_desc-name = <field>.* CONCATENATE 'glu1-' <field> INTO ld_comp.**check existance before creating field JET** gs_component_desc-type ?= cl_abap_elemdescr=>describe_by_name( * ld_comp ).* APPEND gs_component_desc TO gt_component_tab.* ENDIF.* ENDLOOP.gr_struc_type = cl_abap_structdescr=>create( gt_component_tab ).gr_tab_type = cl_abap_tabledescr=>create( gr_struc_type ).CREATE DATA: gr_struc TYPE HANDLE gr_struc_type,gr_tab TYPE HANDLE gr_tab_type.ASSIGN: gr_struc->* TO <gs_selection>,gr_tab->* TO <gt_selection>. " to replace the extractENDFORM. " create_dynamic_tables*&---------------------------------------------------------------------**& FORM FRM_OUTPUT_DATA*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_output_data .PERFORM frm_layout_build.PERFORM frm_fieldcat_init.PERFORM frm_display_alv.ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_LAYOUT_BUILD*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_layout_build .gwa_layout-cwidth_opt = 'X'."优化列宽选项是否设置gwa_layout-zebra = 'X'."斑马线ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_FIELDCAT_INIT*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_fieldcat_init .DATA: lwa_fieldcat TYPE lvc_s_fcat.DEFINE d_get_field.CLEAR LWA_FIELDCAT.LWA_FIELDCAT-FIELDNAME = &1.LWA_FIELDCAT-SCRTEXT_L = &2.lwa_fieldcat-REF_table = &3.lwa_fieldcat-REF_FIELD = &4.IF &1 = 'BOX'.LWA_FIELDCAT-EDIT = 'X'.LWA_FIELDCAT-CHECKBOX = 'X'.ENDIF.APPEND LWA_FIELDCAT TO GT_FIELDCAT.END-OF-DEFINITION.REFRESH gt_fieldcat.d_get_field 'STATUS' '传输状态' '' ''.d_get_field 'ZFNAME' '函数模块' 'ZTMM_LOG_CONF' 'ZFNAME'.d_get_field 'STEXT' '接口描述' '' ''.d_get_field 'SYDAT' '传输日期' 'ZSMM_LOG' 'SYDAT'.d_get_field 'SYTIM' '传输时间' 'ZSMM_LOG' 'SYTIM'.d_get_field 'ZITYPE' '接口类型' 'ZTMM_LOG_CONF' 'ZITYPE'.d_get_field 'ZKVALUE' '主键值' '' ''.d_get_field 'RTYPE' '传输状态' 'ZSMM_LOG' 'RTYPE'.d_get_field 'RTMSG' '消息' '' ''.ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_DISPLAY_ALV*&---------------------------------------------------------------------** TEXT*----------------------------------------------------------------------** --> P1 TEXT* <-- P2 TEXT*----------------------------------------------------------------------*FORM frm_display_alv .DATA: lwa_event_exit TYPE slis_event_exit.gv_repid = sy-repid.CLEAR: gt_event_exit[].lwa_event_exit-ucomm = '&ALL'.lwa_event_exit-after = 'X'.APPEND lwa_event_exit TO gt_event_exit.lwa_event_exit-ucomm = '&SAL'.lwa_event_exit-after = 'X'.APPEND lwa_event_exit TO gt_event_exit.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = gv_repid* i_callback_pf_status_set = 'FRM_USER_STATUS'i_callback_user_command = 'FRM_USER_COMMAND'is_layout_lvc = gwa_layoutit_fieldcat_lvc = gt_fieldcatit_event_exit = gt_event_exitTABLESt_outtab = gt_itabEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.* IMPLEMENT SUITABLE ERROR HANDLING HEREENDIF.ENDFORM.**&---------------------------------------------------------------------***& FORM FRM_USER_STATUS**&---------------------------------------------------------------------**FORM frm_user_status USING extab TYPE slis_t_extab.*ENDFORM. "FRM_USER_STATUS*&---------------------------------------------------------------------**& FORM FRM_USER_COMMAND*&---------------------------------------------------------------------*FORM frm_user_command USING ok_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.DATA: lf_check TYPE c.DATA: lwa_grid TYPE REF TO cl_gui_alv_grid.DATA: lwa_stable TYPE lvc_s_stbl.DATA: lwa_layo TYPE lvc_s_layo.CLEAR:lf_check.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lwa_grid.CALL METHOD lwa_grid->check_changed_data."获取ALV当前输出格式CALL METHOD lwa_grid->get_frontend_layoutIMPORTINGes_layout = lwa_layo.CASE ok_ucomm.WHEN '&IC1'."双击"显示日志详细信息PERFORM frm_get_detail USING rs_selfield.WHEN OTHERS.ENDCASE.lwa_layo-cwidth_opt = 'X'."优化列宽选项是否设置CALL METHOD lwa_grid->set_frontend_layoutEXPORTINGis_layout = lwa_layo.rs_selfield-refresh = 'X'.rs_selfield-col_stable = 'X'.rs_selfield-row_stable = 'X'.ENDFORM. "FRM_USER_COMMAND*&---------------------------------------------------------------------**& Form FRM_GET_DETAIL*&---------------------------------------------------------------------** 显示日志详细信息*----------------------------------------------------------------------** -->p_selfield text*----------------------------------------------------------------------*FORM frm_get_detail USING p_selfield TYPE slis_selfield.DATA: lv_tabname TYPE objectname.DATA: lv_str_where TYPE string."主键字段DATA: lwa_kname TYPE ty_fname,lt_kname TYPE TABLE OF ty_fname."主键字段值DATA: lwa_kvalue TYPE ty_fvalue,lt_kvalue TYPE TABLE OF ty_fvalue.READ TABLE gt_itab INTO gwa_itab INDEX p_selfield-tabindex.READ TABLE gt_log_conf INTO gwa_log_conf WITH KEY zfname = gwa_itab -zfname."查询条件:传输日期IF gwa_log_conf-zdname IS NOT INITIAL.CONCATENATE gwa_log_conf-zdname ' EQ ''' gwa_itab-sydat '''' INT O lv_str_where RESPECTING BLANKS.ENDIF."查询条件:传输时间IF lv_str_where IS INITIAL.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE gwa_log_conf-ztname ' EQ ''' gwa_itab-sytim '''' IN TO lv_str_where RESPECTING BLANKS.ENDIF.ELSE.IF gwa_log_conf-ztname IS NOT INITIAL.CONCATENATE lv_str_where ' AND ' gwa_log_conf-ztname ' EQ ''' g wa_itab-sytim ''''INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDIF.SPLIT gwa_log_conf-zkey AT ',' INTO TABLE lt_kname.SPLIT gwa_itab-zkvalue AT ',' INTO TABLE lt_kvalue.LOOP AT lt_kname INTO lwa_kname.READ TABLE lt_kvalue INTO lwa_kvalue INDEX sy-tabix.IF lv_str_where IS INITIAL.CONCATENATE lwa_kname-value ' EQ ''' lwa_kvalue-value '''' INTO lv_str_where RESPECTING BLANKS.ELSE.CONCATENATE lv_str_where ' AND ' lwa_kname-value ' EQ ''' lwa_k value-value ''''INTO lv_str_where RESPECTING BLANKS.ENDIF.ENDLOOP."动态获取日志信息CLEAR: lv_tabname.lv_tabname = gwa_log_conf-ztable.PERFORM create_dynamic_tablesUSINGlv_tabname'DOCS'.IF <gt_selection> IS ASSIGNED.SELECT * FROM (lv_tabname)INTO CORRESPONDING FIELDS OF TABLE <gt_selection>WHERE (lv_str_where).IF sy-subrc = 0 AND <gs_selection> IS ASSIGNED.CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'EXPORTINGi_title = '详细信息'* I_SELECTION = 'X'* I_ALLOW_NO_SELECTION =i_zebra = 'X'i_screen_start_column = 10i_screen_start_line = 10i_screen_end_column = 180i_screen_end_line = 20* I_CHECKBOX_FIELDNAME =* I_LINEMARK_FIELDNAME =* I_SCROLL_TO_SEL_LINE = 'X'i_tabname = '<GT_SELECTION>'i_structure_name = lv_tabname* IT_FIELDCAT =* IT_EXCLUDING =* I_CALLBACK_PROGRAM =* I_CALLBACK_USER_COMMAND =* IS_PRIVATE =* IMPORTING* ES_SELFIELD =* E_EXIT =TABLESt_outtab = <gt_selection> * EXCEPTIONS* PROGRAM_ERROR = 1* OTHERS = 2.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.ENDIF.ENDIF.ENDFORM.相关表结构:。

相关文档
最新文档