Вы можете использовать InputPath
и ResultPath
.В initStep
вы бы отправляли только необходимые данные во внешнюю службу (возможно, вместе с некоторым уникальным идентификатором выполнения).На шаге ValidaitonWaiting
вы можете установить следующие свойства (в определении конечного автомата):
InputPath
: Какие данные будут предоставлены для GetActivityTask
.Возможно, вы хотите установить что-то вроде $.execution_unique_id
, где execution_unique_id
- это поле в ваших данных, которое внешняя служба использует для идентификации выполнения (чтобы сопоставить его с конкретным запросом во время initStep
). ResultPath
: Где выходные данные ValidationWaiting Activity будут сохранены в данных.Вы можете установить его на $.validation_output
, и там будет присутствовать результат json от внешней службы.
Таким образом, вы можете отправлять во внешнюю службу только те данные, которые действительно ей нужны, и вы не потеряетедоступ к любым данным, которые были ранее (до шага ValidationWaiting
) во входных данных.
Например, у вас может быть следующее определение конечного автомата:
{
"StartAt": "initStep",
"States": {
"initStep": {
"Type": "Pass",
"Result": {
"executionId": "some:special:id",
"data": {},
"someOtherData": {"value": "key"}
},
"Next": "ValidationWaiting"
},
"ValidationWaiting": {
"Type": "Pass",
"InputPath": "$.executionId",
"ResultPath": "$.validationOutput",
"Result": {
"validationMessages": ["a", "b"]
},
"Next": "Complete"
},
"Complete": {
"Type": "Pass",
"End": true
}
}
}
Я использовалPass
указывает для initStep
и ValidationWaiting
для упрощения примера (я не запускал его, но он должен работать).Поле Result
относится к задаче Pass
и эквивалентно результату ваших лямбда-функций или действий.
В этом сценарии шаг Complete
будет содержать следующие данные:
{
"executionId": "some:special:id",
"data": {},
"someOtherData": {"value": key"},
"validationOutput": {
"validationMessages": ["a", "b"]
}
}
Таким образом, результат шага ValidationWaiting
был сохранен в поле validationOutput
.