SAP 接口PO日志&RFC日志查询
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档案