2020-08-31 21:02发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我需要过滤从成功因素获得的有效负载中的记录。
在某些情况下,我必须删除一条记录并将其附加到文件末尾。
请让我知道如何在SAP CPI Integration流中实现这一目标。
此致
Shruthi
Hello Shruthi,
下面的解决方案应该可以工作(在下面的示例中,我要删除员工ID为E4的记录)
输入XML:
<记录> E1 BLR Sriprsad <姓氏> Bhat Shivaram sri@test.com 记录> <记录> E2 GGN Praveen R T praveen@test.com 记录> <记录> E3 DEL Rahul <姓氏>辛格姓氏> Markand rahul@test.com 记录> <记录> E4 CHN Marko <姓氏> Chacko 姓氏> 凯尔 Marko@test.com 记录> 根>
脚本:
导入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 list =新的XmlParser()。parseText(body) def nodeToDel = list.Record.find {it.EmployeeID.text()=='E4'} def父= nodeToDel.parent() parent.remove(nodeToDel) def valid_data = XmlUtil.serialize(列表) def Deleted_data = XmlUtil.serialize(nodeToDel); message.setProperty(" deleted_records",Deleted_data); message.setBody(valid_data); 返回消息; }
输出XML(有效记录):
<?xml version =" 1.0" encoding =" UTF-8"?> <根> <记录> E1 BLR Sriprsad Bhat Shivaram sri@test.com 记录> <记录> E2 GGN Praveen R T praveen@test.com 记录> <记录> E3 DEL Rahul <姓氏>辛格姓氏> Markand rahul@test.com 记录> 根>
输出XML(已删除的节点):
已删除的节点数据将存储在属性:$ {property.deleted_records}中,可以根据需要在以后的时间点进行检索
<?xml版本=" 1.0"编码=" UTF-8"?> <记录> E4 CHN Marko <姓氏> Chacko 姓氏> 凯尔 Marko@test.com 记录>
问候,
Sriprasad Shivaram Bhat
...,请注意employeeID字符串中的其他前导空格!
你好Shruthi,
能否请您共享一些示例XML,以及您希望在什么基础上删除节点。还要让我知道您要在对有效值进行最终转换后合并两个记录 记录?
嗨,Sirprasad,
从SF系统中获取数据后,我将使用XSLT映射将其转换为xml。在XSLT映射之后,我将尝试使用消息映射将其转换为预期的输出格式。
数据格式如下
<位置名称> -------
我想解析该xml并检查一个员工ID。必须删除该记录并追加到文件底部。
在消息映射步骤之后,我尝试在Groovy脚本中执行此操作。
导入com.sap.gateway.ip.core.customdev.util.Message;
导入groovy.xml.XmlUtil;
导入groovy.xml.StreamingMarkupBuilder;
导入groovy.xml。*;
def消息processData(消息消息){
def body = message.getBody(java.lang.String)as String;
xml =新的XmlParser()。parseText(body)
def record = xml.depthFirst()。find {r-> r.EmployeeID ==" 123456"
record.replaceNode {}
xml.appendNode {记录}
message.setBody(XmlUtil.serialize(xml));
返回消息; }
当我尝试替换节点时,我得到了一个空指针异常。
请帮助。
您好Shruthi
replaceNode需要一个新节点,该节点用于替换您要对其应用的节点。 我认为您打算改用"删除"方法。 您必须在要删除的节点的父节点上调用它。 示例(我尚未在您的代码中尝试过):
def父= record.parent() parent.remove(记录)
最多设置5个标签!
Hello Shruthi,
下面的解决方案应该可以工作(在下面的示例中,我要删除员工ID为E4的记录)
输入XML:
脚本:
输出XML(有效记录):
输出XML(已删除的节点):
已删除的节点数据将存储在属性:$ {property.deleted_records}中,可以根据需要在以后的时间点进行检索
问候,
Sriprasad Shivaram Bhat
...,请注意employeeID字符串中的其他前导空格!
# p#你好Shruthi,
能否请您共享一些示例XML,以及您希望在什么基础上删除节点。还要让我知道您要在对有效值进行最终转换后合并两个记录 记录?
问候,
Sriprasad Shivaram Bhat
嗨,Sirprasad,
从SF系统中获取数据后,我将使用XSLT映射将其转换为xml。在XSLT映射之后,我将尝试使用消息映射将其转换为预期的输出格式。
数据格式如下
我想解析该xml并检查一个员工ID。必须删除该记录并追加到文件底部。
在消息映射步骤之后,我尝试在Groovy脚本中执行此操作。
导入com.sap.gateway.ip.core.customdev.util.Message;
导入groovy.xml.XmlUtil;
导入groovy.xml.StreamingMarkupBuilder;
导入groovy.xml。*;
def消息processData(消息消息){
def body = message.getBody(java.lang.String)as String;
xml =新的XmlParser()。parseText(body)
def record = xml.depthFirst()。find {r-> r.EmployeeID ==" 123456"
record.replaceNode {}
xml.appendNode {记录}
message.setBody(XmlUtil.serialize(xml));
返回消息; }
当我尝试替换节点时,我得到了一个空指针异常。
请帮助。
您好Shruthi
replaceNode需要一个新节点,该节点用于替换您要对其应用的节点。 我认为您打算改用"删除"方法。 您必须在要删除的节点的父节点上调用它。 示例(我尚未在您的代码中尝试过):
一周热门 更多>