如何记住美好的时刻,使用标准 SAP NetWeaver 日志的可能性

在本文中,我们将介绍一些常见的技巧,以及是否有针对它们的标准文档(请参阅 Auding and Logging 寻求帮助)。在本文中,我们将主要考虑标准工具。所有代码清单都可以在 ZABAPFILEOS_07 年的 github 上找到。

SAP NetWeaver 中的日志记录类型

日志记录有 3 种类型:

1)系统:收集系统内事件的信息:调试下编辑、更改设置、调用 HTTP 等。

2) 应用程序日志:这是应用程序中内置的日志,其中信息由一些 id 业务实体(订单、交付、FI 文档等)写入和读取。

3) 应用程序跟踪(按需详细系统日志):可以按用户、进程、作业激活和停用的详细日志。它用于跟踪 ABAP 代码、SQL 查询、RFC/HTTP 连接和权限检查的工具中。

在本文的第一部分,我们将查看应用程序日志,在本文的第二部分,我们将查看系统日志。

第 1 部分 使用应用程序日志


请考虑业务线应用程序中使用的以下日志

1. 业务应用程序日志(事务 SLG1 / SLG0 / SLG2)

2. 更改文件(SCDO 事务))

3. SCU3 表历史日志

4. 通过 SE16N 编辑表格时显示更改

让我们稍微了解一下以下日志:

1. IDOC 日志

2. 以 SD/MM 输出(基于 NAST)

3. ODATA-segw 日志

4. SXI_MONITOR XI:消息监控

5. 工作流执行(SWI5 事务))

应用程序日志侧重于收集有关特定业务对象(采购订单、财务文档或与业务数据处理相关的其他用户操作)的操作的信息。

业务应用程序日志 (BAL) – SLG1 / SLG0 / SLG2

业务应用程序日志是应用程序中最通用和最常用的日志,但它并不是唯一的日志。它有许多 API 和内置的交互式功能。有关此功能的文档,请参阅此处。此外,许多文章专门介绍了此功能以及 SAP 系统内带有演示程序的单独包 (SZAL)(它们的掩码是 SBAL_DEMO_*)。如您所见,这是一个有据可查的功能,这增加了它的吸引力。

在系统和爱好者的开发中,此日志有许多包装器。我的建议:不要在上面制作另一个包装器(这是浪费时间)——最好使用现有的包装器(它们的数量足够多,而且非常不错)。一个示例IF_RECA_MESSAGE_LIST(基于类 CF_RECA_MESSAGE_LIST);此处描述了一个示例,以及系统中的许多示例。让我们看一下 BAL 功能的一些重要优势。在示例中,我将引用标准的 DEMO 程序,因此您始终可以查看这个或那个选项的实现,并在您的解决方案中实现它。

按层次累积和显示消息的能力。 日志可以累积和显示数据,而不是在一个堆中,而是堆积和显示到某个属性(实体),而这些属性(实体)又可能具有子实体,而子实体又具有子实体。这样,您就不会对消息感到困惑;此外,我们可以按照严重性对消息进行过滤,这也提高了对日志的理解。为了显示此功能,让我们在 ALV 模式下运行 SBAL_DEMO_04_DETLEVEL 程序。

我们可以以树的形式显示日志,并仅显示(过滤)属于所需 “branch-entity” 的消息。我们还可以根据消息的严重性显示日志。

可以在 BAL(业务应用程序日志)视图中分层积累和显示消息
1 可以在 BAL(业务应用程序日志)视图中分层积累和显示消息

以各种格式显示。

ApplicationLog 可以显示为单独的窗口,由窗口内联为 POPUP,以及自定义窗口(锁定父窗口的模式)和非模式窗口(不锁定父窗口)。要查看这些功能,让我们运行 SBAL_DEMO_04 程序。

2 不同的日志显示格式题
3 日志树显示(显示日志选项)标题​​

4 通过子屏幕显示内置日志(在子屏幕中选项)题

5 带父窗口锁定的模态日志显示 (POPUP)

能够保存到数据库,包括任何结构的附加数据。

演示程序 SBAL_DEMO_05 和 SBAL_DEMO_06 演示如何将日志保存到数据库,然后在 SLG1 中显示它。该程序SBAL_DEMO_06显示了如何将其他数据保存到日志中。

6 将其他数据保存到日志中,并在数据库中显示

当我们为某条消息保存了数据后,会出现一个特殊图标,当您单击它时,会出现一个额外的屏幕。其他数据通过类似 INDX 的 table BAL_INDX 进行存储,其中键是日志中的日志编号和消息编号。

7 将附加数据保存到消息编号

能够使用回调通过按钮和其他过渡来扩展屏幕。

日志具有添加您自己的回调的内置功能,因此我们可以:添加自定义按钮来显示日志,将我们自己的处理程序添加到打开消息和其他回调的函数中。可能的回调在 SBAL_CALLBACK 程序中列出(您也可以在那里找到软件实现)。

8 可能的日志回调

9 具有自定义事件处理程序的元素

现在,当我单击分支、消息和按钮时,我能够导航到其他事务,以更复杂的结构显示相邻数据,并导航到其他日志甚至系统😊。

在这篇文章中,我概述了那些在我看来最适用的可能性。如果您想查看其他功能,请通过事务 SE80 打开 SZAL 包(不是 SBAL,而是 SZAL),然后查看 SBAL_DEMO* 程序。

10 个系统内置的应用程序日志 DEMO 示例

删除日志

使用 SBAL 日志时,请记住,应定期清除它们。也可以根据不同的参数配置清洁。这是通过 SLG2 事务完成的。使用登录应用程序时,我们能够指定特定条目的过期时间。该作业可以在后台运行。

11 用于删除过期日志的标准程序屏幕(SLG2 事务)

BAL 中的自定义对象示例。

让我们看一个逐步设置和使用日志的简单示例。假设我们有一个程序,通过 HTTP 协议请求 ABFOS 系统中的数据(Advanced Business Flexible Operational Server 是一个基于 nginx 的训练服务器,专门用于演示、原型设计和测试 ERP 任务)。SAP ERP 系统通过 HTTP 协议发送带有参数(当前示例:RAM/product 和 date)的请求,并接收此物料的销售预测。我们的任务是使用 Application Log 制作请求-响应对象并以清晰的形式承诺,并将其展示给用户。

让我们创建一个主对象:在我们的例子中,我们称它为 ZABFOS – Advanced Business Flex Operational System,以及一个子对象:ZFORECASTAI 辅助预测计算)。为此,请启动事务 SLG0 并单击 New Entry。

12 在 SLG0 中创建日志记录对象

 然后,在选择带有 ZABFOS 的行两次后,单击 Sub-Objects 子文件夹。

13 转到子对象

使用 New Entry 按钮。作为子对象,指定 ZFORECAST 和文本:使用 AI / AI 进行预测计算,如下面的屏幕截图所示。

14 指定子对象参数

 对于日志记录,我们将使用基于 IF_RECA_MESSAGE_LIST 接口的类(此处有一篇关于此的精彩文章),对于存储复杂数据,我们将使用表 BAL_INDX。存储复杂数据的方法将如下面的代码清单所示,该程序的完整代码可在此处获得。

 METHOD save_complex.
    DATA lv_json_http_info TYPE string.
    DATA lv_lognumb_ext TYPE balognr.

    lv_lognumb_ext = mo_msg_list->md_extnumber && mv_complex_counter.
    mv_complex_counter = mv_complex_counter + 1.

    lv_json_http_info =
    /ui2/cl_json=>serialize(
      EXPORTING
        data             = iv
    ).

    EXPORT http_call_json = lv_json_http_info
       TO DATABASE bal_indx(al)
     "  ID g_lognumber. "
       ID lv_lognumb_ext.

    MESSAGE s004(zabfos_msg) WITH lv_lognumb_ext INTO sy-msgli.
    me->add_prev_msg( ).
  ENDMETHOD.

http 调用存储请求、响应代码和完整的响应消息。显示在列表代码中(包含对 ABFOS 的调用)。

  METHOD _log_httpcall.

    MESSAGE s002(zabfos_msg) 
WITH ms_http_call-req_method ms_http_call-req_path
      INTO sy-msgli.
    mo_log->add_prev_msg( ).

    MESSAGE s003(zabfos_msg) WITH 
ms_http_call-resp_code ms_http_call-resp_reason
       INTO sy-msgli.
    mo_log->add_prev_msg( ).

    mo_log->save_complex( ms_http_call ).

  ENDMETHOD.

为了显示复合数据类型,我们将在查看消息时 “搞砸” 回调。为此,请在查看配置文件中将功能模块指定为回调。这将允许我们在双击消息时 “拦截” 处理。该程序的全文可在此处获取日志。

    ls_display_profile-clbk_ucbf-userexitp = ''.
    ls_display_profile-clbk_ucbf-userexitf = 'Z_AF07_SBAL_CALLBACK_BEFORE'.
    ls_display_profile-clbk_ucbf-userexitt = const_callback_function.

    ls_display_profile-clbk_ucaf-userexitp = ''.
    ls_display_profile-clbk_ucaf-userexitf = 'Z_AF07_SBAL_CALLBACK_AFTER'.
    ls_display_profile-clbk_ucaf-userexitt = const_callback_function.

功能模块本身可以包含任何处理(取决于需要和情况)。在我们的例子中,我们只是从 INDX 表中读取 http-request-response 并将其显示在 HTML 浏览器中。

FUNCTION z_af07_sbal_callback_before.
*"----------------------------------------------------------------------
*"*"Local Interface:
" CHANGING "
"     REFERENCE(C_S_USER_COMMAND_DATA) TYPE  BAL_S_CBUC"
*"----------------------------------------------------------------------
  DATA lc_complex_data_mark TYPE string VALUE 'Complex save id:'.
  DATA lv_trg_id TYPE string.
  DATA lv_log_id_indx TYPE balognr.
  DATA lv_http_info_json TYPE string.
  DATA html_xstring TYPE xstring.

  IF c_s_user_command_data-ucomm EQ '&IC1'.
    IF c_s_user_command_data-list_msgh-log_handle IS NOT INITIAL
        AND c_s_user_command_data-list_msgh-msgnumber IS NOT INITIAL.

      IF c_s_user_command_data-list_value CS lc_complex_data_mark.
        lv_trg_id = c_s_user_command_data-list_value.
        REPLACE ALL  OCCURRENCES OF lc_complex_data_mark IN lv_trg_id WITH ''.
        CONDENSE lv_trg_id NO-GAPS.
        lv_log_id_indx = lv_trg_id.

        IMPORT http_call_json = lv_http_info_json
          FROM DATABASE bal_indx(al)
            ID   lv_log_id_indx
            IGNORING STRUCTURE BOUNDARIES
            .

        TRY .
            CALL TRANSFORMATION sjson2html SOURCE XML lv_http_info_json
                                   RESULT XML html_xstring.

            cl_abap_browser=>show_html(
              html_string = cl_abap_codepage=>convert_from( html_xstring )
               ).

            c_s_user_command_data-ucomm_exec = abap_true.
          CATCH cx_root.

        ENDTRY.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFUNCTION.

请注意,对于日志记录和显示,我们完整地使用 SLG1 概念和存储。

现在,当我们双击消息时,我们将打开一个 HTML 浏览器,其中包含详细的日志(我们想要的数据量)。带有演示数据(包括 nginx 配置、ABFOS rust 实现)的包发布在 github 上的存储库中。

15 Application Log 可以使用自己的视图屏幕和回调进行扩展

在处理日志(尤其是详细日志)时,您需要记住它们的清理和存储时间。这是通过事务 SLG2 完成的。还可以通过 SMICM 跟踪查看 HTTP 调用,但更多内容请参阅系统日志。

更改文档 (SCDO 事务)

该系统具有强大的“更改文档对象”功能(SCDO 事务 {最后一个字符是字母,而不是数字;来自单词 Objects}),该功能使用 CDHDR 和 CDPOS 表。此功能记录对交易表字段的更改,并且通常与标准交易相关联。它的便利性在于其结构和对业务实体特定领域的明确技术约束。要查看更改日志,您可以使用 RSSCD200 程序(对于标准对象,它通常显示在菜单项中)。

来自 FB02/FB03 的示例。

16 转到凭证更改

我们可以在技术数据的上下文中看到哪些字段发生了变化以及如何更改。

17 在文档更改中显示数据

要找出标准对象的标识符,您需要在 FM CHANGEDOCUMENT_READ_HEADERS中设置一个断点并查看 OBJECTCLASS 变量。我们可以看到,对于 FI 文档,更改文档的对象 = BELEG。

18 FM CHANGEDOCUMENT_READ_HEADERS 中的断点找出标准对象的 id

现在通过 RSSCD200 计划。

20 通过程序查看变更数据

让我们看看如何通过逐步创建业务对象来使用这种日志记录方法。

让我们创建一个 “product prototype” 对象,它由 4 个表组成(用于演示目的)。一个表格是标题,3 个表格揭示了原型的各个方面:原型可以具有哪些特性,需要什么材料以及创建一定数量的原型需要哪些服务。下表描述了这些字段。出于演示目的,必须有多个表,并且可以在不同时间更新不同的字段。但所有这些都构成了一个业务对象,我们将其用于变更文档。用于更新的演示程序旨在使一些数据会更改,一些数据将被添加,一些数据将被删除,一些数据不会更改。它可以用作对您的技术规范或开发的支持(如果有评论,请通过评论或问题告诉我)。

要使字段反映在 Change Documents 中,必须将项目设置为 Change Documents。在我的自定义示例中,此复选框位于每个项目上。

21 对于要反映在变更文档中的字段,该项目必须具有 Change Documents 复选框

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ONLYOFFICE 8.2 🔍引言📒1. ONLYOFFICE 产品简介📚2. 功能与特点🍁协作编辑 PDF🍂…

[mysql]修改表和课后练习

目录 DDL数据定义语言 添加一个字段 添加一个字段到最后一个 添加到表中的第一个一个字段 选择其中一个位置: 修改一个字段:数据类型,长度,默认值(略) 重命名一个字段 删除一个字段 重命名表 删除表 清空表 DCL中事务相关内容 DCL中COMMIT和ROLLBACK的讲解 对比TR…

MinerU容器构建教程

一、介绍 MinerU作为一款智能数据提取工具,其核心功能之一是处理PDF文档和网页内容,将其中的文本、图像、表格、公式等信息提取出来,并转换为易于阅读和编辑的格式(如Markdown)。在这个过程中,MinerU需要利…

使用 OpenCV 实现图像的透视变换

概述 在计算机视觉领域,经常需要对图像进行各种几何变换,如旋转、缩放和平移等。其中,透视变换(Perspective Transformation)是一种非常重要的变换方式,它能够模拟三维空间中的视角变化,例如从…

三十二、Python基础语法(面向对象其他语法-上)

一、权限 权限:在 Python 中,可以对方法和属性设置访问权限,,即规定在什么地方可以使用这些属性和方法。 1.公有 公有:可以在任意的地方通过对象调用,按照之前的方式,直接定义的属性和方法都是公有的。 …

Jmeter命令监控CPU等指标

JMeter 命令行执行脚本得到的报告中,是没有CPU、内存使用率等监控数据的,但是可以使用JMeter插件帮忙。 一、下载jmeter-plugins-manager.jar 下载后将文件放到jmeter安装包lib/ext目录下。打开Jmeter》菜单栏》选项》Plugins Manager 二、安装PerfMon…

【IF-MMIN】利用模态不变性特征进行缺失模态的鲁棒多模态情感识别

代码地址:github地址传送 文章是基于MMIN的改进 -> MMIN传送 abstract 多模态情感识别利用跨模态的互补信息来获得性能。然而,我们不能保证所有模式的数据总是存在于实践中。在跨模态数据缺失预测研究中,异质性模态之间的固有差异即模态…

vueui vxe-form 分享实现表单项的联动禁用,配置式表单方式的用法

官网文档:https:/vxeui.com 实现表单项的联动禁用 在使用 vxe-form 时,有时候需要将表单项直接进行关联操作,比如某一项选择后,另外一项设置为禁用状态不可选择,使用插槽的话神容易实现,本章是分享配置式的…

架构师备考-系统分析与设计(面向对象方法)

定义 面向对象开发方法将面向对象的思想应用于软件开发过程中,指导开发活动,是建立在“对象”概念基础上的方法学。面向对象方法的本质是主张参照人们认知一个显示系统的方法,完成分析、设计与实现一个软件系统,提倡用人类…

【Melty是一款开源的AI编程助手,基于codellama,媲美cusor】

https://github.com/meltylabs/melty.git 对话进行代码重构

java项目之校园周边美食探索及分享平台(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 校园周边美食…

在Vue和OpenLayers中使用移动传感器实现飞机航线飞行模拟

项目实现的核心代码 项目概述 该项目的目标是使用Vue.js作为前端框架,结合OpenLayers用于地图显示,实时获取来自手机传感器的数据(如经纬度、高度、速度)来模拟飞机在地图上的飞行轨迹。整体架构如下: Vue.js 用于构建…

【系统配置】信创终端操作系统如何彻底禁用ssh _ 统信 _ 麒麟 _ 方德

原文链接:【系统配置】信创终端操作系统如何彻底禁用ssh | 统信 | 麒麟 | 方德 Hello,大家好啊!今天带来一篇关于如何在信创终端操作系统中彻底禁用SSH的文章。在某些安全性要求较高的环境中,禁用SSH服务可以防止未经授权的远程访…

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大 时间:2023年 机构:北京邮电大学 发表在:IEEE TRANSACTIONS ON MULTIMEDIA, VOL. 25, 2023 代码源码地址: pytorch版本:https://github.com/dyh…

如何编写PHP代码以减少冗余?

在编程中,代码的冗余是一个常见的问题,不仅增加了代码的复杂性,还降低了可读性和可维护性。对于PHP这样的语言来说,减少代码冗余同样重要,尤其是当项目规模变得越来越大时。本文将探讨如何有效地减少PHP代码的冗余&…

苍穹外卖Bug集合

初始化后端项目运行出现以下问题 以上报错是因为maven和jdk版本不符合,需要将jdk改成17,mavne改成3.9.9

NC313 两个数组的交集

NC313 两个数组的交集 添加链接描述 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param nums1 int整型ArrayList * param nums2 int整型ArrayList * return int整型A…

【Unity】【游戏开发】Sprite背景闪烁怎么解决

【现象】 VR游戏中,给作为屏幕的3D板子加上Canvas后再加背景image,运行时总是发现image闪烁不定。 【分析】 两个带颜色的object在空间上完全重合时也遇到过这样的问题,所以推测是Canvas的image背景图与木板的面重合导致。 【解决方法】 …

【优选算法 — 双指针】双指针小专题

和为 s 的两个数 和为s的两个数 题目描述 解法一:暴力枚举 暴力枚举,先固定一个数,然后让这个数和另一个数匹配相加, 如果当前的数 所有剩余的数 target,则返回这两个数,否则固定下一个数&#…

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT:下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 (1)全维度性能升级 (2&#xff…