במאמר הזה מוסבר איך ליצור משתנה דינמי.
אם אפשר, צריך להגדיר משתנה באופן סטטי בקובץ המניפסט כמשתנה קלט, כמשתנה פלט או כמשאב מותאם אישית. עם זאת, יש מצבים שבהם נדרש משתנה שאפשר להגדיר רק כשהמשתמש מגדיר את הסוכן, כי אופי הקלט משתנה. לדוגמה, אי אפשר לקבוע את מספר השאלות והתשובות (והתוכן שלהן) ב-Google Forms עד שבוחרים טופס ספציפי במהלך הגדרת הסוכן.
משתנים דינמיים מאפשרים לכם להגדיר קלט שמפיק קבוצה דינמית של פלטים בקובץ המניפסט ובקוד של השלב, וכך לטפל במקרים האלה.
הגדרת משתנה הפלט בקובץ המניפסט
בקובץ המניפסט, פועלים לפי השלבים הבאים:
ב-
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()בקובץ המניפסט. השם של הווידג'ט של הקלט הדינמי חייב להיות זהה לערךidשמוגדר בקובץ המניפסט. ווידג'ט הקלט הדינמי הזה מאפשר למשתמשים להגדיר משתנה דינמי כשהם מגדירים את השלב שלהם, כמו בחירת טופס Google. -
onDynamicVariableExecuteFunction(), שמחזירה את נתוני המשתנה הדינמי כפלט כשהשלב מופעל. השם של הפונקציה הזו צריך להיות זהה לערך שלonExecuteFunction()בקובץ המניפסט. המפתח שלvariableDataב-returnOutputVariablesActionצריך להיות זהה לערך של משתנה הפלטidשמוגדר בקובץ המניפסט. המשאב הדינמי נמצא באובייקט האירוע בכתובתe.workflow.resourceFieldsDefinitionRetrieval. הקלט לא יכול להפנות למשתנים כי כל הקלטים של משאב דינמי צריכים להיות זמינים בזמן ההגדרה. -
onDynamicDefinitionFunction(), שמחלץ את נתוני המשתנים הדינמיים מאובייקט האירוע, במיוחדresourceFieldsDefinitionRetrieval, ומחזיר אתresourceFieldsDefinitionRetrievedAction.resourceFieldsDefinitionRetrievedActionמספק את השם של משתני הפלט לשלבים הבאים, וגם את הסלקטורים כדי ש-onDynamicProviderFunction()יוכל לספק את הערך המתאים לכל משתנה פלט. הערך שלresourceIdצריך להיות זהה לערך שלidשל פריט במערךworkflowResourceDefinitions[]שמוגדר בקובץ המניפסט.
onDynamicProviderFunction(), שמספק ערך לכל משתנה פלט באמצעות סלקטורים כמפתחות על ידי גישה אל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