Dynamische Variable definieren

In dieser Anleitung wird beschrieben, wie Sie eine dynamische Variable erstellen.

Wenn möglich, sollte eine Variable statisch in der Manifestdatei als entweder eine Eingabevariable, Ausgabevariable, oder eine benutzerdefinierte Ressource definiert werden. In einigen Fällen ist jedoch eine Variable erforderlich, die nur definiert werden kann, wenn der Nutzer den Ablauf konfiguriert, da sich die Art der Eingabe ändert. Beispielsweise kann die Anzahl der Fragen und Antworten (und deren Inhalt) für ein Google-Formular erst bestimmt werden, wenn während der Ablaufkonfiguration ein bestimmtes Formular ausgewählt wird.

Dynamische Variablen berücksichtigen diese Fälle, indem Sie eine Eingabe definieren können, die in der Manifestdatei und im Code des Schritts eine dynamische Menge von Ausgaben erzeugt.

Ausgabevariable in der Manifestdatei definieren

Konfigurieren Sie in der Manifestdatei Folgendes:

  • Geben Sie in inputs[] eine Eingabevariable an, die einen dynamischen Eingabewert akzeptiert.

  • Geben Sie in outputs[] eine Ausgabevariable an, die eine dynamische Menge von Ausgabevariablen zurückgibt. Geben Sie dieser Ausgabe ein dataType von "workflowResourceDefinitionId": "dynamic_resource_id".

  • Definieren Sie eine benutzerdefinierte Ressource, um die dynamische Variable zu verarbeiten. Geben Sie workflowResourceDefinitions mit "resourceType": "DYNAMIC" und "providerFunction": "onDynamicProviderFunction" an. Die id muss mit der in outputs[] festgelegten workflowResourceDefinitionId übereinstimmen. Weitere Informationen zu benutzerdefinierten Ressourcen finden Sie unter Benutzerdefinierte Ressource definieren.

  • Legen Sie dynamicResourceDefinitionProvider auf den Namen einer entsprechenden Funktion im Code des Schritts fest, in diesem Beispiel onDynamicDefinitionFunction, die eine Konfigurationskarte definiert und zurückgibt, die einen dynamischen Eingabewert akzeptiert und eine benutzerdefinierte Ressource zurückgibt.

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": "INTEGER"
          }
       }
      ],
      "outputs": [
        {
          "id": "dynamic_resource_output",
          "description": "Dynamic Data",
          "cardinality": "SINGLE",
          "dataType": {
            "resourceType": {
              "workflowResourceDefinitionId": "resource_definition_1"
            }
          }
        }
      ],
      "onConfigFunction": "onDynamicVariableConfigFunction",
      "onExecuteFunction": "onDynamicVariableExecuteFunction"
    }
  }],
  "workflowResourceDefinitions": [{
    "id": "resource_definition_1",
    "name": "Dynamic Resource",
    "providerFunction": "onDynamicProviderFunction",
    "resourceType" : "DYNAMIC"
  }],
  "dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}

Ausgabevariable im Code definieren

Der Code des Schritts enthält die folgenden Funktionen:

  • onDynamicVariableConfigFunction, die eine Konfigurationskarte mit einem dynamischen Eingabe-Widget erstellt und zurückgibt. Der Name dieser Funktion muss mit dem Wert von onConfigFunction in der Manifestdatei übereinstimmen. Der Name des dynamischen Eingabe-Widgets muss mit der in der Manifestdatei festgelegten id übereinstimmen. Mit diesem dynamischen Eingabe-Widget können Nutzer beim Konfigurieren des Schritts eine dynamische Variable festlegen, z. B. ein Google-Formular auswählen.
  • onDynamicVariableExecuteFunction, die die Daten der dynamischen Variablen als Ausgabe zurückgibt, wenn der Schritt ausgeführt wird. Der Name dieser Funktion muss mit dem Wert von onExecuteFunction in der Manifestdatei übereinstimmen. Der Schlüssel von variableData in returnOutputVariablesAction muss mit der in der Manifestdatei festgelegten id der Ausgabevariablen übereinstimmen. Die dynamische Ressource befindet sich im Ereignisobjekt unter e.workflow.resourceFieldsDefinitionRetrieval. Die Eingabe kann keine Variablen referenzieren, da alle Eingaben für eine dynamische Ressource zur Konfigurationszeit verfügbar sein müssen.
  • onDynamicDefinitionFunction, die die Daten der dynamischen Variablen aus dem Ereignisobjekt abruft, insbesondere resourceFieldsDefinitionRetrieval, und resourceFieldsDefinitionRetrievedAction zurückgibt, die den Namen der Ausgabevariablen für spätere Schritte sowie die Selektoren enthält, damit onDynamicProviderFunction jeder Ausgabevariablen den entsprechenden Wert zuweisen kann. Die resourceId muss mit der id eines Elements im Array workflowResourceDefinitions[] übereinstimmen, das in der Manifestdatei festgelegt ist.
  • onDynamicProviderFunction, die mithilfe von Selektoren als Schlüssel einen Wert für jede Ausgabevariable bereitstellt, indem sie auf resourceId und workflowResourceDefinitionId zugreift.

Apps Script

function onDynamicVariableConfigFunction() {
  let section = CardService.newCardSection()
    .addWidget(
      CardService.newTextInput()
        .setFieldName("dynamic_resource_input")
        .setTitle("Dynamic Resource Input")
        .setHint("Enter an integer value between 1 and 3 (inclusive) for the corresponding number of output variables")
    );

  const card = CardService.newCardBuilder()
    .addSection(section)
    .build();

  return card;
}

function onDynamicDefinitionFunction(e) {
  console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
  var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];

  let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
    .setResourceId("resource_definition_1")
    .addResourceField(
      AddOnsResponseService.newResourceField()
        .setSelector("question_1")
        .setDisplayText("Question 1")
    );

  if (input_value == 2 || input_value == 3) {
    resourceDefinitions = resourceDefinitions
      .addResourceField(
        AddOnsResponseService.newResourceField()
          .setSelector("question_2")
          .setDisplayText("Question 2")
      );
  }
  if (input_value == 3) {
    resourceDefinitions = resourceDefinitions
      .addResourceField(
        AddOnsResponseService.newResourceField()
          .setSelector("question_3")
          .setDisplayText("Question 3")
      );
  }

  let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
    .addDynamicResourceDefinition(resourceDefinitions);

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  let renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}

function onDynamicVariableExecuteFunction(e) {
  console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));

  let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
    .setVariableDataMap({
      "dynamic_resource_output": AddOnsResponseService.newVariableData()
        .addResourceReference("my_dynamic_resource_id")
    });

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  let renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}

function onDynamicProviderFunction(e) {
  console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));

  // resourceId == "my_dynamic_resource_id"
  var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
  // workflowResourceDefinitionId == "resource_definition_1"
  var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;

  const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
    .setResourceData(
      AddOnsResponseService.newResourceData()
        .addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
        .addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
        .addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
    );

  const hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  const renderAction = AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();

  return renderAction;
}