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

文章详细介绍了SAPPO在接口交互中的消息ID应用,包括SAP发布的服务和SAP访问外部服务时的消息流。提供了接口日志查询的步骤,如在PO日志查询平台和RFC日志查询中的操作,以及关键代码示例,帮助用户跟踪和诊断接口问题。
摘要由CSDN通过智能技术生成

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档案

### 回答1: Delphi是一种广泛使用的编程语言,具有强大的集成开发环境(IDE),可以用于开发各种软件应用程序。在使用Delphi调用SAP(Systems, Applications, and Products in Data Processing)接口函数的过程中,我们首先需要创建一个SAP连接,然后使用该连接来调用我们所需的接口函数。 首先,我们需要确保已经安装了相应的SAP RFC(Remote Function Call)库,并在Delphi中导入相关的扩展包。然后,我们需要通过创建一个RFC连接对象来建立与SAP系统的通信。在连接对象中,我们需要提供SAP系统的相关信息,比如SAP服务器的主机名、系统编号、客户端号码等。 一旦我们成功建立了与SAP系统的连接,我们就可以开始调用SAP接口函数了。我们可以使用RFC连接对象的CallFunction方法来调用函数,在调用时需要提供接口函数的名称以及相应的参数。在调用成功后,我们可以通过获取返回的结果数据来处理和使用。 在调用SAP接口函数时,我们需要确保提供正确的函数参数和参数类型,以及正确的数据格式。我们可以使用Delphi提供的相关功能来进行参数类型转换和数据格式处理。 在调用函数之前,我们还需要考虑如何处理和处理潜在的错误和异常。我们可以使用Delphi提供的异常处理机制来捕获和处理可能出现的错误,以确保程序的稳定性和可靠性。 综上所述,使用Delphi调用SAP接口函数需要先建立与SAP系统的连接,然后通过RFC连接对象调用相应的接口函数,并处理返回的结果数据和潜在的错误和异常。这样可以实现Delphi与SAP系统的集成,实现数据的交互和共享。 ### 回答2: Delphi是一种编程语言,可以用于调用SAP接口函数。SAP是一种集成的企业资源计划软件,它提供了各种接口函数,可以与其他系统进行数据交换和集成。 在Delphi中调用SAP接口函数,首先需要通过SAP提供的API文档了解接口函数的参数和返回值。然后,在Delphi中创建一个新的项目或使用现有的项目,在项目中引入SAP的相关库文件和命名空间。 接下来,可以使用Delphi的相关语法,如函数调用、变量声明等,来调用SAP接口函数。根据接口函数的参数要求,可以在Delphi代码中传入需要的参数,并接收返回值。 在调用SAP接口函数时,需要确保Delphi和SAP的连接是正常的。可以通过设置连接参数,如SAP系统的用户名、密码、连接字符串等来确保连接成功。 在调用SAP接口函数之前,可能需要进行一些前期准备工作。例如,可能需要创建SAP连接对象、打开连接、连接到具体的SAP系统等。 调用SAP接口函数后,可以根据返回值来进行相应的处理。根据接口函数的返回值类型,可以使用条件语句、循环语句等来判断并处理返回结果。 在调用SAP接口函数时,还需要注意异常处理。如果在调用过程中发生了错误或异常,可以使用Delphi提供的异常处理机制来捕获和处理异常,以防止程序崩溃或不稳定。 总之,通过Delphi调用SAP接口函数可以实现与SAP系统的数据交换和集成。这样可以方便地在Delphi程序中使用SAP的功能和数据,提高系统的灵活性和扩展性。 ### 回答3: 使用Delphi调用SAP接口函数需要以下步骤: 1. 在Delphi中设置与SAP接口通信的环境。这可以通过使用SAP提供的相关库文件来完成。通常,这些库文件可以作为一个包被导入到Delphi项目中。 2. 使用SAP提供的函数或类来建立与SAP服务器的连接。这些函数或类可以通过指定SAP服务器的IP地址、端口号、用户名和密码来建立连接。 3. 一旦连接建立,可以通过调用相应的SAP函数或方法来执行所需的操作。这些操作可能包括读取或写入SAP系统的数据,调用SAP的业务逻辑函数或者执行其他与SAP相关的任务。 4. 在调用SAP函数或方法之前,可能需要根据SAP接口的要求设置相应的输入参数。这些参数通常是一个结构体或一个数组,其中包含了传递给SAP函数的数据。 5. 当SAP函数执行完成后,可能会返回一个结果,这可以是一个结构体或一个值。根据需要,可以解析结果并进一步处理。 6. 最后,使用SAP提供的功能来关闭与SAP服务器的连接,并释放相关的资源,以确保程序的完整性和安全性。 需要注意的是,具体的调用方式和步骤可能因为SAP接口的版本和特性而有所不同。因此,在进行Delphi调用SAP接口函数的实际操作前,应该先详细阅读SAP的相关文档,并了解其具体的接口规范和要求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值