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

2020-08-24 04:41发布

         点击此处--->   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)

         点击此处--->   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条回答
SAP小黑
1楼-- · 2020-08-24 05:40

在xml中,您发送消息节点的内容需要定义为xsd:string,在所使用的映射结构中,消息的定义是没有任何类型的,例如表(表中没有任何关联类型),并且 消息是用attriibute定义的。 是吗?

蓋茨
2楼-- · 2020-08-24 05:24

大卫,您好!

请您说明一下流程吗? 您在说什么代币? 您是否需要在请求消息中将其传递给提供者代理,或者在响应消息中从代理取回它? 令牌将在哪里使用?

Evgeniy。

黑丝骑士
3楼-- · 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的新手!!!

大道至简
4楼-- · 2020-08-24 05:44

嗨,大卫!

您尝试了类似的方法吗?

 
       
          
             
                
                   
                      
                   
                
             
          
       
     

致谢,Evgeniy。

me_for_i
5楼-- · 2020-08-24 05:20

我相信,这是tl; dr,但是当我正确理解要点时, 代理生成有问题吗? 您可能想查看组件中的最新注释

  • BC-DWB-PRX
  • BC-DWB-WS-ABA *
  • 可能其他 也

在支持启动板中使用专家搜索,并将搜索范围限制为SAP_BASIS

干杯

Jens

风早神人
6楼-- · 2020-08-24 05:35

我们在运行代理时遇到了问题-生成并激活了该代理,但是Message元素内容没有"槽",因为代理为Message生成了一个表(因为它是无界的) ),但没有放置其文本的元素或内容。 因此,当我们运行界面时,Message元素的内容(每个Message元素中的文本)使XML格式错误并引发异常。 因此,我们通过在映射期间将所有"消息元素内容"文本移动到目标上的属性,然后清除了元素文本来解决了这一问题。 但是,它仅适用于第一次出现的Message,所有后续条目的message属性为空。 希望它适用于所有出现的Message。 理想情况下,我们只是将整个xml消息源映射到目标,而不必费心将消息元素移动到message属性并在移动后将其无效,但是由于消息元素条目的内容,似乎无法实现这一目标。

一周热门 更多>