Определить динамическую переменную

В этом руководстве объясняется, как создать динамическую переменную.

По возможности переменная должна быть статически определена в файле манифеста как входная или выходная. Однако в некоторых ситуациях требуется переменная, которую можно определить только при настройке потока пользователем, поскольку характер входных данных может меняться. Например, количество вопросов и ответов (и их содержание) для Google Forms невозможно определить, пока не будет выбрана конкретная форма при настройке потока.

Динамические переменные учитывают эти случаи, позволяя вам определить входные данные, которые создают динамический набор выходных данных в файле манифеста и в коде шага.

Определить выходную переменную в файле манифеста

В файле манифеста выполните следующие действия:

  • В inputs[] укажите входную переменную, которая принимает динамическое входное значение.

  • В outputs[] укажите выходную переменную, которая возвращает динамический набор выходных переменных. Для этого выходного значения укажите тип dataType "workflowResourceDefinitionId": "dynamic_resource_id" .

  • Определите пользовательский ресурс для обработки динамической переменной. Укажите workflowResourceDefinitions с "resourceType": "DYNAMIC" и "providerFunction": "onDynamicProviderFunction" . id должен соответствовать workflowResourceDefinitionId заданному в outputs[] . Подробнее о пользовательских ресурсах см. в разделе Определение пользовательского ресурса .

  • Задайте для dynamicResourceDefinitionProvider имя соответствующей функции в коде шага, в этом примере onDynamicDefinitionFunction() , которая определяет и возвращает карту конфигурации, которая принимает динамическое входное значение и возвращает настраиваемый ресурс.

JSON

"flows": {
  "workflowElements" : [{
    "id": "getDynamicVariable",
    "state": "ACTIVE",
    "name": "Get Dynamic Variable",
    "description": "Get Dynamic Variable",
    "workflowAction": {
    "inputs": [
      {
          "id": "dynamic_resource_input",
          "description": "Dynamic Resource Input",
          "cardinality": "SINGLE",
          "dataType": {
            "basicType": "STRING"
          }
       }
      ],
      "outputs": [
        {
          "id": "dynamic_resource_output",
          "description": "Dynamic Data",
          "cardinality": "SINGLE",
          "dataType": {
            "resourceType": {
              "workflowResourceDefinitionId": "dynamic_resource_id"
            }
          }
        }
      ],
      "onConfigFunction": "onDynamicVariableConfigFunction",
      "onExecuteFunction": "onDynamicVariableExecuteFunction"
    }
  }],
  "workflowResourceDefinitions": [{
    "id": "dynamic_resource_id",
    "name": "Dynamic Resource",
    "providerFunction": "onDynamicProviderFunction",
    "resourceType" : "DYNAMIC"
  }],
  "dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}

Определить выходную переменную в коде

Код шага включает следующие функции:

  • Функция onDynamicVariableConfigFunction() создаёт и возвращает карту конфигурации с динамическим виджетом ввода. Имя этой функции должно совпадать со значением onConfigFunction() в файле манифеста. Имя динамического виджета ввода должно соответствовать id заданному в файле манифеста. Этот динамический виджет ввода позволяет пользователям задавать динамическую переменную при настройке своего процесса, например, при выборе формы Google.
  • onDynamicVariableExecuteFunction() возвращает данные динамической переменной в качестве выходных данных при выполнении шага. Имя этой функции должно соответствовать значению onExecuteFunction() в файле манифеста. variableId returnOutputVariablesAction должен соответствовать id выходной переменной, заданному в файле манифеста. Динамический ресурс находится в объекте события потока по адресу e.workflow.resourceFieldsDefinitionRetrieval . Входные данные не могут ссылаться на переменные, поскольку все входные данные для динамического ресурса должны быть доступны на момент настройки.
  • onDynamicDefinitionFunction() извлекает динамические переменные данные из объекта события потока, а именно resourceFieldsDefinitionRetrieval , и возвращает resourceFieldsDefinitionRetrievedAction , который предоставляет данные в формате JSON, пригодном для использования в качестве выходных данных для последующих шагов. Значение resourceId должно совпадать с id элемента в массиве workflowResourceDefinitions[] , заданном в файле манифеста.
  • onDynamicProviderFunction() , которая извлекает динамическую переменную из объекта события потока в e.workflow.resourceRetrieval.resourceReference.resourceId и возвращает JSON в качестве выходных данных для последующих шагов.

Скрипт приложений

function onDynamicVariableConfigFunction() {
  var card = {
    "sections": [
      {
        "widgets": [
          {
            "textInput": {
              "name": "dynamic_resource_input",
              "label": "Dynamic Resource Input",
            }
          },
        ]
      }
    ]
  };
  return {
    "action": {
      "navigations": [{
        "push_card": card
      }]
    }
  };
}

function onDynamicVariableExecuteFunction(){
  var dynamic_resource_id = uuidv4();
  return {
    "hostAppAction": {
      "workflowAction": {
        "returnOutputVariablesAction": {
          "variableValues": [{
            "variableId": "dynamic_resource_output",
            "variableData": {
              "resourceReferences" : [ dynamic_resource_id ]
            }
          }]
        }
      }
    }
  };
}

function onDynamicDefinitionFunction(e) {
  var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.stringValues[0];
  // input_value == "dynamic_resource_input"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceFieldsDefinitionRetrievedAction": {
          "dynamicResourceDefinitions": [{
            "resourceId": "dynamic_resource_id",
            "fields": [{
                "selector":  "question_1",
                "displayText": "Question 1"
            },{
                "selector":  "question_2",
                "displayText": "Question 2"
            },{
                "selector":  "question_3",
                "displayText": "Question 3"
            }]
          }]
        }
      }
    }
  };
}

function onDynamicProviderFunction(e) {
  var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
  // resourceId == uuidv4();

  var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
  // workflowResourceDefinitionId == "dynamic_resource_id"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceRetrievedAction": {
          "resourceJson": JSON.stringify({
            "question_1": "Answer 1",
            "question_2": "Answer 2",
            "question_3": "Answer 3",
          })
        }
      }
    }
  };
}