如何更新有效载荷主体中字段的值?

2020-09-04 19:22发布

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

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


尊敬的专家,

我正在寻找一种优雅/高效的方式来更改消息有效内容正文中字段的值。 我可以想象使用一个时髦的脚本或一个内容修饰符来更新集成流中传入消息的单个值,但是我不知道该如何完成,而且我在Google上找不到任何东西(可能我在 缺少正确的搜索标签)。...

使用:我想保持2.0 IFlow的可更新性,因此我可能不会修改主IFlow和Mapping。 字段BRAN1未映射,将被忽略。
在PreExit-IFlow中,将值映射后的字段BRAN1的值存储在Exchange属性/邮件标题中。在后退出IFlow中,我要更新 字段BRAN1,其值存储在Exchange属性/邮件头中。
!! 问题出在这里:我必须使用XSLT-Mapping(也许可以在CPI中利用已部署的值映射?但是我不知道如何执行此操作)
我可以在 图形映射中的常规脚本,但是我不想再使用整个消息的映射过程。

有人知道如何仅更新字段BRAN1的值吗?

预先感谢

坦率

传入消息:

 ...
 
      005  
1234567
-> Z050 <--------
...

...

内容修改器交换属性:
创建名称:" BRAN1_ValueMapped"值:/DEBMAS07/IDOC/E1KNA1M/BRAN1
Groovy脚本/内容修饰符后的
所需消息:

... 005 1234567 -> 0020 <-------- ... ...

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

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


尊敬的专家,

我正在寻找一种优雅/高效的方式来更改消息有效内容正文中字段的值。 我可以想象使用一个时髦的脚本或一个内容修饰符来更新集成流中传入消息的单个值,但是我不知道该如何完成,而且我在Google上找不到任何东西(可能我在 缺少正确的搜索标签)。...

使用:我想保持2.0 IFlow的可更新性,因此我可能不会修改主IFlow和Mapping。 字段BRAN1未映射,将被忽略。
在PreExit-IFlow中,将值映射后的字段BRAN1的值存储在Exchange属性/邮件标题中。在后退出IFlow中,我要更新 字段BRAN1,其值存储在Exchange属性/邮件头中。
!! 问题出在这里:我必须使用XSLT-Mapping(也许可以在CPI中利用已部署的值映射?但是我不知道如何执行此操作)
我可以在 图形映射中的常规脚本,但是我不想再使用整个消息的映射过程。

有人知道如何仅更新字段BRAN1的值吗?

预先感谢

坦率

传入消息:

 ...
 
      005  
1234567
-> Z050 <--------
...

...

内容修改器交换属性:
创建名称:" BRAN1_ValueMapped"值:/DEBMAS07/IDOC/E1KNA1M/BRAN1
Groovy脚本/内容修饰符后的
所需消息:

... 005 1234567 -> 0020 <-------- ... ...
付费偷看设置
发送
4条回答
哎,真难
1楼 · 2020-09-04 19:44.采纳回答

嗨,弗兰克

好问题!

您需要做两件事:

1)从XSLT样式表中访问交换属性。

2)编写样式表,以更新单个元素并逐字复制其他所有内容。

#1的解决方案很简单:添加一个名称与您的交换属性匹配的XSLT参数。 (我们称它为propertyFrank),如下所示:

  

这将使exchange属性的值在 您的样式表为$ propertyFrank。

#2的解决方案稍微复杂一些,但不多。 幸运的是,CPI现在支持XSLT 3.0,并且在XSLT 3.0中,很容易编写身份转换,即样式表,将输入文档原样复制到输出文档。 看起来像这样:

 <?xml version =" 1.0" encoding =" UTF-8"?>
 
     
  

现在,要解决第2个问题,我们只需要添加一个与特定元素匹配的模板(您想要更新)即可更改该元素的内容。 看起来像这样:

 
     
         
     
  

结合以上所有内容,我们得出以下结果:

 <?xml version =" 1.0" encoding =" UTF-8"?>
 
     
     
     
         
             
         
     
  

玩得开心,让我知道它的工作原理!

问候,

Morten

悻福寶寶
2楼-- · 2020-09-04 19:49
< p>嗨弗兰克

结果如何?

问候,

莫尔滕

何必丶何苦呢
3楼-- · 2020-09-04 19:50

嗨弗兰克

事实上,我之前在以下文章中写过关于使用Groovy更新XML有效内容的字段内容的内容-使用Groovy脚本轻松解析XML (请参阅方案2)

由于我们有一个< a hraf=" https://blogs.sap.com/2019/06/07/i-heart-groovy-mapping/" target =" _ blank">我*心* Groovy映射和我*心* XSLT映射目前正在进行中,我

导入com.sap.gateway.ip.core.customdev.util.Message,将为您提供解决方案的Groovy替代方案。
 导入groovy.xml.XmlUtil

 消息processData(消息){
     读者reader = message.getBody(Reader)
     地图属性= message.getProperties()

     def DEBMAS07 =新的XmlParser()。parse(阅读器)
     DEBMAS07.IDOC.E1KNA1M.BRAN1 [0] .value = properties.get('propertyFrank')

     message.setBody(XmlUtil.serialize(DEBMAS07))
     返回讯息
 } 

此恕我直言的好处是,您可以可视化要更新的XML节点的完整路径。

另一个好处是,您可以在本地测试所有这些(检查 在IDE中删除我的其他有关Groovy测试的博客文章)-甚至访问从测试脚本注入的标头/属性。

现在,您选择太多了,必须决定使用蓝色药丸还是红色药丸! 玩得开心!

英瑞

ZJXianG
4楼-- · 2020-09-04 19:48

你好弗兰克,

请关注此博客以解决您的查询。 该博客介绍了如何在SCPI中创建值映射,并从groovy脚本中调用该值映射以动态填充值。

https://blogs.sap .com/2018/07/18/dynamic-value-mapping-in-sap-cpi/

一周热门 更多>