SAP Cloud Platform集成:使用参数调用Groovy脚本

2020-08-22 19:34发布

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

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


你好

我正在使用groovy脚本登录不同的步骤。 由于我不想重复复制脚本并只更改两个值,因此我认为应该可以使用参数。

这是我要使用的脚本:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 def消息logpayload(消息消息,字符串nameOfAttachment,字符串mimeType){
     def有效负载= message.getBody(String.class);
     def messageLog = messageLogFactory.getMessageLog(message);
     messageLog.setStringProperty(" Logging",nameOfAttachment);
     messageLog.addAttachmentAsString(nameOfAttachment,payload,mimeType);
     返回消息;
 }
 

我这样配置它:

但是,当我运行它时,出现以下异常。 有谁知道我该如何解决这个问题?

 java.lang.NoSuchMethodException:方法的无签名:org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.logpayload(message," FlatFile.txt"," text/plain")()适用于参数类型:(com.sap。  gateway.ip.core.customdev.processor.MessageImpl)值:[com.sap.gateway.ip.core.customdev.processor.MessageImpl@737f25ed]
 

谢谢

弗洛里安

(7.2 kB)

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

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


你好

我正在使用groovy脚本登录不同的步骤。 由于我不想重复复制脚本并只更改两个值,因此我认为应该可以使用参数。

这是我要使用的脚本:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 def消息logpayload(消息消息,字符串nameOfAttachment,字符串mimeType){
     def有效负载= message.getBody(String.class);
     def messageLog = messageLogFactory.getMessageLog(message);
     messageLog.setStringProperty(" Logging",nameOfAttachment);
     messageLog.addAttachmentAsString(nameOfAttachment,payload,mimeType);
     返回消息;
 }
 

我这样配置它:

但是,当我运行它时,出现以下异常。 有谁知道我该如何解决这个问题?

 java.lang.NoSuchMethodException:方法的无签名:org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.logpayload(message," FlatFile.txt"," text/plain")()适用于参数类型:(com.sap。  gateway.ip.core.customdev.processor.MessageImpl)值:[com.sap.gateway.ip.core.customdev.processor.MessageImpl@737f25ed]
 

谢谢

弗洛里安

(7.2 kB)
付费偷看设置
发送
7条回答
xfwsx85
1楼 · 2020-08-22 20:02.采纳回答

弗洛里安嗨

CPI希望您的脚本步骤功能的签名为:

消息functionName(消息消息)

但是,您可以根据需要向脚本文件中添加任意数量的具有任意签名的函数。

因此,您可以将logPayload方法更改为:

 def void logPayload(消息消息,字符串nameOfAttachment,字符串mimeType)

,然后添加任意数量的调用它的函数,例如:

 def消息logInitialXml(消息){
    logPayload(消息,'initialXML.xml','application/xml')
    message//在Groovy中,这等效于返回消息
 } 

这将删除重复的代码。

让我知道它是如何工作的。

此致

Morten

野沐沐
2楼-- · 2020-08-22 19:48

嗨弗洛里安。 很高兴您可以使用它。 至于空白,请使用

 def logPayload(消息消息,字符串nameOfAttachment,字符串mimeType)
相反,它应该起作用。 这需要更改返回语句的代码。

或者,您可以根据需要保留它。

此致

Morten

能不能别闹
3楼-- · 2020-08-22 20:00

Hey Morten,

非常感谢。 使用void函数对我不起作用。 这就是代码对我的工作方式。

导入com.sap.gateway.ip.core.customdev.util.Message
 导入java.util.HashMap
 def消息logInitialFlatFile(消息){
    消息= logPayload(消息," initialFlatFile.txt","文本/纯文本")
 }

 def Message logInitialXml(Message message){
    消息= logPayload(消息," initialXML.xml","应用程序/xml")
 }

 def消息logPayload(消息消息,字符串nameOfAttachment,字符串mimeType){
     def有效负载= message.getBody(String.class);
     def messageLog = messageLogFactory.getMessageLog(message)
     messageLog.setStringProperty(" Logging",nameOfAttachment)
     messageLog.addAttachmentAsString(nameOfAttachment,有效负载,mimeType)
     返回讯息
 } 
路亽曱_Ryan
4楼-- · 2020-08-22 20:03

此。

因此,推测一下,在CPI iFlow的Groovy脚本中用户定义的函数:

1。 必须只包含一个参数,并且该消息是消息-因此,我们只需要指定脚本功能名称即可,例如"正确"屏幕截图中显示的Bharath。

2。 processData-在创建Groovy脚本时默认显示,并非必须实施。

Morten Wittrock -如果这些假设正确,请发表评论。

当学会了学习
5楼-- · 2020-08-22 19:55

嗨弗洛里安,


另一种解决方案是使用属性或标头变量。 您可以使用

访问它们
 map = message.getHeaders();
 myVar = map.get(" variableName"); 

 map = message.getProperties();
 myVar = map.get(" variableName"); 

可以是另一种解决方案,它可能具有更高的灵活性,但添加了更多的cpi特定代码。

此致

Dominic

浮生未央
6楼-- · 2020-08-22 20:08

感谢Morten提供此解决方案,仅为了完成此回答,以使其他读者能够在配置脚本时尝试弄清楚如何使用"脚本功能"功能 "处理"选项卡下的函数名称,仅提及脚本名称(不需要括号或传递" message"参数,CPI隐含地理解为只能通过脚本函数传递" message"参数),以下屏幕截图 显示不正确和正确的方法(必须通过很少的尝试和错误来解决,因为我找不到使用此功能的示例的任何文档)。

错误:

正确:

ZJXianG
7楼-- · 2020-08-22 20:07

Dominic的职位就是那个!

谢谢

Matthias

一周热门 更多>