SAP的PI日志查看工具
被很多人吐槽的SAP PI能坚挺的活下来,真是不容易。。。
SXI_MONITOR是PI的标准的消息查看器,如果又权限的话,甚至可以做自定义字段的查询增强(如果对单据创建接口,增加单号。。。速度杠杠的)
SXI_MONITOR为什么不好呢,一是不直观,东西太多,太复杂了。二呢就是展示消息太麻烦了,这让很多人深恶痛绝。
下面说一下PI日志的几个表:
SXMSPEMAS——Integration Engine: Enhanced Message Queue (Master) 队列消息的框架信息,包含发送接收方的接口名字,命名空间,系统等。
SXMSPMAST——Integration Engine: Message Queue (Master) 队列消息的主要信息,包含了用户啊,开始结束时间等等。
SPAN { font-family: "Courier New"; font-size: 10pt; font-weight: bold; color: rgba(127, 255, 212, 1); background: rgba(0, 0, 0, 1) }
SXMSCLUR——XMB: Resources Cluster 消息报文
下面上代码:(随便写写的,有不当的地方可以自行完善)
REPORT ZLYLOG123.
DATA:V_DA TYPE SXMSCLUR.
DATA LT_BIN_CONTENT TYPE SDOKCNTBINS.
DATA:V_TAB TYPE TABLE OF XSTRING,
W_TAB TYPE XSTRING.
TYPES:BEGIN OF TY_SHOW,
OBJECT_ID TYPE CRMT_PO_NUMBER_SOLD,
MSGTYPE TYPE C,
OB_SYSTEM TYPE AIT_SNDR,
OB_NS TYPE RM_OIFNS,
OB_NAME TYPE RM_OIFNAME,
IB_SYSTEM TYPE AIT_RCVR,
IB_NS TYPE RM_IIFNS,
IB_NAME TYPE RM_IIFNAME,
MSGINFO TYPE CHAR100,
IXML TYPE STRING,
OXML TYPE STRING,
END OF TY_SHOW,
BEGIN OF TY_DETAIL,
MSGGUID TYPE SXMSMGUID,
PID TYPE SXMSPID,
MSGTYPE TYPE SXMSPMTYPE,
MSGSTATE TYPE SXMSPMSTAT,
QOSMODE TYPE SXMSQOS,
SENDTIMEST TYPE TIMESTAMPL,
REF_TO_MSG TYPE SXMSMGUID,
OB_SYSTEM TYPE AIT_SNDR,
OB_NS TYPE RM_OIFNS,
OB_NAME TYPE RM_OIFNAME,
IB_SYSTEM TYPE AIT_RCVR,
IB_NS TYPE RM_IIFNS,
IB_NAME TYPE RM_IIFNAME,
END OF TY_DETAIL.
DATA:IM_CLUSTKEY TYPE SXMSCLUSTKEY,
EX_RES TYPE SXMSREST,
EX_XRES TYPE SXMSXREST,
EW_XRES TYPE SXMSXRESS,
EX_NS TYPE SXMSNST,
IM_MANDT TYPE SYMANDT,
WA_CLUR TYPE SXMSCLUR,
GV_FROM TYPE TIMESTAMPL,
GV_TO TYPE TIMESTAMPL,
GT_SHOW TYPE TABLE OF TY_SHOW,
GW_SHOW LIKE LINE OF GT_SHOW,
GT_LOG TYPE TABLE OF ZCRMTVSLOG,
GW_LOG TYPE ZCRMTVSLOG,
GT_DETAIL TYPE TABLE OF TY_DETAIL,
GW_DETAIL LIKE LINE OF GT_DETAIL.
DATA:GT_FIELDCAT TYPE LVC_T_FCAT.
DATA GS_FIELDCAT LIKE LINE OF GT_FIELDCAT.
DATA LS_LAYOUT TYPE LVC_S_LAYO.
DATA:RESULT TYPE STRING.
DATA:LV_B TYPE I,
LV_E TYPE I,
LV_L TYPE I. TABLES:SXMSPEMAS. DEFINE APPEND_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = &1.
GS_FIELDCAT-SCRTEXT_L = &2.
GS_FIELDCAT-OUTPUTLEN = &3.
GS_FIELDCAT-NO_ZERO = &4.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.
*table:SXMSPEMAS 接口信息 SELECTION-SCREEN:BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_SEND FOR SXMSPEMAS-OB_SYSTEM.
SELECT-OPTIONS:S_OBNS FOR SXMSPEMAS-OB_NS.
SELECT-OPTIONS:S_OBNAME FOR SXMSPEMAS-OB_NAME.
SELECT-OPTIONS:S_IEND FOR SXMSPEMAS-OB_SYSTEM.
SELECT-OPTIONS:S_IBNS FOR SXMSPEMAS-OB_NS.
SELECT-OPTIONS:S_IBNAME FOR SXMSPEMAS-OB_NAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-CM7 FOR FIELD EXEDATE.
PARAMETERS: EXEDATE TYPE SY-DATUM.
SELECTION-SCREEN COMMENT 46(2) TEXT-CM9 FOR FIELD EXETIME.
PARAMETERS: EXETIME TYPE SY-UZEIT.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-CM8 FOR FIELD EXE2DATE.
PARAMETERS: EXE2DATE TYPE SY-DATUM.
SELECTION-SCREEN COMMENT 46(2) TEXT-CM9 FOR FIELD EXE2TIME.
PARAMETERS: EXE2TIME TYPE SY-UZEIT.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK01. INITIALIZATION.
IF EXETIME IS INITIAL.
EXEDATE = SY-DATLO.
IF SY-TIMLO < 010000.
EXEDATE = EXEDATE - 00000001.
ENDIF.
EXETIME = SY-TIMLO - 003600.
ENDIF.
IF EXE2DATE IS INITIAL.
EXE2DATE = SY-DATLO + 00000001.
ENDIF. START-OF-SELECTION.
"优先查询logb表记录,然后再拼接时间戳否则按时间戳查询
* IF S_NOBJ IS NOT INITIAL OR S_OBJ IS NOT INITIAL OR S_TYPE IS NOT INITIAL.
* SELECT SINGLE * INTO GW_LOG FROM ZCRMTVSLOG WHERE NEW_OBJECT_ID IN S_NOBJ AND OBJECT_ID IN S_OBJ AND PROCESS_TYPE IN S_TYPE.
* IF GW_LOG-UZEIT < '000059'.
* GW_LOG-UZEIT = '000000'.
* ELSEIF GW_LOG-UZEIT > '235900'.
* GW_LOG-UZEIT = '235900'.
* ELSE.
* GW_LOG-UZEIT = GW_LOG-UZEIT - 60.
* ENDIF.
* CONVERT DATE GW_LOG-DATUM TIME GW_LOG-UZEIT INTO TIME STAMP GV_FROM TIME ZONE SY-ZONLO.
* GW_LOG-UZEIT = GW_LOG-UZEIT + 120.
* CONVERT DATE GW_LOG-DATUM TIME GW_LOG-UZEIT INTO TIME STAMP GV_TO TIME ZONE SY-ZONLO.
* ELSE.
* EXE timestamp (UTC) supplied: Convert to date/time in local user timezone:
IF EXEDATE IS NOT INITIAL.
CONVERT DATE EXEDATE TIME EXETIME INTO TIME STAMP GV_FROM TIME ZONE SY-ZONLO.
ENDIF.
* EXE TO timestamp (UTC) supplied: Convert to date/time in local user timezone:
IF EXE2DATE IS NOT INITIAL.
CONVERT DATE EXE2DATE TIME EXE2TIME INTO TIME STAMP GV_TO TIME ZONE SY-ZONLO.
ENDIF. * ENDIF.
"get mast data from SXMSPMAST
SELECT
SXMSPMAST~MSGGUID
SXMSPMAST~PID
SXMSPMAST~MSGTYPE
SXMSPMAST~MSGSTATE
SXMSPMAST~QOSMODE
SXMSPMAST~SENDTIMEST
SXMSPMAST~REF_TO_MSG
SXMSPEMAS~OB_SYSTEM
SXMSPEMAS~OB_NAME
SXMSPEMAS~IB_SYSTEM
SXMSPEMAS~IB_NAME
INTO TABLE GT_DETAIL
FROM SXMSPMAST
INNER JOIN SXMSPEMAS
ON SXMSPMAST~MSGGUID = SXMSPEMAS~MSGGUID
AND SXMSPMAST~PID = SXMSPEMAS~PID
WHERE SXMSPMAST~SENDTIMEST BETWEEN GV_FROM AND GV_TO AND SXMSPMAST~MSGTYPE = 'S' AND SXMSPMAST~PID = 'RECEIVER'
AND SXMSPEMAS~OB_SYSTEM IN S_SEND
AND SXMSPEMAS~OB_NS IN S_OBNS
AND SXMSPEMAS~OB_NAME IN S_OBNAME
AND SXMSPEMAS~IB_SYSTEM IN S_IEND
AND SXMSPEMAS~IB_NS IN S_IBNS
AND SXMSPEMAS~IB_NAME IN S_IBNAME
.
SORT GT_DETAIL BY REF_TO_MSG.
LOOP AT GT_DETAIL INTO GW_DETAIL.
CLEAR:EX_RES[],EX_XRES[],EX_NS[],WA_CLUR.
IM_CLUSTKEY-MSGGUID = GW_DETAIL-MSGGUID.
IM_CLUSTKEY-PID = GW_DETAIL-PID.
IM_MANDT = 300.
"导入XML各项数据
IMPORT LT_RES TO EX_RES LT_XRES TO EX_XRES LT_NS TO EX_NS FROM DATABASE SXMSCLUR(IS) TO WA_CLUR CLIENT IM_MANDT ID IM_CLUSTKEY.
"读取XML报文
READ TABLE EX_XRES INTO EW_XRES INDEX 1.
IF SY-SUBRC = 0. "XML报文解码
RESULT = CL_ABAP_CODEPAGE=>CONVERT_FROM(
SOURCE = EW_XRES-RESCONTENT ).
SEARCH RESULT FOR '<OBJECT_ID>'.
IF SY-SUBRC = 0.
LV_B = SY-FDPOS + 11.
SEARCH RESULT FOR '</OBJECT_ID>'.
IF SY-SUBRC = 0.
LV_E = SY-FDPOS.
LV_L = LV_E - LV_B.
GW_SHOW-OBJECT_ID = RESULT+LV_B(LV_L).
GW_SHOW-IXML = RESULT.
ENDIF.
ENDIF.
ENDIF.
"读取报文对应的返回报文
READ TABLE GT_DETAIL INTO GW_DETAIL WITH KEY REF_TO_MSG = GW_DETAIL-MSGGUID.
IF SY-SUBRC = 0.
DELETE GT_DETAIL WHERE MSGGUID = GW_DETAIL-MSGGUID.
CLEAR:EX_RES[],EX_XRES[],EX_NS[],WA_CLUR.
IM_CLUSTKEY-MSGGUID = GW_DETAIL-MSGGUID.
IM_CLUSTKEY-PID = GW_DETAIL-PID.
IM_MANDT = 300.
MOVE-CORRESPONDING GW_DETAIL TO GW_SHOW.
"导入各项数据
IMPORT LT_RES TO EX_RES LT_XRES TO EX_XRES LT_NS TO EX_NS FROM DATABASE SXMSCLUR(IS) TO WA_CLUR CLIENT IM_MANDT ID IM_CLUSTKEY.
"读取XML报文
" *******************定制字段内容***************
READ TABLE EX_XRES INTO EW_XRES INDEX 1.
IF SY-SUBRC = 0.
"XML报文解码
RESULT = CL_ABAP_CODEPAGE=>CONVERT_FROM(
SOURCE = EW_XRES-RESCONTENT ).
SEARCH RESULT FOR '<MSGTYPE>'.
IF SY-SUBRC = 0.
LV_B = SY-FDPOS + 9.
SEARCH RESULT FOR '</MSGTYPE>'.
IF SY-SUBRC = 0.
LV_E = SY-FDPOS.
LV_L = LV_E - LV_B.
GW_SHOW-MSGTYPE = RESULT+LV_B(LV_L).
ENDIF.
ENDIF.
SEARCH RESULT FOR '<MSGINFO>'.
IF SY-SUBRC = 0.
LV_B = SY-FDPOS + 9.
SEARCH RESULT FOR '</MSGINFO>'.
IF SY-SUBRC = 0.
LV_E = SY-FDPOS.
LV_L = LV_E - LV_B.
GW_SHOW-MSGINFO = RESULT+LV_B(LV_L).
ENDIF.
ENDIF.
GW_SHOW-OXML = RESULT.
APPEND GW_SHOW TO GT_SHOW.
ENDIF.
" *******************定制字段内容***************
ELSE.
APPEND GW_SHOW TO GT_SHOW.
ENDIF.
CLEAR:GW_SHOW.
ENDLOOP. REFRESH GT_FIELDCAT.
LS_LAYOUT-CWIDTH_OPT = 'X'. "优化列宽选项是否设置
LS_LAYOUT-ZEBRA = 'X'.
* ls_layout-box_fname = 'SEL'.
APPEND_FIELDCAT:'OBJECT_ID' '单号' 35 'X',
'MSGTYPE' '接口结果' 1000 'X',
'MSGINFO' '返回消息' 1000 'X',
'OB_SYSTEM' '发送系统' 20 'X',
'OB_NS' '发送命名空间' 40 'X',
'OB_NAME' '发送接口名称' 40 'X',
'IB_SYSTEM' '接收系统' 20 'X',
'IB_NS' '接收命名空间' 40 'X',
'IB_NAME' '接收接口名称' 40 'X',
'IXML' '传入XML报文' 1000 'X',
'OXML' '返回XML报文' 1000 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'PRM_USER_COMMAND'
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT[]
* I_GRID_TITLE = LV_TITLE
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_SHOW
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF. FORM PRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZSTAT'.
ENDFORM.
FORM PRM_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD. CHECK P_UCOMM = '&IC1'. READ TABLE GT_SHOW INTO GW_SHOW INDEX P_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
DATA: LDO_XML TYPE REF TO CL_XML_DOCUMENT.
DATA: LDF_SUBRC TYPE SYSUBRC. * 创建XML对象
LDO_XML = NEW CL_XML_DOCUMENT( ).
IF P_SELFIELD-FIELDNAME = 'IXML'.
LDF_SUBRC = LDO_XML->PARSE_STRING( GW_SHOW-IXML ).
ELSEIF P_SELFIELD-FIELDNAME = 'OXML'.
LDF_SUBRC = LDO_XML->PARSE_STRING( GW_SHOW-OXML ).
ELSE.
CHECK 1 = 2.
ENDIF. IF LDF_SUBRC = 0.
LDO_XML->DISPLAY( ).
ELSE.
* MESSAGE S000 WITH '解析XML失败!' DISPLAY LIKE 'E'.
* PERFORM FRM_SHOW_STRING USING IM_XML.
ENDIF. CLEAR LDO_XML.
ENDIF.
ENDFORM.
效果展示:

SAP的PI日志查看工具的更多相关文章
- LogViewer - 方便的日志查看工具
一个完整的程序日志记录功能是必不可少的,通过日志我们可以了解程序运行详情.错误信息等,以便更好的发现及解决问题. 日志可以记录到数据库.日志服务器.文件等地方,本文主要介绍文件日志. 文件日志通常是一 ...
- iOS及时log日志查看工具 (iConsole)
github下载地址:https://github.com/nicklockwood/iConsole 偶然看到的一个iOS及时log日志查看工具,通过该工具,我们可以在任何想看日志的时候,通过手势呼 ...
- Windows日志查看工具合集
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址 ...
- Python 简易web日志查看工具&可改装为命令行工具
Python 简易web日志查看工具&可改装为命令行工具 效果图 原理 利用python的paramiko库模拟ssh登录操作,并执行tail命令 所需库 flask.paramiko.gev ...
- 日志查看工具 logviewer pro的使用
1.logViewer Pro 介绍 logViewer Pro 是一款log文件查看器,它可以在短短数秒内打开上G的LOG文件,支持高亮某行文字(例如警告,错误),支持Unicode名字,支持查看的 ...
- Centos7 日志查看工具
1 概述 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息.Systemd统一管理所有Unit的启动日志.带来的好处就是,可以 ...
- 【分享】Windows日志查看工具分享
在Linux下查看日志,使用tail.grep.find等命令还比较方便,后来需要在Windows中处理一些问题,发现缺少类似的功能,比如tailf实时输出,于是在网上收集了一些相关的小工具,希望能够 ...
- DebugView端游日志查看工具
端游日志工具 端游开发的同学可以通过DebugView - Windows Sysinternals | Microsoft Docs来查看游戏打印的log,它允许你监控本地系统上的debug pri ...
- BareTail(日志查看工具)
官网:http://www.baremetalsoft.com/baretail/index.php 在看log文件时,当日志有新增时,会自动滚动到最新的那一行,对于查看实时日志有作用.
- 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...
随机推荐
- SQL Server 中的事务管理
SQL Server 中的事务是什么? 事务是应该作为一个单元执行的一组 SQL 语句.这意味着事务确保所有命令都成功或都不成功.如果事务中的命令之一失败,则所有命令都失败,并且在数据库中修改的任何数 ...
- macOS 字体文件所在路径
目录 用户字体路径/Library/Fonts 系统字体路径/System/Library/Fonts macOS font 也就是字体文件,有2个可用路径 这里以 macOS Monterey 版本 ...
- 【Legged gym】关于Legged gym用到的roll_out_storages的batch的解析和一些PPO算法层面.config文件里参数的说明
1. 前言 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流. 如有不对之处,欢迎评论区指出错误,你我共同进步学习! 2. 正文 2.1 yield 最开始发现于:rollout_stor ...
- C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 微信公众号-自定义微信分享(vue)(JS-SDK)
1.需求描述 日常公众号开发中,业务部门对于微信内置分享(右上角->分享到朋友等)效果不太满意,需要我们自定义相关分享效果 1.1微信默认分享效果展示 1.2通过自定义分享后效果展示 1.3微信 ...
- 《基于改进Wallace树的Posit乘法单元优化》(一)
原文 文章通过增加特定的计数器.重新设计部分积求和阶段计数器布局 以及改进最终求和阶段使用的加法器,提出一种名为3L-Wallace树的改进Wallace树算法,有效减少了部分积求和的阶段数, 从而降 ...
- DDD之EFCore实现值对象
参照: DDD之EFCore实现值对象 - peng_boke - 博客园 (cnblogs.com)
- 使用 Joplin + Git + Gitee 实现笔记的多端同步
1-远程仓库环境准备 1.1-注册 Gitee 账号 由于使用 Git 作为版本控制工具,所以只要是 Git 支持的托管平台都是可以的.比如 Github.Gitlab.这里使用 Gitee 主要是考 ...
- [tldr] GO语言异常处理
在开发中, 处理异常是很重要的, 考虑各种错误情况并且提出对应的解决办法是保证不出大BUG的重要之处. error in go GO语言的异常是很简单的, 只需要实现Error函数接口即可 func ...
- RPC:设计可扩展且向后兼容的协议
协议:怎么设计可扩展且向后兼容的协议? 浏览器收到命令后会封装一个请求,并把请求发送到 DNS 解析出来的 IP 上,通过抓包工具我们可以抓到请求的数据包,如下图所示: 协议的作用 RPC 请求在发送 ...