SAP CPI中基于日期差删除XML节点的Groovy脚本失效求助
问题:SAP CPI Groovy脚本未按预期过滤XML节点
需求:比较日期差,若超过指定天数则丢弃对应XML节点以进行后续处理。在SAP CPI集成工具中编写了对应的Groovy脚本,但脚本未生效——无报错但输出与输入完全一致。
预期结果:第一个Row节点日期差为57天(不大于60),应被移除;第二个Row节点日期差为423天(大于60),应保留在输出中。
参数
interfaceLastRunTime = 2024-06-01T00:00:00 effDateDiff = 60 ManualRun= Yes golive_date = Manual_Delta_LSRD = 2024-06-01T00:00:00 end_dt = 2024-07-31T00:00:00
Groovy脚本
import com.sap.gateway.ip.core.customdev.util.Message; import java.util.HashMap; import groovy.util.XmlSlurper; import groovy.xml.MarkupBuilder; import groovy.xml.XmlUtil; import java.util.Date; import java.text.SimpleDateFormat; import java.util.Calendar; import groovy.time.TimeCategory; import java.util.GregorianCalendar; def Message processData(Message message) { def body = message.getBody(java.io.Reader); def payload = new XmlSlurper().parse(body); map = message.getProperties(); def lsrd = map.get("interfaceLastRunTime"); int effDateDiff = map.get("effDateDiff").toInteger(); def manual_run = map.get("ManualRun"); golive_date = map.get("golive_date"); Manual_Delta_LSRD = map.get("Manual_Delta_LSRD"); end_dt = map.get("end_dt"); if(lsrd == null || lsrd == "") { if(Manual_Delta_LSRD == null || Manual_Delta_LSRD == "") { lsrd = golive_date; } lsrd = Manual_Delta_LSRD; } lsrd = lsrd.substring(0, 19); SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); SimpleDateFormat sdtf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); payload.Row.each {r -> def pid = r.PID.text(); def jobinfo_stdt = r.jobinfo_stdt.text() if(jobinfo_stdt != null && jobinfo_stdt != "") { Date new_jobinfo_stdt = sdf.parse(jobinfo_stdt); Date new_LSRD = sdtf.parse(lsrd); int dateDiffInDays = new_LSRD - new_jobinfo_stdt; dateDiffInDays=dateDiffInDays.toInteger()+1 println dateDiffInDays println effDateDiff if(dateDiffInDays >= effDateDiff ) { r.replaceNode{} //message.setBody(dateDiffInDays.toString()) } } } message.setBody(XmlUtil.serialize(payload)); return message; }
XML输入
<?xml version="1.0" encoding="UTF-8"?> <Records> <Row> <ACTION>CHANGE</ACTION> <PID>M123456</PID> <Last_Name/> <Last_Name_previous/> <First_Name/> <First_Name_previous/> <salutation/> <Gender/> <jobinfo_stdt>06042024</jobinfo_stdt> <jobinfo_stdt_previous/> <event>5</event> <event_previous/> <emplStatus>T</emplStatus> <FullPartTimeInd>true</FullPartTimeInd> <Permanent_Temporary>R</Permanent_Temporary> <recurring> <recurring_stdt>07052024</recurring_stdt> <recurring_value>1234</recurring_value> <recurring_value_previous/> <recurring_code>1111</recurring_code> </recurring> <recurring> <recurring_stdt>06042024</recurring_stdt> <recurring_value>42123</recurring_value> <recurring_value_previous/> <recurring_code>2222</recurring_code> </recurring> </Row> <Row> <ACTION>CHANGE</ACTION> <PID>M654321</PID> <Last_Name/> <Last_Name_previous/> <First_Name/> <First_Name_previous/> <salutation/> <Gender/> <jobinfo_stdt>07042023</jobinfo_stdt> <jobinfo_stdt_previous/> <event>5</event> <event_previous/> <emplStatus>T</emplStatus> <FullPartTimeInd>true</FullPartTimeInd> <Permanent_Temporary>R</Permanent_Temporary> <recurring> <recurring_stdt>07052024</recurring_stdt> <recurring_value>1234</recurring_value> <recurring_value_previous/> <recurring_code>1111</recurring_code> </recurring> <recurring> <recurring_stdt>06042024</recurring_stdt> <recurring_value>42123</recurring_value> <recurring_value_previous/> <recurring_code>2222</recurring_code> </recurring> </Row> </Records>
恳请各位提供帮助或建议。
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

