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 Eingabevariable, Ausgabevariable oder benutzerdefinierte Ressource definiert werden. In einigen Situationen ist jedoch eine Variable erforderlich, die nur definiert werden kann, wenn der Nutzer den Agent konfiguriert, da die Art der Eingabe variiert. So kann die Anzahl der Fragen und Antworten (und deren Inhalt) für ein Google-Formular erst bestimmt werden, wenn bei der Agent-Konfiguration ein bestimmtes Formular ausgewählt wird.

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

Ausgabevariable in der Manifestdatei definieren

Führen Sie in der Manifestdatei die folgenden Schritte aus:

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

  • Geben Sie in outputs[] eine Ausgabevariable an, die einen dynamischen Satz von Ausgabevariablen zurückgibt. Geben Sie dieser Ausgabe einen 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. Der id muss mit dem 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(). Diese Funktion definiert und gibt eine Konfigurationskarte zurück, 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(): Erstellt und gibt eine Konfigurationskarte mit einem dynamischen Eingabe-Widget zurück. Der Name dieser Funktion muss mit dem Wert von onConfigFunction() in der Manifestdatei übereinstimmen. Der Name des dynamischen Eingabe-Widgets muss mit dem id in der Manifestdatei übereinstimmen. Mit diesem dynamischen Eingabe-Widget können Nutzer beim Konfigurieren eines 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 id der Ausgabevariable übereinstimmen, die in der Manifestdatei festgelegt ist. Die dynamische Ressource befindet sich im Ereignisobjekt unter e.workflow.resourceFieldsDefinitionRetrieval. Der Input kann nicht auf Variablen verweisen, da alle Inputs für eine dynamische Ressource zur Konfigurationszeit verfügbar sein müssen.
  • onDynamicDefinitionFunction(), mit der die Daten der dynamischen Variablen aus dem Ereignisobjekt abgerufen werden, insbesondere resourceFieldsDefinitionRetrieval, und resourceFieldsDefinitionRetrievedAction zurückgegeben wird. resourceFieldsDefinitionRetrievedAction enthält den Namen der Ausgabevariablen für spätere Schritte sowie die Selektoren, damit onDynamicProviderFunction() den entsprechenden Wert für jede Ausgabevariable bereitstellen kann. Der resourceId muss mit dem id eines Elements im workflowResourceDefinitions[]-Array übereinstimmen, das in der Manifestdatei festgelegt ist.
  • onDynamicProviderFunction(), das einen Wert für jede Ausgabevariable mit Selektoren als Schlüssel bereitstellt, indem auf resourceId und workflowResourceDefinitionId zugegriffen wird.

Apps Script

function onDynamicVariableConfigFunction() {
  let section = CardService.newCardSection()
    .addWidget(
      CardService.newTextInput()
        .setFieldName("dynamic_resource_input")
        .setTitle("Dynamic Resource Input")
        .setHint("Input a Integer value between 1 and 3\(inclusive\) for 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;
}