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

Camunda中Groovy脚本从数组变量获取最大ProtocolNum对应文档ID问题

解决Camunda Groovy脚本提取最大ProtocolNum对应ID的问题

核心问题排查

  • 变量类型未转换:Camunda的JSON Object变量默认是JsonValue类型,直接遍历会触发类型不匹配,需先转成Groovy可识别的Map/List。
  • 键名匹配错误:你提到的键是protocol num,若代码里误用驼峰式ProtocolNum,会导致取不到值,进而引发后续类型异常。
  • 数值类型不兼容:如果protocol num是字符串格式的数字,直接比较会按字符串规则排序(比如"10"<"9"),必须先转成数值类型。

正确Groovy脚本示例

假设输入变量名为externalTaskOutput(JSON结构示例:{ "documents": [{"id": "doc1", "protocol num": "123"}, {"id": "doc2", "protocol num": "456"}] }):

// 1. 将Camunda JSON变量转为Groovy可操作的Map
def outputMap = externalTaskOutput.getValue()

// 2. 取出documents数组,空数组兜底
def documents = outputMap.documents ?: []

// 3. 过滤有效文档,转换protocol num为数值类型
def validDocs = documents.findAll { doc ->
    doc.containsKey("protocol num") && doc.id != null
}.collect { doc ->
    // 若为浮点数则改用toDouble()
    [id: doc.id, protocolNum: doc["protocol num"].toInteger()]
}

// 4. 找出protocolNum最大的文档,提取id
def maxDoc = validDocs.max { it.protocolNum }
def targetId = maxDoc ? maxDoc.id : null

// 5. 将结果存入Camunda变量
execution.setVariable("maxProtocolDocId", targetId)

关键注意事项

  • 必须调用getValue()将JsonValue转为Groovy Map,避免类型不匹配。
  • 键名严格一致:JSON里是protocol num,脚本里必须用doc["protocol num"]访问,不能用点语法。
  • 异常防护:加入空数组兜底和findAll过滤,防止字段缺失或数组为空导致空指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:53:15