在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
相关产品推荐
相关产品推荐

