Xác định một biến động

Hướng dẫn này giải thích cách tạo một biến động.

Khi có thể, một biến phải được xác định tĩnh trong tệp kê khai dưới dạng biến đầu vào, biến đầu ra hoặc tài nguyên tuỳ chỉnh. Tuy nhiên, một số trường hợp yêu cầu một biến chỉ có thể được xác định khi người dùng định cấu hình tác nhân vì bản chất của dữ liệu đầu vào rất đa dạng. Ví dụ: số lượng câu hỏi và câu trả lời (cũng như nội dung của chúng) cho một Google Biểu mẫu không thể xác định cho đến khi một biểu mẫu cụ thể được chọn trong quá trình thiết lập tác nhân.

Các biến động cho phép bạn xác định một đầu vào tạo ra một tập hợp đầu ra động trong tệp kê khai và trong mã của bước.

Xác định biến đầu ra trong tệp kê khai

Trong tệp kê khai, hãy làm theo các bước sau:

  • Trong inputs[], hãy chỉ định một biến đầu vào chấp nhận giá trị đầu vào động.

  • Trong outputs[], hãy chỉ định một biến đầu ra trả về một tập hợp biến đầu ra động. Đặt dataType cho đầu ra này là "workflowResourceDefinitionId": "dynamic_resource_id".

  • Xác định một tài nguyên tuỳ chỉnh để xử lý biến động. Chỉ định workflowResourceDefinitions bằng "resourceType": "DYNAMIC""providerFunction": "onDynamicProviderFunction". id phải khớp với workflowResourceDefinitionId được đặt trong outputs[]. Để tìm hiểu thêm về tài nguyên tuỳ chỉnh, hãy xem phần Xác định tài nguyên tuỳ chỉnh.

  • Đặt dynamicResourceDefinitionProvider thành tên của một hàm tương ứng trong mã của bước, trong ví dụ này là onDynamicDefinitionFunction(), xác định và trả về một thẻ cấu hình chấp nhận giá trị đầu vào động và trả về một tài nguyên tuỳ chỉnh.

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

Xác định biến đầu ra trong mã

Mã của bước này bao gồm các hàm sau:

  • onDynamicVariableConfigFunction(), tạo và trả về một thẻ cấu hình có tiện ích đầu vào động. Tên của hàm này phải khớp với giá trị của onConfigFunction() trong tệp kê khai. Tên của tiện ích đầu vào động phải khớp với id được đặt trong tệp kê khai. Tiện ích đầu vào linh động này cho phép người dùng đặt một biến linh động khi định cấu hình bước của họ, chẳng hạn như chọn một biểu mẫu trên Google.
  • onDynamicVariableExecuteFunction(), trả về dữ liệu biến động dưới dạng đầu ra khi bước này chạy. Tên của hàm này phải khớp với giá trị của onExecuteFunction() trong tệp kê khai. Khoá của variableData trong returnOutputVariablesAction phải khớp với id của biến đầu ra được đặt trong tệp kê khai. Tài nguyên động nằm trên đối tượng sự kiện tại e.workflow.resourceFieldsDefinitionRetrieval. Đầu vào không thể tham chiếu các biến vì tất cả đầu vào cho một tài nguyên động phải có sẵn tại thời gian định cấu hình.
  • onDynamicDefinitionFunction(), truy xuất dữ liệu biến động từ đối tượng sự kiện, cụ thể là resourceFieldsDefinitionRetrieval và trả về resourceFieldsDefinitionRetrievedAction cung cấp tên của các biến đầu ra cho các bước sau, cũng như các bộ chọn để onDynamicProviderFunction() có thể cung cấp giá trị tương ứng cho từng biến đầu ra. resourceId phải khớp với id của một mục trong mảng workflowResourceDefinitions[] được đặt trong tệp kê khai.
  • onDynamicProviderFunction(), cung cấp một giá trị cho từng biến đầu ra bằng cách sử dụng bộ chọn làm khoá thông qua việc truy cập vào resourceIdworkflowResourceDefinitionId.

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;
}