Проблема в передаче входных данных из состояния выбора - PullRequest
1 голос
/ 20 марта 2020

Я выполняю какой-то эксперимент с пошаговой функцией, поэтому я разработал этот рабочий процесс. вот снимок рабочего процесса

Код:

 {
   "Comment": "SF demo",
   "StartAt": "Map",
   "States": {
   "Map": {
    "Type": "Map",
    "InputPath": "$.Records",
    "ItemsPath": "$.payload",
    "MaxConcurrency": 2,
    "Parameters":{
     "input1.$":"$.choice1",
     "input2.$":"$.choice2"
    },
  "Next": "Final State",
  "Iterator": {
    "StartAt": "ChoiceState",
    "States": {
      "ChoiceState": {
        "Type": "Choice",
        "Choices":[
          {
            "Variable":"$.input1",
            "StringEquals":"input1",
            "Next":"CWT"
          },
          {
            "Variable":"$.input2",
            "StringEquals":"input2",
            "Next":"Lenel"
          }
        ]
      },
      "CWT":{
        "Type":"Task",
        "InputPath":"$.payload",
        "Resource":"***********************",
        "End": true
      },
      "Lenel":{
        "Type":"Task",
        "Resource":"****************",
        "End": true
      }
    }
  }
},
"Final State": {
  "Type": "Pass",
  "End": true
}
}
}

У меня проблема с обработкой входных данных

У меня будут входы этого типа:

{
   "Records": {
   "choice1": "input1",
   "choice2": "input2",
   "payload": [
       {
          "Key": "tempfile1.csv"
       }
    ]
 }
 }

Мое ожидание: состояние выбора будет считывать данные «choice1» и «choice2» и будет переходить в следующее состояние, в котором будет обрабатываться массив данных «полезной нагрузки».

Но данные «полезной нагрузки» не переходит в следующее состояние, и я получаю эту проблему

TaskStateEntered CWT -   238 Mar 18, 2020 12:15:57.070 PM
{
  "name": "CWT",
  "input": {
  "input2": "input2",
   "input1": "input1"
  }

}

 ExecutionFailed        -   238 Mar 18, 2020 12:15:57.070 PM
 {
 "error": "States.Runtime",
 "cause": "An error occurred while executing the state 'CWT' (entered at the event id #7). 
  Invalid path 
 '$.payload' : No results for path: $['payload']"
  }

1 Ответ

0 голосов
/ 21 марта 2020

Поскольку вы задаете «Параметры» в своем состоянии карты, входные данные переопределяются, как указано в документах :

"Входными данными для каждой итерации по умолчанию является один элемент поля массива, идентифицируемый значением ItemsPath. Это можно переопределить с помощью поля «Параметры». "

Поэтому, чтобы исправить это, вам потребуется переназначить ключ" полезной нагрузки "в параметрах с помощью используя объект контекста для состояний карты. Вот пример вашего конечного автомата с переназначенным ключом «полезной нагрузки»:

{
  "Comment": "SF demo",
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "InputPath": "$.Records",
      "ItemsPath": "$.payload",
      "MaxConcurrency": 2,
      "Parameters": {
        "input1.$": "$.choice1",
        "input2.$": "$.choice2",
        "payload.$": "$$.Map.Item.Value"
      },
      "Next": "Final State",
      "Iterator": {
        "StartAt": "ChoiceState",
        "States": {
          "ChoiceState": {
            "Type": "Choice",
            "Choices": [
              {
                "Variable": "$.input1",
                "StringEquals": "input1",
                "Next": "CWT"
              },
              {
                "Variable": "$.input2",
                "StringEquals": "input2",
                "Next": "Lenel"
              }
            ]
          },
          "CWT": {
            "Type": "Pass",
            "InputPath": "$.payload",
            "End": true
          },
          "Lenel": {
            "Type": "Pass",
            "InputPath": "$.payload",
            "End": true
          }
        }
      }
    },
    "Final State": {
      "Type": "Pass",
      "End": true
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...