Definiowanie zmiennej dynamicznej

Z tego przewodnika dowiesz się, jak utworzyć zmienną dynamiczną.

Jeśli to możliwe, zmienną należy zdefiniować statycznie w pliku manifestu jako zmienną wejściową lub wyjściową. W niektórych sytuacjach potrzebna jest jednak zmienna, którą można zdefiniować tylko wtedy, gdy użytkownik skonfiguruje przepływ, ponieważ charakter danych wejściowych jest różny. Na przykład liczby pytań i odpowiedzi (oraz ich treści) w Formularzach Google nie można określić, dopóki podczas konfigurowania przepływu nie zostanie wybrany konkretny formularz.

Zmienne dynamiczne uwzględniają te przypadki, umożliwiając zdefiniowanie danych wejściowych, które generują dynamiczny zestaw danych wyjściowych w pliku manifestu i w kodzie kroku.

Zdefiniuj zmienną wyjściową w pliku manifestu

W pliku manifestu wykonaj te czynności:

  • inputs[] podaj zmienną wejściową, która akceptuje dynamiczną wartość wejściową.

  • outputs[] określ zmienną wyjściową, która zwraca dynamiczny zbiór zmiennych wyjściowych. Nadaj temu wynikowi wartość dataType"workflowResourceDefinitionId": "dynamic_resource_id".

  • Zdefiniuj zasób niestandardowy do obsługi zmiennej dynamicznej. Określ workflowResourceDefinitions za pomocą "resourceType": "DYNAMIC""providerFunction": "onDynamicProviderFunction". Obiekt id musi być zgodny z obiektem workflowResourceDefinitionId ustawionym w outputs[]. Więcej informacji o zasobach niestandardowych znajdziesz w artykule Definiowanie zasobu niestandardowego.

  • Ustaw dynamicResourceDefinitionProvider na nazwę odpowiedniej funkcji w kodzie kroku, w tym przykładzie onDynamicDefinitionFunction(), która definiuje i zwraca kartę konfiguracji akceptującą dynamiczną wartość wejściową i zwracającą zasób niestandardowy.

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",
}

Zdefiniuj zmienną wyjściową w kodzie

Kod kroku zawiera te funkcje:

  • onDynamicVariableConfigFunction(), która tworzy i zwraca kartę konfiguracji z dynamicznym widżetem wprowadzania danych. Nazwa tej funkcji musi być zgodna z wartością onConfigFunction() w pliku manifestu. Nazwa dynamicznego widżetu wejściowego musi być zgodna z nazwą id ustawioną w pliku manifestu. Ten dynamiczny widżet wejściowy umożliwia użytkownikom ustawianie dynamicznej zmiennej podczas konfigurowania przepływu, np. wybieranie Formularza Google.
  • onDynamicVariableExecuteFunction(), która zwraca dane zmiennej dynamicznej jako dane wyjściowe po uruchomieniu kroku. Nazwa tej funkcji musi być zgodna z wartością onExecuteFunction() w pliku manifestu. Wartość variableIdreturnOutputVariablesAction musi być zgodna z wartością id zmiennej wyjściowej ustawioną w pliku manifestu. Zasób dynamiczny znajduje się w obiekcie zdarzenia przepływu w lokalizacji e.workflow.resourceFieldsDefinitionRetrieval. Dane wejściowe nie mogą odwoływać się do zmiennych, ponieważ wszystkie dane wejściowe dla zasobu dynamicznego muszą być dostępne w momencie konfiguracji.
  • onDynamicDefinitionFunction(), która pobiera dane zmiennej dynamicznej z obiektu zdarzenia przepływu, a konkretnie resourceFieldsDefinitionRetrieval, i zwraca resourceFieldsDefinitionRetrievedAction, które udostępnia dane w formacie JSON do wykorzystania w późniejszych krokach. Wartość resourceId musi być zgodna z wartością id elementu w tablicy workflowResourceDefinitions[] ustawionej w pliku manifestu.
  • onDynamicProviderFunction(), która pobiera zmienną dynamiczną z obiektu zdarzenia przepływu w e.workflow.resourceRetrieval.resourceReference.resourceId i zwraca dane wyjściowe w formacie JSON na potrzeby kolejnych kroków.

Google Apps Script

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",
          })
        }
      }
    }
  };
}