คู่มือนี้อธิบายวิธีสร้างตัวแปรแบบไดนามิก
เมื่อเป็นไปได้ ควรมีการกำหนดตัวแปรแบบคงที่ในไฟล์ 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": "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",
}
กำหนดตัวแปรเอาต์พุตในโค้ด
โค้ดของขั้นตอนประกอบด้วยฟังก์ชันต่อไปนี้
onDynamicVariableConfigFunction()ซึ่งสร้างและแสดง การ์ดการกำหนดค่าพร้อมวิดเจ็ตอินพุตแบบไดนามิก ชื่อของฟังก์ชันนี้ ต้องตรงกับค่าของonConfigFunction()ในไฟล์ Manifest ชื่อของ วิดเจ็ตอินพุตแบบไดนามิกต้องตรงกับidที่ตั้งค่าไว้ในไฟล์ Manifest วิดเจ็ตอินพุตแบบไดนามิกนี้ช่วยให้ผู้ใช้ตั้งค่าตัวแปรแบบไดนามิกได้เมื่อกำหนดค่า ขั้นตอน เช่น การเลือก Google ฟอร์มonDynamicVariableExecuteFunction()ซึ่งจะแสดงผลข้อมูลตัวแปรแบบไดนามิก เป็นเอาต์พุตเมื่อขั้นตอนทํางาน ชื่อของฟังก์ชันนี้ต้องตรงกับ ค่าของonExecuteFunction()ในไฟล์ Manifest คีย์ของvariableDataในreturnOutputVariablesActionต้องตรงกับidของตัวแปรเอาต์พุตที่ตั้งค่าไว้ในไฟล์ Manifest พบทรัพยากรแบบไดนามิกในออบเจ็กต์เหตุการณ์ที่e.workflow.resourceFieldsDefinitionRetrievalอินพุตอ้างอิงตัวแปรไม่ได้เนื่องจากอินพุตทั้งหมดสำหรับทรัพยากรแบบไดนามิกต้องพร้อมใช้งานในเวลาที่กำหนดค่าonDynamicDefinitionFunction()ซึ่งดึงข้อมูลตัวแปรแบบไดนามิก จากออบเจ็กต์เหตุการณ์ โดยเฉพาะresourceFieldsDefinitionRetrievalและแสดงผลresourceFieldsDefinitionRetrievedActionซึ่งระบุชื่อของตัวแปรเอาต์พุตสำหรับขั้นตอนต่อๆ ไป และยังระบุ ตัวเลือกเพื่อให้onDynamicProviderFunction()ระบุ ค่าที่สอดคล้องกันให้กับตัวแปรเอาต์พุตแต่ละรายการresourceIdต้องตรงกับidของ รายการในอาร์เรย์workflowResourceDefinitions[]ที่ตั้งค่าไว้ในไฟล์ ManifestonDynamicProviderFunction()ซึ่งระบุค่าสำหรับตัวแปรเอาต์พุตแต่ละตัว โดยใช้ตัวเลือกเป็นคีย์ด้วยการเข้าถึงresourceIdและworkflowResourceDefinitionId
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;
}
หัวข้อที่เกี่ยวข้อง
- ตัวแปรอินพุต
- ตรวจสอบตัวแปรอินพุต
- ตัวแปรเอาต์พุต
- กำหนดทรัพยากรที่กำหนดเอง
- บันทึกกิจกรรมและข้อผิดพลาด
- ออบเจ็กต์เหตุการณ์ Workspace Studio