【问题标题】:How to work with serialized variables in a Javascript Script-Task in Camunda如何在 Camunda 的 Javascript 脚本任务中使用序列化变量
【发布时间】:2015-10-05 06:56:33
【问题描述】:

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

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,该 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": "简"]], isDeserialized=true, serializationDataFormat=application/x-java-serialized-object, objectTypeName=java.util.ArrayList, serializedValue=X chars] 没有

中的此类函数“大小”

如果ArrayList's reference 说它有sizeadd 两者!怎么回事?

【问题讨论】:

    标签: javascript java camunda script-task


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。您还知道如何在 Javascript 中处理 Variables 类吗?我试过org.camunda.bpm.engine.variable.Variables 但它说找不到类!?我想打电话给org.camunda.bpm.engine.variable.Variables.objectValue(v),但我不能!
    猜你喜欢
    • 2016-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多