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