点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,专家。
包含属性的重复元素的PI/ABAP代理映射-无法处理ABAP中顶级元素的text()内容。
SAP PI版本7.5 sp11。
我们在PI映射和ABAP代理中创建的结果结构方面存在问题。
在我们的消息映射的两侧都需要以下xsd。 我们只是在顶层进行映射,而在PI中测试映射时会遇到所有数据。
当我们生成代理时,它会创建一个表来表示消息元素。
表类型包含关联的属性(规则,严重性,原因和消息),但是关联元素的text()内容无处可去..在PI映射屏幕中,我们看到了文本,但是Proxy无处可寻 去。
一切都可以编译,但是当我们运行代理时,如果元素" Message"中包含任何文本(即其内容或值),则会引发异常–由于不满足Message元素文本的事实 从而使xml格式错误。
请参见下面的示例xml内容:高亮显示的文本导致异常。
作为一种解决方法,我们尝试在图形映射中将顶级" Message"元素映射到其关联的" message" 属性,然后将顶级Message元素的内容设置为null(在 下面的映射中的replacestring函数)。 我们希望将其应用于数组中Message元素的所有出现,但事实并非如此! 这样可以解决该异常,并且结果可以在消息结构表条目的代理和调用程序中看到,但是只有到那时,消息表的首次出现行的message属性中才能看到任何文本- 其余为空。 其他属性值在那里,但消息属性为空白。 因此看来,通过清除(使文本化)映射中的文本,它对于所有后续Message元素仍然保持清除状态。
任何人都可以建议我们如何更改输出XSD,以便Abap将创建正确的结构以允许Message元素的内容(text()),或者可以选择我们需要添加到映射中的内容以确保 相同的过程适用于所有出现的Message,而不仅仅是第一个。 谢谢
正在使用来自输出xsd后期映射的样本(对此生成的代理结果)。 预映射xsd没有message属性,我们希望元素中的文本值内容进入属性message
示例输出XML消息和数据...。突出显示的文本值是导致我们出现问题的原因
<消息部分="完整的RdSAP"规则="从完整的RdSAP数据集中丢失"严重性" 4"原因="缺少">"> 未定义日期区域
<消息部分=" Full RdSAP"规则="从完整的RdSAP数据集中丢失"严重性" 4"原因=" Missing"> 未定义地形类型
<消息部分="完整的RdSAP"规则="从完整的RdSAP数据集中丢失"严重性" 4"原因="缺少">"> 未定义仪表类型
我们什么都不用替换Message元素的值,但这应该是在将元素值移动到属性之后
Abap结构将Message元素转换为表格,并且每个Message元素的text()内容值都没有位置,如果不清除它,则会在代理中收到异常,因为无法处理文本。/p>
消息行类型...
(74.8 kB)
在xml中,您发送消息节点的内容需要定义为xsd:string,在所使用的映射结构中,消息的定义是没有任何类型的,例如表(表中没有任何关联类型),并且 消息是用attriibute定义的。 是吗?
大卫,您好!
请您说明一下流程吗? 您在说什么代币? 您是否需要在请求消息中将其传递给提供者代理,或者在响应消息中从代理取回它? 令牌将在哪里使用?
Evgeniy。
hi Carlos。 传入消息上的XML xsd是REST适配器中从Json消息转换为XML的结果。 然后,我们需要将内容映射到适合abap代理的输出xsd中。 我们试图映射到message属性中的文本是Message元素的内容(当它作为Json进入时是#text)。 我们尝试直接映射消息Element而不进行任何转换,但是内容导致代理中出现问题。 我们将元素定义为xsd中的复杂类型,而不是字符串,因为它具有属性。 我们只希望我们的映射对所有出现的Message元素执行相同的操作,而不仅仅是第一个? 不知道我们是否可以使用基本的映射功能做到这一点,或者是否需要UDF。 您是否建议我们可以在输出端xsd中将Message元素定义为字符串,并且仍然具有关联的属性? 如果可能的话,这将对代理如何生成其结构产生影响吗? 抱歉,如此模糊,但是我们是PI的新手,ABAP代理的新手,XML和Json的新手!!!
嗨,大卫!
您尝试了类似的方法吗?
致谢,Evgeniy。
我相信,这是tl; dr,但是当我正确理解要点时, 代理生成有问题吗? 您可能想查看组件中的最新注释
在支持启动板中使用专家搜索,并将搜索范围限制为SAP_BASIS
干杯
Jens
我们在运行代理时遇到了问题-生成并激活了该代理,但是Message元素内容没有"槽",因为代理为Message生成了一个表(因为它是无界的) ),但没有放置其文本的元素或内容。 因此,当我们运行界面时,Message元素的内容(每个Message元素中的文本)使XML格式错误并引发异常。 因此,我们通过在映射期间将所有"消息元素内容"文本移动到目标上的属性,然后清除了元素文本来解决了这一问题。 但是,它仅适用于第一次出现的Message,所有后续条目的message属性为空。 希望它适用于所有出现的Message。 理想情况下,我们只是将整个xml消息源映射到目标,而不必费心将消息元素移动到message属性并在移动后将其无效,但是由于消息元素条目的内容,似乎无法实现这一目标。
一周热门 更多>