You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:54:54