PI/ABAP无边界元素的代理映射处理ABAP中元素的text()值contentof。

2020-08-24 04:41发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 嗨,专家。 ...

         点击此处--->   EasySAP.com群内免费提供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"原因="缺少">"> 未定义仪表类型

0.5135

我们什么都不用替换Message元素的值,但这应该是在将元素值移动到属性之后

Abap结构将Message元素转换为表格,并且每个Message元素的text()内容值都没有位置,如果不清除它,则会在代理中收到异常,因为无法处理文本。/p>

消息行类型...

(74.8 kB)
11条回答
黑丝骑士
2020-08-24 05:41

hi Carlos。 传入消息上的XML xsd是REST适配器中从Json消息转换为XML的结果。 然后,我们需要将内容映射到适合abap代理的输出xsd中。 我们试图映射到message属性中的文本是Message元素的内容(当它作为Json进入时是#text)。 我们尝试直接映射消息Element而不进行任何转换,但是内容导致代理中出现问题。 我们将元素定义为xsd中的复杂类型,而不是字符串,因为它具有属性。 我们只希望我们的映射对所有出现的Message元素执行相同的操作,而不仅仅是第一个? 不知道我们是否可以使用基本的映射功能做到这一点,或者是否需要UDF。 您是否建议我们可以在输出端xsd中将Message元素定义为字符串,并且仍然具有关联的属性? 如果可能的话,这将对代理如何生成其结构产生影响吗? 抱歉,如此模糊,但是我们是PI的新手,ABAP代理的新手,XML和Json的新手!!!

一周热门 更多>