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

在Boomi中使用Groovy 1.5获取上月最后一天时出现var方法报错

错误根因
  • 核心触发原因:Groovy 1.5 不支持 var 类型推断语法,该关键字仅在 Groovy 2.4 及以上版本可用。Groovy 1.5 解析脚本时会将 var dt = new Date() 识别为调用名为 var 的方法并传入 Date 对象,因此触发「无对应方法签名」的报错。
  • 原脚本存在的隐性问题:
    • 日期计算、属性设置逻辑写在 for 循环外部,仅会修改最后一个被处理文档的属性,无法适配 Boomi 批量文档的处理规则
    • 直接将 Date 对象存入 Boomi 自定义动态属性,Boomi 侧无法识别序列化内容,必须转为指定格式的字符串
    • 原有 setHours(-1) 的计算逻辑依赖运行环境时区,夏令时、极端时区偏移场景下结果会出现偏差
修复方案

1. 语法适配

移除 var 声明,Groovy 1.5 中使用 def 或直接省略声明关键字即可定义变量,可直接解决当前的报错。

2. 运行逻辑修正

  • 将日期计算、属性设置逻辑移到 for 循环内部,确保遍历所有待处理文档
  • 改用 Calendar 类计算上月最后一天,避免时区边界问题,同时将日期格式化为 Boomi 可识别的字符串格式

可直接运行的完整脚本

import java.util.Properties;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

for( int i = 0; i < dataContext.getDataCount(); i++ ) {
    InputStream is = dataContext.getStream(i);
    Properties props = dataContext.getProperties(i);

    // 计算上月最后一天
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DAY_OF_MONTH, 1);
    cal.add(Calendar.MONTH, -1);
    Date lastDayOfLastMonth = cal.getTime();

    // 按Boomi常用格式格式化日期,可按需调整格式串(如"yyyy-MM-dd HH:mm:ss")
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String formattedDate = sdf.format(lastDayOfLastMonth);

    props.setProperty("document.dynamic.userdefined.StartDate", formattedDate);

    dataContext.storeStream(is, props);
}

若需保留原脚本的日期计算逻辑,可将核心计算部分替换为如下写法,其余逻辑保持不变:

def dt = new Date(); 
dt.setDate(1);  
dt.setHours(-1); 
props.setProperty("document.dynamic.userdefined.StartDate", new SimpleDateFormat("yyyy-MM-dd").format(dt));

内容的提问来源于stack exchange,提问作者Dorbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 14:27:04