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 hoặc đầu ra. 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 quy trình vì bản chất của dữ liệu đầu vào rất đa dạng. Ví dụ: bạn không thể xác định 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 cho đến khi chọn một biểu mẫu cụ thể trong quá trình thiết lập quy trình.

Các biến động có tính đến những trường hợp này bằng cách 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": "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",
}

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ề 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 quy trình 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. variableId của 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 luồng 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 luồng, cụ thể là resourceFieldsDefinitionRetrieval và trả về resourceFieldsDefinitionRetrievedAction cung cấp dữ liệu ở định dạng JSON có thể sử dụng làm đầu ra cho các bước sau. 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(), truy xuất biến động từ đối tượng sự kiện luồng tại e.workflow.resourceRetrieval.resourceReference.resourceId và trả về JSON làm đầu ra cho các bước sau.

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