กำหนดตัวแปรแบบไดนามิก

คู่มือนี้อธิบายวิธีสร้างตัวแปรแบบไดนามิก

เมื่อเป็นไปได้ ควรมีการกำหนดตัวแปรแบบคงที่ในไฟล์ Manifest เป็น ตัวแปรอินพุตหรือเอาต์พุต อย่างไรก็ตาม ในบางกรณี คุณจะต้องใช้ตัวแปรที่กำหนดได้เฉพาะเมื่อผู้ใช้กำหนดค่าโฟลว์ เนื่องจากลักษณะของอินพุตจะแตกต่างกัน ตัวอย่างเช่น ระบบจะกำหนดจำนวนคำถามและคำตอบ (และเนื้อหาของคำถามและคำตอบ) สำหรับ Google ฟอร์มไม่ได้จนกว่าจะเลือก แบบฟอร์มที่เฉพาะเจาะจงในระหว่างการกำหนดค่าโฟลว์

ตัวแปรแบบไดนามิกจะพิจารณากรณีเหล่านี้โดยให้คุณกำหนดอินพุตที่สร้างชุดเอาต์พุตแบบไดนามิกในไฟล์ Manifest และในโค้ดของขั้นตอน

กำหนดตัวแปรเอาต์พุตในไฟล์ Manifest

ในไฟล์ Manifest ให้ทำตามขั้นตอนต่อไปนี้

  • ใน inputs[] ให้ระบุตัวแปรอินพุตที่ยอมรับค่าอินพุตแบบไดนามิก

  • ใน outputs[] ให้ระบุตัวแปรเอาต์พุตที่แสดงผลชุดตัวแปรเอาต์พุตแบบไดนามิก ให้เอาต์พุตนี้มีdataTypeของ "workflowResourceDefinitionId": "dynamic_resource_id"

  • กำหนดทรัพยากรที่กำหนดเองเพื่อจัดการตัวแปรแบบไดนามิก ระบุ workflowResourceDefinitions ด้วย "resourceType": "DYNAMIC" และ "providerFunction": "onDynamicProviderFunction" id ต้องตรงกับ workflowResourceDefinitionId ที่ตั้งไว้ใน outputs[] ดูข้อมูลเพิ่มเติมเกี่ยวกับ ทรัพยากรที่กำหนดเองได้ที่ กำหนดทรัพยากรที่กำหนดเอง

  • ตั้งค่า dynamicResourceDefinitionProvider เป็นชื่อของฟังก์ชันที่เกี่ยวข้องในโค้ดของขั้นตอน ในตัวอย่างนี้คือ onDynamicDefinitionFunction() ซึ่งกำหนดและแสดงผลการ์ดการกำหนดค่าที่ยอมรับค่าอินพุตแบบไดนามิกและแสดงผลทรัพยากรที่กำหนดเอง

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

กำหนดตัวแปรเอาต์พุตในโค้ด

โค้ดของขั้นตอนประกอบด้วยฟังก์ชันต่อไปนี้

  • onDynamicVariableConfigFunction() ซึ่งสร้างและแสดงการ์ดการกำหนดค่าที่มีวิดเจ็ตอินพุตแบบไดนามิก ชื่อของฟังก์ชันนี้ ต้องตรงกับค่าของ onConfigFunction() ในไฟล์ Manifest ชื่อของ วิดเจ็ตอินพุตแบบไดนามิกต้องตรงกับ id ที่ตั้งค่าไว้ในไฟล์ Manifest วิดเจ็ตอินพุตแบบไดนามิกนี้ช่วยให้ผู้ใช้ตั้งค่าตัวแปรแบบไดนามิกได้เมื่อกำหนดค่าโฟลว์ เช่น การเลือก Google ฟอร์ม
  • onDynamicVariableExecuteFunction() ซึ่งจะแสดงผลข้อมูลตัวแปรแบบไดนามิก เป็นเอาต์พุตเมื่อขั้นตอนทํางาน ชื่อของฟังก์ชันนี้ต้องตรงกับ ค่าของ onExecuteFunction() ในไฟล์ Manifest variableId ของ returnOutputVariablesAction ต้องตรงกับ id ของตัวแปรเอาต์พุตที่ตั้งค่าไว้ ในไฟล์ Manifest พบทรัพยากรแบบไดนามิกในออบเจ็กต์เหตุการณ์โฟลว์ที่ e.workflow.resourceFieldsDefinitionRetrieval อินพุตอ้างอิงตัวแปรไม่ได้เนื่องจากอินพุตทั้งหมดสำหรับทรัพยากรแบบไดนามิกต้องพร้อมใช้งานในเวลาที่กำหนดค่า
  • onDynamicDefinitionFunction() ซึ่งดึงข้อมูลตัวแปรแบบไดนามิก จากออบเจ็กต์เหตุการณ์โฟลว์ โดยเฉพาะ resourceFieldsDefinitionRetrieval และแสดงผล resourceFieldsDefinitionRetrievedAction ซึ่งให้ข้อมูลในรูปแบบ JSON ที่ใช้ได้ เป็นเอาต์พุตสำหรับขั้นตอนต่อๆ ไป resourceId ต้องตรงกับ id ของ รายการในอาร์เรย์ workflowResourceDefinitions[] ที่ตั้งค่าไว้ในไฟล์ Manifest
  • onDynamicProviderFunction() ซึ่งดึงตัวแปรแบบไดนามิกจากออบเจ็กต์เหตุการณ์โฟลว์ที่ e.workflow.resourceRetrieval.resourceReference.resourceId และแสดงผล JSON เป็นเอาต์พุตสำหรับขั้นตอนต่อๆ ไป

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