SAP CPI Groovy脚本可根据传入的ECC有效负载来复制和创建字段

2020-08-23 06:05发布

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

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


嗨,

我需要使用以下方法更改ECC(SAP Business Suite中的复制注册产品)的传入负载:

1。检查并确认以下语言的设备描述是否存在:DE,EN,IT,ES,FR,CN,KR,JP。

2。基于#1,创建该列表中所有缺少的语言的记录。

3。将EN描述复制到所有其他语言。

我尝试使用可用的映射功能,但无法实现。

为了在8个E101COD_S_EQUI_DESCR和所有SPRAS_ISO =='EN'的同一个EQKTX上创建一个新的有效负载,在映射之前,我可能需要一个普通的脚本。

任何人都可以帮忙吗?

谢谢

有效载荷示例(三种语言):

COD_S_EQUI_DESCR

D

Exactive Plus EMR

X

EXACTIVE PLUS EMR

DE

COD_S_EQUI_DESCR

E

Exactive Plus EMR.EN

EXACTIVE PLUS EMR.EN

EN

COD_S_EQUI_DESCR

S

测试应覆盖ES

应该覆盖ES

ES

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

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


嗨,

我需要使用以下方法更改ECC(SAP Business Suite中的复制注册产品)的传入负载:

1。检查并确认以下语言的设备描述是否存在:DE,EN,IT,ES,FR,CN,KR,JP。

2。基于#1,创建该列表中所有缺少的语言的记录。

3。将EN描述复制到所有其他语言。

我尝试使用可用的映射功能,但无法实现。

为了在8个E101COD_S_EQUI_DESCR和所有SPRAS_ISO =='EN'的同一个EQKTX上创建一个新的有效负载,在映射之前,我可能需要一个普通的脚本。

任何人都可以帮忙吗?

谢谢

有效载荷示例(三种语言):

COD_S_EQUI_DESCR

D

Exactive Plus EMR

X

EXACTIVE PLUS EMR

DE

COD_S_EQUI_DESCR

E

Exactive Plus EMR.EN

EXACTIVE PLUS EMR.EN

EN

COD_S_EQUI_DESCR

S

测试应覆盖ES

应该覆盖ES

ES

付费偷看设置
发送
4条回答
Alawn_Xu
1楼-- · 2020-08-23 06:19

这可以用Groovy脚本轻松完成。 首先遍历所有节点,然后检查是否从所需语言列表中删除每种找到的语言。 之后,循环遍历其余语言,并为每种语言复制和修改EN节点。

 def xml =""" 
   
    COD_S_EQUI_DESCR 
    D 
    Exactive Plus EMR 
    X 
    EXACTIVE PLUS EMR 
    DE 
   
   
    COD_S_EQUI_DESCR 
    E 
    Exactive Plus EMR.EN 
    EXACTIVE PLUS EMR.EN 
    EN 
   
   
    COD_S_EQUI_DESCR 
    S 
   测试应覆盖ES 
   应该覆盖ES 
    ES 
   
 """

 def lngList = ['DE','EN','IT','ES','FR','CN','KR','JP']
 def root = new XmlSlurper()。parseText(xml)
 def enNode = root。'**'。find {节点-> node.name()=='E101COD_S_EQUI_DESCR'&& node.SPRAS_ISO.text()=='EN'}
 root.E101COD_S_EQUI_DESCR。每个{节点->
  //从"所需"列表中删除现有语言
   lngList.remove(node.SPRAS_ISO.text())
   如果(node.SPRAS_ISO.text()!=" EN"){
     node.EQKTX = enNode.EQKTX.text()
     node.EQKTU = enNode.EQKTU.text()
   }
 }

//为每种需要的语言添加节点
 lngList.each {lng->
   def newNode =新的XmlSlurper()。parseText(groovy.xml.XmlUtil.serialize(enNode))
  //您可能也必须在这里设置SPRAS!
   newNode.SPRAS_ISO = lng
   root.appendNode(newNode)
 }
 xml = groovy.xml.XmlUtil.serialize(root)

//调试输出
 println(xml)
 

您可以在Groovy控制台中尝试上面的代码(单击"执行脚本"以查看结果): https://groovyconsole.appspot.com/edit/5168403044106240

半个程序猿
2楼-- · 2020-08-23 06:34

嗨,凯奥

我更新到上面的脚本。 请在 https://groovyconsole.appspot.com/edit/5168403044106240

上检查结果 注意代码注释。 您可能已经忘记了覆盖SPRAS字段的要求。 ;-)

悻福寶寶
3楼-- · 2020-08-23 06:27

Hello Raffael,

谢谢您的帮助。

由于这是来自ERP的消息要映射,因此我对脚本进行了一些更改(请参见下文),以使其正常运行。 但是,我仍然有一个问题(请参阅随附的映射模拟):创建了新的节点,但是它们并没有取代原始节点,它们位于下方。 结果,映射仍仅采用原始段。

有什么想法可以解决这个问题吗?

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.xml.XmlUtil;
 导入groovy.xml.StreamingMarkupBuilder;
 导入groovy.xml。*;


 def消息processData(消息消息){
 def主体= message.getBody();
 def lngList = ['DE','EN','IT','ES','FR','CN','KR','JP']
 def root = new XmlSlurper()。parseText(body)
 root.E101COD_S_EQUI_DESCR。每个{节点->
//从"所需"列表中删除现有语言
 lngList.remove(node.SPRAS_ISO.text())
 }


//为每种需要的语言添加节点
 lngList.each {lng->
 def enNode = root。'**'。find {节点-> node.name()=='E101COD_S_EQUI_DESCR'&& node.SPRAS_ISO.text()=='EN'}
 def newNode =新的XmlSlurper()。parseText(groovy.xml.XmlUtil.serialize(enNode))
 newNode.SPRAS_ISO = lng
 root.appendNode(newNode)
 }
//在XML文件上坚持更改
 xml = groovy.xml.XmlUtil.serialize(root);
 message.setBody(xml);
 返回消息;
//调试输出
//println(xml)
 }
 
木偶小白
4楼-- · 2020-08-23 06:34

再次感谢,拉斐尔·赫尔曼(Raffael Herrmann)

我最终使用XSLT而不是groovy脚本进行结果映射。

一周热门 更多>