SAP PI之MessageMapping

发布时间:2024年01月11日

下图是ESR配置中各种对象的关联关系,注意OperationMapping和MessageMapping的方向性

MsgMapping是两个MassageType之间的关系,用于ServiceInterface的OperationMapping中发送和接收方在Request和Response结构之间的映射,如果ServiceInterface的inB/outB双方使用的MessageType是同样的,那么是可以不需要MsgMapping的。

MsgMapping提供了图形操作界面,最终会根据配置生成java代码并编译成jar文件,在运行时会执行该文件处理mapping。

一,创建MsgMapping

在命名空间或其下面的Folder上右键--新建,填上名字即可,通常我们Z_MM开头表示MsgMapping

二,选择源和目的MessageType

源和目的的方向也是有讲究的,同一个接口请求和返回的mapping其方向是相反的,只要以数据的流向去理解就好了

Source

Target

RequestMapping

调用方的RequestMsgType

被调方的RequestMsgType

ResponseMapping

被调方的ResponseMsgType

调用方的ResponseMsgType

在选择MsgType时,有两种操作方式:

其一就是下面红色按钮弹出选择框,选择MsgType对象,也可导入XML或XSD文件

其二就是将左侧DesignObjectTree中的适用对象(MsgType,RFC,ExternalDefinition)拖拽到下图黄框区域即可

三,字段Mapping

红框2按钮会删除所有关联;红框3按钮会显示连接红线,帮助直观了解字段关联。

字段的关联也有多种操作方式

1,直接将左树节点直接拖拽到对应右树节点

2,鼠标点选树节点,会黄色显示在图底部,按红框1按钮或者在底部拉线连接,连接后变绿色;删除单个连接也可在底部右键操作

3,红框1按钮会连接Selected节点,如果节点含子节点会将同名的子节点自动连接,如下图LS_INFO和arg0可自动关联所有下级字段

四,Mapping中function的应用

function分为很多功能:文本操作,布尔运算,常量,日期,数值计算

function的操作都在下图区域进行,我们从上面点选相关列,再从下方点选所需function。

上图表示了如下一个映射关系,小白框代表了参数个数和输入输出方向

if zywbj = A.
   dtsend目标 = dtsend源.substring(0,8).
else.
   dtsend目标 = dtsend源.substring(0,4).
endif.

除了系统预置的function,还可自己创建function(UDF客制化函数),点击上图标红的按钮。ExecutionType会影响形式参数,代码按java语法编辑,但此处无法编译检查,如有语法错误需到下一节test运行才能看到。在MsgMapping中自建的function只能在这MsgMapping中用,如果想建一个可以多处通用的自建function,参见图二蓝框

//示例代码,从XI头部取DynamicVariable;这里的命名空间和变量,特别是系统预设变量,可以到ReceiverRule的condition维护那里去找
@LibraryMethod(title=“getASMA”, description=“get adapter specific message attribute”, category=“UDFPool”, type=ExecutionType.SINGLE_VALUE
public String getASMA (@Argument(title=“命名空间”) String namespace,@Argument(title=“变量名”) String attribute, Container container)  throws StreamTransformationException{
    Map<String, Object> all = container.getInputHeader().getAll();
    DynamicConfiguration dynConf = (DynamicConfiguration)all.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key = DynamicConfigurationKey.create( namespace, attribute);
    String value = dynConf.get(key);
    return value;
}

五,Mapping的测试

红框按钮可以切换网格视图与源码视图,在左侧网格视图或源码视图都可编辑值,然后点击左下面执行按钮,右侧就会展现目的MsgType收到的数据。

在源码视图我们有一点要关注的就是xml的命名空间与前缀:命名空间与MessageType所在命名空间一致,而前缀左侧是ns0右侧是ns1

对于Occurence可以大于1的element,在下图左侧测试编辑界面默认也只显示一个,可以右键--“duplicate subtree”来复制多个

六,Java Mapping and XSLT

前面小节是都是介绍MsgMapping图形操作的,会生成jar文件在runtime执行;此外还有一种直接编写java代码或XSLT文件,然后导入到PI中(见图二绿框)

使用java mapping时不需要创建MsgMapping,在OperationMapping时选择导入Jar的那个class即可

java编程参考:How to create SOAP to RFC PI interface with Java Mapping | SAP Blogs

SAP PI/PO Java Mapping — Test and Debug on Eclipse | SAP Blogs

文章来源:https://blog.csdn.net/hustliangchen/article/details/135531578
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。