REST适配器中的XPath表达式

2020-09-08 03:56发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在尝试在XPath Expression中使用子字符串函数进行模式替换。

根据下面的wiki,我们可以在"接收方确定"条件编辑器中使用它

https://wiki.scn.sap.com/wiki/display/XI/Xpath+Condition+in+Receiver+Determination

但是当我尝试在使用XPath Expression的Receiver REST适配器中将其应用于模式替换时,它无法正常工作,请为我提供指导。

我尝试使用XPath表达式使用模式替换为我的REST URL动态添加查询字符串

预期的URL:http://host:port/service/path?sid = {SID}&recipient = {RCVPRN}&sender = {SNDPRN}

我尝试了几种方法,但是都没有给出预期的结果。

/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN,1,3)]

/INVOIC02/IDOC/EDI_DC40 [substring(//SNDPRN,1,3)]

/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN,1,3)]/SNDPRN

我尝试给substring函数提供1个参数,以检查是否可以在xpath中应用该函数,然后出现以下异常。

XPath:/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN)]

"/img/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN)]"; 消息:" javax.xml.transform.TransformerException:com.sun.org.apache.xpath.internal.functions.FuncSubstring仅允许2或3个参数-com.sun.org.apache.xpath.internal.functions.FuncSubstring仅允许 2或3个参数"

这意味着我们可以应用此子字符串函数,但不确定如何将xpath作为参数(在我的情况下为SNDPRN)传递给子字符串函数

注意:我不能在此处使用映射

请对此进行指导。

一如既往

纳吉什

rest-poc-xpath-with-substring.jpg (69.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在尝试在XPath Expression中使用子字符串函数进行模式替换。

根据下面的wiki,我们可以在"接收方确定"条件编辑器中使用它

https://wiki.scn.sap.com/wiki/display/XI/Xpath+Condition+in+Receiver+Determination

但是当我尝试在使用XPath Expression的Receiver REST适配器中将其应用于模式替换时,它无法正常工作,请为我提供指导。

我尝试使用XPath表达式使用模式替换为我的REST URL动态添加查询字符串

预期的URL:http://host:port/service/path?sid = {SID}&recipient = {RCVPRN}&sender = {SNDPRN}

我尝试了几种方法,但是都没有给出预期的结果。

/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN,1,3)]

/INVOIC02/IDOC/EDI_DC40 [substring(//SNDPRN,1,3)]

/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN,1,3)]/SNDPRN

我尝试给substring函数提供1个参数,以检查是否可以在xpath中应用该函数,然后出现以下异常。

XPath:/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN)]

"/img/INVOIC02/IDOC/EDI_DC40 [substring(SNDPRN)]"; 消息:" javax.xml.transform.TransformerException:com.sun.org.apache.xpath.internal.functions.FuncSubstring仅允许2或3个参数-com.sun.org.apache.xpath.internal.functions.FuncSubstring仅允许 2或3个参数"

这意味着我们可以应用此子字符串函数,但不确定如何将xpath作为参数(在我的情况下为SNDPRN)传递给子字符串函数

注意:我不能在此处使用映射

请对此进行指导。

一如既往

纳吉什

rest-poc-xpath-with-substring.jpg (69.6 kB)
付费偷看设置
发送
6条回答
亦是此间程序员
1楼-- · 2020-09-08 04:42

嗨Nageshwara,

如果您想要SNDPRN的前3个字符,则可以使用以下表达式。

substring(//SNDPRN,1,3)

子字符串(/ZPM_ORDER02/IDOC/EDI_DC40/SNDPRN,1,3)

clever101
2楼-- · 2020-09-08 04:43

Hello Navdeep,

在我使用-substring(//SNDPRN,1,3)时也尝试过,它给出了以下异常

MP:由于原因com.sap.aii.adapter.rest.ejb.parse.InvalidXPathExpression捕获的异常:无效的XPath表达式" substring(//SNDPRN,1,3)"; 消息:" com.sun.org.apache.xpath.internal.XPathException:无法将#STRING转换为NodeList!-无法将#STRING转换为NodeList!"

我认为XPath Expression总是期望以/或//开头的字符。

如果我使用-/INVOIC02/IDOC/EDI_DC40 [substring(//SNDPRN,1,3)]

它通过xpath表达式给出空结果

一如既往

Nagesh

N-Moskvin
3楼-- · 2020-09-08 04:36

嗨NageswaraRao!

是的,它不起作用,因为您通过表达式获得NodeSet。

尝试一下 :

子字符串(/INVOIC02 [1]/IDOC [1]/EDI_DC40 [1]/SNDPRN [1],1、3)

另一种语法(如果您只有一个 消息中的INVOIC02元素):

子字符串(/INVOIC02/IDOC/EDI_DC40/SNDPRN [1],1、3)

关于此,Evgeniy。

nice_wp
4楼-- · 2020-09-08 04:34
有解决方案吗? 我有同样的问题
路亽曱_Ryan
5楼-- · 2020-09-08 04:34

嗨,

关于REST的一件奇怪的事情是,在RECEIVER适配器中,它需要接收方有效负载而不是发送方有效负载,因此请映射 SNDPRN到接收器结构中的一个字段,然后执行xpath。 或转到适配器特定属性(ASMA)。
https: //blogs.sap.com/2014/12/18/pi-rest-adapter-using-dynamic-attributes/

致谢,

Vikas

CJones
6楼-- · 2020-09-08 04:27

尝试此注释:2793544-REST Receiver无法评估

一周热门 更多>