Я создал пример, который, как мы надеемся, поможет объяснить это.
Сначала вы создаете рабочий процесс с помощью Zeebe Modeler или Java API модели .
Вы можете использовать входные и выходные отображения для создания новых переменных или определить, как переменные должны быть объединены в переменные экземпляра рабочего процесса, для получения дополнительной информации см. Документацию .
Я создал аналогичный рабочий процесс на основе вашего Вопроса с отображением выходных данных для первой задачи.
// given
final var client = CLIENT_RULE.getClient();
// deploy workflow
final var workflow =
Bpmn.createExecutableProcess("processId")
.startEvent()
.serviceTask(
"task1",
t ->
t.zeebeTaskType("typeOne")
.zeebeOutput("glossary.GlossDiv.GlossList.GlossEntry.GlossDef", "GlossDef"))
.serviceTask("task2", t -> t.zeebeTaskType("typeTwo"))
.endEvent()
.done();
client.newDeployCommand().addWorkflowModel(workflow, "process.bpmn").send().join();
// create workflow instance with payload
client
.newCreateInstanceCommand()
.bpmnProcessId("processId")
.latestVersion()
.variables(
"{"
+ "\"glossary\": {\"title\": \"example glossary\","
+ "\"GlossDiv\": {"
+ "\"title\": \"S\","
+ "\"GlossList\": {"
+ "\"GlossEntry\": {"
+ "\"ID\": \"SGML\","
+ "\"SortAs\": \"SGML\","
+ "\"GlossTerm\": \"Standard Generalized Markup Language\","
+ "\"Acronym\": \"SGML\","
+ "\"Abbrev\": \"ISO 8879:1986\","
+ "\"GlossDef\": {"
+ "\"para\": \"A meta-markup language, used to create markup languages such as DocBook.\","
+ "\"GlossSeeAlso\": [\"GML\", \"XML\"]"
+ "},"
+ "\"GlossSee\": \"markup\""
+ "}"
+ "}"
+ "}"
+ "}"
+ "}").send().join();
Чтобы получить доступ к полезной нагрузке, достаточно просто вызвать соответствующий метод для данного задания. Например, getVariables
возвращает строку в формате JSON, но вы также можете использовать метод getVariablesAsMap
для более удобного доступа к переменным.
client
.newWorker()
.jobType("typeOne")
.handler(
(jobClient, job) -> {
System.out.println(job.getVariables());
jobClient.newCompleteCommand(job.getKey()).send().join();
})
.name("workerOne")
.open();
Наш код обработчика, например, выведет
{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}
Для второго задания мы могли бы написать следующий код.
final CountDownLatch secondJobLatch = new CountDownLatch(1);
client
.newWorker()
.jobType("typeTwo")
.handler(
(jobClient, job) -> {
System.out.println(job.getVariables());
jobClient.newCompleteCommand(job.getKey()).send().join();
secondJobLatch.countDown();
})
.name("workerTwo")
.open();
secondJobLatch.await();
Это выведет:
{"GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}
Так что если вы хотите минимизировать переменные, которые Работа имеет доступ к вы можете использовать входные переменные. Если вы хотите, чтобы результат в переменных рабочего процесса хранился по-другому, вы можете использовать выходное отображение. С отображением вывода вы также можете полностью перезаписать ваши переменные.
Надеюсь, это поможет.