考虑使用这样的过程变量:
Object type name: java.util.ArrayList
Serialization Data Format: application/x-java-serialized-object
Value: [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"]
我试图在一个脚本任务中编写一个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、"名称":"约翰"},{" id ": 2,"名字":"简"]],isDeserialized = true,serializationDataFormat =应用程序/x-java-serialized-object,objectTypeName = java.util。ArrayList, serializedValue=X charars]没有
在这种情况下,ArrayList的引用说它有size
和add
!这是怎么呢
检查您正在调用的Camunda API:
getVariableTyped (DelegateExecution实现VariableScope)。这个方法返回TypedValue的一个实例。
使用execution.getVariableTyped("arr", true).getValue();
或execution.getVariable("arr");
访问实际的ArrayList