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

基于SAP CPI的Groovy脚本:按日期移除同级旧Letter节点

SAP CPI:用Groovy脚本移除同层级下创建日期更早的Letter节点

需求说明

针对每个<JobApplication>节点下的<OfferLetter>容器,仅保留其中<Letter>节点里创建日期最新的条目,移除其余更早的节点。

输入XML

<root>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>699</offerLetterId>
                <createdBy>00004221</createdBy>
                <createDate>2022-09-15T13:20:17.000</createDate>
            </Letter>
            <Letter>
                <offerLetterId>724</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:39.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>723</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:04.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>695</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-03T14:02:37.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
</root>

期望输出XML

<root>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>724</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:39.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>723</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:04.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>695</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-03T14:02:37.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
</root>

Groovy脚本实现

在SAP CPI的Groovy脚本步骤中使用以下代码:

import groovy.xml.XmlParser
import groovy.xml.XmlNodePrinter

// 读取输入XML
def inputXml = message.getBody(String.class)
def parser = new XmlParser()
def rootNode = parser.parseText(inputXml)

// 遍历每个JobApplication节点
rootNode.JobApplication.each { jobApp ->
    def offerLetter = jobApp.OfferLetter[0]
    def letters = offerLetter.Letter
    
    if (letters.size() > 1) {
        // 将Letter节点按createDate降序排序,取第一个为最新节点
        def sortedLetters = letters.sort { a, b ->
            Date.parse("yyyy-MM-dd'T'HH:mm:ss.SSS", b.createDate.text()) <=> 
            Date.parse("yyyy-MM-dd'T'HH:mm:ss.SSS", a.createDate.text())
        }
        
        // 移除除最新节点外的所有Letter节点
        sortedLetters.drop(1).each { it.parent().remove(it) }
    }
}

// 格式化输出XML
def writer = new StringWriter()
def printer = new XmlNodePrinter(new PrintWriter(writer))
printer.preserveWhitespace = true
printer.print(rootNode)

// 设置输出消息
message.setBody(writer.toString())

脚本说明

  • 解析输入XML并获取根节点;
  • 遍历每个<JobApplication>,定位其下的<OfferLetter>容器;
  • 当容器内存在多个<Letter>时,按createDate降序排序,仅保留最新的节点,移除其余节点;
  • 格式化XML输出,确保格式与输入一致。

内容的提问来源于stack exchange,提问作者Jorge Ramón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:50:26