0

考虑有一个像这样的过程变量:

Object type name: java.util.ArrayList
Serialization Data Format: application/x-java-serialized-object
Value: [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"]

我正在尝试在 Script-Task 中编写一个 Javascript,它提取一个变量,如上所示,并使用它。这是我走了多远:

var arr = execution.getVariableTyped("arr", true);

for (var i=0; arr.size(); i++) {
    var item = arr.get(i);
    //Do somthing with `item`
}
//Add an object to the end of the array
arr.add({ "id": 3, "name": "Jack" });

execution.setVariable("arr", arr);

但是当我运行它时,它会引发以下错误:

无法完成任务xxx:无法评估脚本:TypeError:ObjectValue [value = [{“id”:1,“name”:“John”},{“id”:2,“name”:“Jane”]], isDeserialized=true, serializationDataFormat=application/x-java-serialized-object, objectTypeName=java.util.ArrayList, serializedValue=X chars] 在 <eval> 中没有这样的函数“size”

在这种情况下,ArrayList 的参考资料说它有,size而且add两者都有!。这是怎么回事?

4

1 回答 1

2

检查您正在调用的 Camunda API:
VariableScope#getVariableTyped(DelegateExecution 实现 VariableScope)。此方法返回TypedValue的实例。

使用execution.getVariableTyped("arr", true).getValue();execution.getVariable("arr");访问实际的 ArrayList。

于 2015-10-05T07:17:13.383 回答