【SAP PO】SAP PO消息ID的应用与接口日志查询方法

1、PO接口消息流

PO中间件,在接口消息传入和传出时,都会产生全局唯一的消息ID,合理记录该消息ID,可用于快速搜索PO接口报文消息。

1.1、SAP发布的服务

(1)PO消息ID的产生与应用
在这里插入图片描述
说明:
①请求报文,此时第三方请求系统还无法获取PO请求消息ID;
②请求消息,通过PO中间件的映射转换,可将PO请求消息ID赋给SAP RFC作为入参(IS_REQ-MESSAGEID,同时可以传递REQKEYID、SNDPRN、RCVPRN等信息);
③响应消息,在SAP RFC内部,将PO请求消息ID赋给SAP RFC作为出参(ES_STATUS-MESSAGEID),返回给请求方;
④响应报文,携带PO请求消息ID(msgid),PO响应消息ID(msgid2),传给请求方系统,用于日志记录。

应用建议:
当请求到达SAP时,SAP端日志可以记录PO请求消息ID;
当请求完成时,请求方日志可以记录PO请求消息ID和PO响应消息ID。

(2)PO报文消息(以Restful服务为例)
在这里插入图片描述
说明:
1、Sender JSON Request(json),原始请求报文,json格式;
2、BI(xml),原始请求报文,xml格式(在通道中自动实现转换);
3、AM(xml),RFC入参结构,xml格式(由BI通过MM_REQ转换而来),此时产生msgid;
4、AM(xml),RFC出参消息,xml格式
5、BI(xml),响应报文,xml格式(由AM通过MM_RES转换而来),此时产生msgid2;
6、Sender JSON Response(json),最终响应报文,json格式(由BI在通道中转换而来)。

1.2、SAP访问外部服务

(1)PO消息ID的产生与应用
在这里插入图片描述
说明:
①请求报文,发送请求时还没有PO请求消息ID,但是发送成功后,SAP端是可以获取到PO端的请求消息ID,可记入到本地日志;
②请求消息,通过PO中间件的映射转换,可将PO请求消息ID,传给第三方系统,用于日志记录(如果第三方系统愿意配合接收该参数的话);
③响应消息,此步无特别要求;
④响应报文,携带PO响应消息ID(msgid2),返回给请求方,用于日志记录。

应用建议:
PO接口配置生成代理类,将对代理类的调用,封装到FM中,并对FM的调用记录到本地日志。
当请求发出后,SAP端即可获取PO请求消息ID;
当请求到达服务方时,服务方可以记录PO请求消息ID;
当请求完成时,SAP端日志可以记录PO请求消息ID和PO响应消息ID。

(2)报文消息(以Restful服务为例)
在这里插入图片描述
说明:
1、BI(xml),SAP原始请求报文,xml格式;
2、AM(xml),经PO映射后的请求报文,xml格式(由BI通过MM_REQ转换而来),此时产生msgid;
3、Receiver JSON Request,经通道转换后的请求报文,json格式;
4、Receiver JSON Response,服务方返回的原始响应报文,json格式;
5、AM(xml),经通道转换后的响应报文,xml格式
6、BI(xml),最终响应报文,xml格式(由AM通过MM_RES转换而来),此时产生msgid2。

1.3、关键代码

(1)PO端,获取消息ID的Java代码

public String getMESSAGE_ID(Container container) throws StreamTransformationException{
    
    
	String MessageID; 
	java.util.Map param = container.getTransformationParameters();
	MessageID =	(String) param.get (StreamTransformationConstants.MESSAGE_ID).toString().replaceAll("-", "").toUpperCase();
	return MessageID;
}

(2)SAP端,调用代理类后,获取PO消息ID的代码:

TRY.
    "获取SXI_MONITOR 外发消息的MESSAGE_ID
    DATA: lo_protocol TYPE REF TO if_wsprotocol_message_id.
    lo_protocol ?=  lr_req->get_protocol( if_wsprotocol=>message_id ).
    log_req-messageid = lo_protocol->get_message_id( ).
  CATCH cx_ai_system_fault.
ENDTRY.

2、接口日志查询

2.1、接口示例

以下示例,访问SAP端发布的Restful服务:
在这里插入图片描述
搜集接口相关信息,可以作为接口日志的查询条件的,如:接口名称、调用双方、函数名称、调用时间、调用账号、调用执行状态、PO消息ID等。
而接口报文的具体内容,一般是不能直接作为查询条件。

以下演示,使用不同的查询条件,分别在不同的端查询接口日志的方法。

2.2、PO日志查询

访问地址:http://192.168.0.213:50000/dir/start/index.jsp(内网地址,仅限内网访问)
点击:Configuration and Monitoring Home
在这里插入图片描述
用户名:PO_MONITOR
密码:*******(请询问管理员)
在这里插入图片描述
进入监控主页,点击“适配器引擎”
在这里插入图片描述
选择“消息监控器”
在这里插入图片描述
进入消息状态概览页面,默认显式最近一天的接口消息状态统计列表,
一般同步接口,一次完整的调用会产生两条消息状态,分别对应请求消息和响应消息
在这里插入图片描述
点击展开过滤按钮,可以根据具体的接口信息进行查找(如接口函数名称:ZMMFM010)
在这里插入图片描述
此界面,一般需要重点关注失败数量,成功数量和失败数量,点击后可以查看相应的消息列表。

或者:切换数据库页签,可以对消息列表进行搜索,支持基本查询和高级查询
在这里插入图片描述
在这里插入图片描述
高级查询中,尤其需要关注标识符,即为本文开头提及的PO消息ID。
可以根据具体的接口日志信息中记录的消息ID,来定位PO消息,查看相应报文。
在这里插入图片描述
在这里插入图片描述
点击消息列表中的某个消息,下拉可以查看到该消息日志
在这里插入图片描述
点击上方按钮“打开消息”,即可参看该接口各个环节的消息报文内容(具体建有效负载页签)
在这里插入图片描述

2.3、RFC日志查询

对于添加了以下全局宏代码的FM,都可以在函数日志中心查询到执行日志。

FUNCTION zmmfm010.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_PARAMS) TYPE  ZSMM024
*"     VALUE(IS_REQ) TYPE  /ZJT/SAPPO_REQ_INFO OPTIONAL
*"  EXPORTING
*"     VALUE(ES_STATUS) TYPE  ZSBC005
*"     VALUE(ES_RETURN) TYPE  ZSMM025
*"  TABLES
*"      IT_DATA STRUCTURE  ZSMM026
*"      ET_DATA STRUCTURE  ZSMM090
*"----------------------------------------------------------------------

  zjt-rfc-log-b.  "日志记录开始,函数进入时写
  DATA:ls_ret TYPE /zjt/sappo_ret_info.
  es_status-messageid = is_req-messageid.
  .
  .
  .
  ls_ret = CORRESPONDING #( es_status MAPPING code = type msg = message ).
  zjt-rfc-log-e is_req ls_ret.    "日志记录结束,函数结束时写

ENDFUNCTION.

SAP端执行事务码:ZFLG 或 ZFLGN,根据接口相关信息,搜索FM执行日志
在这里插入图片描述
在这里插入图片描述
以上两个事务码,选择条件和返回结果字段大同小异,可以按各自喜好,选择使用
在这里插入图片描述
可以查看功能函数的输入输出数据
在这里插入图片描述

原创文章,转载请注明来源-X档案

猜你喜欢

转载自blog.csdn.net/XLevon/article/details/129871701
SAP
今日推荐