SAP PI消息值列表的映射

时间:2018-11-21 13:23:06

标签: mapping sap esb netweaver

在SAP PI 7.4中,尝试在消息映射中映射某些内容时遇到了一些困难,这似乎很简单。

输入就是这样。

<Employee>
      <ExternalIdList>
          <ExternalId>aaa</ExternalId>
          <ExternalId>bbb</ExternalId>
          <ExternalId>ccc</ExternalId>
      </ExternalIdList>
</Employee>

我需要它来映射到以下结构

<Newobject>
 <ExternalEmployeeList>
  <ExternalEmployee>
   <ExternalId>aaa</ExternalId>
  </ExternalEmployee>
  <ExternalEmployee>
   <ExternalId>bbb</ExternalId>
  </ExternalEmployee>
  <ExternalEmployee>
   <ExternalId>ccc</ExternalId>
  </ExternalEmployee>
 </ExternalEmployeeList>
</Newobject>

在尝试映射时,我将按照以下步骤进行操作:

Employee-> NewObject

ExternalIdList-> ExternalEmployeeList

ExternalId-> ExternalEmployee

ExternalId-> ExternalId

在测试映射时,将创建3个ExternalEmployee节点,但只有第一个节点在ExternalId中包含值'aaa'。其他2个ExternalEmployees没有获得ExternalId:

<Newobject>
 <ExternalEmployeeList>
  <ExternalEmployee>
   <ExternalId>aaa</ExternalId>
  </ExternalEmployee>
  <ExternalEmployee/>
  <ExternalEmployee/>
  </ExternalEmployee>
 </ExternalEmployeeList>
</Newobject>

我已经尝试了很多节点功能或更改了上下文,但是似乎没有任何效果。推荐的解决方案是什么?

也许可以预先添加XSLT映射,以便在输入消息中的ExternalIdList和ExternalId之间插入一个级别?对此似乎很模糊。

预先感谢,欢迎向正确方向提出的每一个提示!

1 个答案:

答案 0 :(得分:0)

问题应该是标记ExternalId中缺少上下文更改。

尝试通过以下方式修复映射:

ExternalEmployee(目标)= ExternalEmployee

ExternalId(目标)= splitByValue(ExternalId)

配置splitByValue,选择“ 每个值”选项

ExternalIDScreenshot

还要确保目标ExternalEmployee出现1..unbounded!

这是结果 Result

最诚挚的问候!