Camunda External Tasks を使用して、ExternalTaskHandler から独自のハンドラーを実装していますが、次のような変数を取得したい場合:
HashMap map = externalTask.getVariable("PROCVARS");
エラーを受け取りました:
org.camunda.bpm.client.exception.ValueMapperException: TASK/CLIENT-01024 Cannot find serializer for value 'rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAAFdAAabmF0dXJhbF9wYXRlcm5hbF9sYXN0X25hbWV0AARNb3JhdAAPcGVyc29uX2xlZ2FsX2lkdAAFMTIzNDV0AApyZXF1ZXN0X2lkdAABNXQAEm5hdHVyYWxfZmlyc3RfbmFtZXQACUNocmlzdGlhbnQAEXBlcnNvbl9sZWdhbF90eXBldAABQ3g='
at org.camunda.bpm.client.impl.ExternalTaskClientLogger.valueMapperExceptionDueToSerializerNotFoundForTypedValueField(ExternalTaskClientLogger.java:183) ~[?:?]
at org.camunda.bpm.client.variable.impl.DefaultValueMappers.findMapperForTypedValueField(DefaultValueMappers.java:78) ~[?:?]
at org.camunda.bpm.client.variable.impl.VariableValue.getSerializer(VariableValue.java:73) ~[?:?]
at org.camunda.bpm.client.variable.impl.VariableValue.getTypedValue(VariableValue.java:58) ~[?:?]
at org.camunda.bpm.client.task.impl.ExternalTaskImpl.getVariableTyped(ExternalTaskImpl.java:271) ~[?:?]
at org.camunda.bpm.client.task.impl.ExternalTaskImpl.getVariableTyped(ExternalTaskImpl.java:260) ~[?:?]
at com.fisa.bpm.handler.ScheduleHandler.convertTo(ScheduleHandler.java:40) ~[?:?]
at com.fisa.bpm.handler.ScheduleHandler.execute(ScheduleHandler.java:26) ~[?:?]
at org.camunda.bpm.client.topic.impl.TopicSubscriptionManager.handleExternalTask(TopicSubscriptionManager.java:143) ~[?:?]
at org.camunda.bpm.client.topic.impl.TopicSubscriptionManager.lambda$acquire$0(TopicSubscriptionManager.java:102) ~[?:?]
at java.util.Arrays$ArrayList.forEach(Arrays.java:3880) ~[?:?]
オブジェクトは、スクリプト javascript を使用してフロー bpmn で作成されました。
var HashMap = Java.type("java.util.HashMap");
var vars = new HashMap();
vars.put("request_id",request_id);
vars.put("person_legal_type","C");
vars.put("person_legal_id","12345");
vars.put("natural_paternal_last_name","Mora");
vars.put("natural_first_name","Christian");
execution.setVariable('PROCVARS', vars);
Camunda Cockpit でオブジェクトを確認すると、次のように表示されます。
Camunda BPMN フローは次のとおりです。
外部タスクの実装でこの種のオブジェクトを逆シリアル化する方法を知っている人はいますか?
更新しました
スクリプト タスクでオブジェクトをJSON 形式に変更すると、うまくいきます。
var vars = {};
vars.request_id = request_id;
vars.person_legal_type = "C";
vars.person_legal_id = "12345";
vars.natural_paternal_last_name = "Mora";
vars.natural_first_name = "Christian";
var proc = JSON.stringify(vars);
execution.setVariable('PROCVARS', proc);