במדריך הזה מוסבר איך מגדירים משאבים בהתאמה אישית ל-Google Workspace Flows.
משאבים מותאמים אישית הם מבני נתונים מותאמים אישית שאפשר להגדיר כדי לקבץ כמה משתנים יחד. לדוגמה, כדי ליצור ליד במערכת לניהול קשרי לקוחות (CRM), צריך להעביר משאב בהתאמה אישית שמכיל כתובת אימייל, כתובת ורחוב ושם.
אלה שתי הדרכים להגדיר משאבים בהתאמה אישית:
- כערך הפניה: כשמוציאים משאב מותאם אישית כהפניה, מחזירים את המשאב המותאם אישית לפי המזהה שלו במקום אובייקט המשאב המותאם אישית המלא. הפעולה הזו משפרת את הביצועים כי היא מצמצמת את כמות הנתונים שמועברים בין השלבים בתהליך. כשצריך לבצע חיפושים משניים של נתונים, כדאי להחזיר את המזהה שלהם כדי לבצע את החיפושים האלה.
- כערך: משתמשים בשיטה הזו כשצריך לאחזר את הנתונים במהלך ההפעלה, או כשמקור המידע המותאם אישית קטן ולא מכיל נתונים רגישים.
הצגת משאב מותאם אישית כהפניה
אם מוציאים משאב בהתאמה אישית כהפניה, אפשר להחזיר את המשאב בהתאמה אישית לפי המזהה שלו במקום לפי אובייקט המשאב המלא בהתאמה אישית. אם משאב מותאם אישית גדול או מורכב, העברת המזהה בלבד משפרת את הביצועים כי היא מצמצמת את כמות הנתונים שמועברת בין שלבי התהליך.
כדי להוציא משאב בהתאמה אישית כהפניה, עורכים את קובץ המניפסט ואת הקוד של השלב.
עריכת קובץ המניפסט
בקובץ המניפסט:
מציינים
workflowResourceDefinitionsומקצים לוid, מערךfields[]ו-providerFunction. workflowResourceDefinitionsהוא מבנה שמגדיר את סוגי הנתונים והתוכן של המשאב המותאם אישית.במערך
fields[], מציינים את השדות הנפרדים שמרכיבים את המשאב המותאם אישית, שבדוגמה הזו נקראfield_1ו-field_2.הערך של
providerFunctionצריך להיות זהה לשם של פונקציה בקוד של השלב. providerFunctionמאחזר תוכן בפועל של משאב בהתאמה אישית כשצריך.JSON
{ "workflowResourceDefinitions": [ { "id": "resource_id", "name": "Custom Resource", "fields": [ { "selector": "field_1", "name": "Field 1", "dataType": { "basicType": "STRING" } }, { "selector": "field_2", "name": "Field 2", "dataType": { "basicType": "STRING" } } ], "providerFunction": "onMessageResourceFunction" } ] }ב-
outputs[], מציינים משתנה פלט שמחזיר קבוצה דינמית של משתני פלט. למשתנה הפלט יש מאפייןdataTypeעם הערךresourceType. הערך שלcardinalityחייב להיותSINGLE.JSON
"outputs": [{ "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } }]
זו דוגמה לקובץ מניפסט מלא שמגדיר משאב בהתאמה אישית:
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_id"
}
}
}
],
"onConfigFunction": "onConfigResourceFunction",
"onExecuteFunction": "onExecuteResourceFunction"
}
}
],
"workflowResourceDefinitions": [
{
"id": "resource_id",
"name": "Custom Resource",
"fields": [
{
"selector": "field_1",
"name": "Field 1",
"dataType": {
"basicType": "STRING"
}
},
{
"selector": "field_2",
"name": "Field 2",
"dataType": {
"basicType": "STRING"
}
}
],
"providerFunction": "onMessageResourceFunction"
}
]
}
}
}
עריכת הקוד
בקוד האפליקציה:
מטמיעים את
providerFunction, שנקראonMessageResourceFunction()בדוגמה הזו, כדי לאחזר תוכן של משאב מותאם אישית כשצריך. היא מקבלת את הקלטeשהוא מטען ייעודי (payload) של אובייקט אירוע JSON של השלב, ומגדירה ממנו את מזהה המשאב המותאם אישית.Apps Script
function onMessageResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; var field_1 = ...; var field_2 = ...; return { "hostAppAction": { "workflowAction": { "resourceRetrievedAction": { "resourceJson": JSON.stringify({ "field_1": field_1, "field_2": field_2, }) } } } }; }פונקציית הספק צריכה להחזיר את הערך של המשאב המותאם אישית על ידי אחזור שלו באמצעות מנגנון מתאים, כמו קריאה ל-API או קריאה למסד נתונים.
כדי לאחזר משאב מותאם אישית ולהחזיר אותו לפי המזהה שלו, מחזירים אותו כ-
returnOutputVariablesAction, כמו שמוצג ב-onExecuteResourceFunction().Apps Script
function onExecuteResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; return { "hostAppAction": { "workflowAction": { "returnOutputVariablesAction": { "variableValues": [{ "variableId": "resource_data", "variableData": { "resourceReferences" : [ resource_id ] } }] } } } }; }
דוגמה מלאה:
Apps Script
function onMessageResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
var field_1 = ...;
var field_2 = ...;
return {
"hostAppAction": {
"workflowAction": {
"resourceRetrievedAction": {
"resourceJson": JSON.stringify({
"field_1": field_1,
"field_2": field_2,
})
}
}
}
};
}
function onExecuteResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceReferences" : [ resource_id ]
}
}]
}
}
}
};
}
הצגת משאב מותאם אישית כערך
כשמוציאים משאב בהתאמה אישית כהפניה, מחזירים את המשאב בהתאמה אישית לפי המזהה שלו במקום לפי אובייקט המשאב המלא בהתאמה אישית. אם אתם צריכים להעביר את אובייקט המשאב כולו, אתם יכולים לעשות זאת באמצעות resourceValues.
ב-resourceValues, מגדירים את הפלט של השלב.
כדי להוציא משאב מותאם אישית כערך, צריך לערוך את קובץ המניפסט והקוד של השלב.
עריכת קובץ המניפסט
בקובץ המניפסט:
מציינים
workflowResourceDefinitionsומקצים לו מזהה.workflowResourceDefinitionsהוא מבנה שמגדיר סוגי נתונים ותוכן של המשאב המותאם אישית. בתוךworkflowResourceDefinitions, מציינים את השדות הנפרדים שמרכיבים את המשאב המותאם אישית. בדוגמה הזו, השדות נקראיםfield_1ו-field_2.מציינים
providerFunctionשהערך שלו הוא שם של פונקציה בקוד של השלב. providerFunctionמאחזר תוכן בפועל של משאב בהתאמה אישית כשצריך.JSON
{ "workflowResourceDefinitions": [ { "id": "resource_id", "name": "Custom Resource", "fields": [ { "selector": "field_1", "name": "Field 1", "dataType": { "basicType": "STRING" } }, { "selector": "field_2", "name": "Field 2", "dataType": { "basicType": "STRING" } } ], "providerFunction": "onExecuteResourceAsValuesFunction" } ] }ב-
outputs[], מציינים משתנה פלט שמחזיר את הערךresourceValues. הערך שלcardinalityחייב להיותSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceValues": { "value1": "value one" } } } ] }
זו דוגמה לקובץ מניפסט מלא שמגדיר משאב בהתאמה אישית:
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceValues": {
"value1": "value one"
}
}
}
],
"onConfigFunction": "onConfigResourceFunction",
"onExecuteFunction": "onExecuteResourceFunction"
}
}
],
"workflowResourceDefinitions": [
{
"id": "resource_id",
"name": "Custom Resource",
"fields": [
{
"selector": "field_1",
"name": "Field 1",
"dataType": {
"basicType": "STRING"
}
},
{
"selector": "field_2",
"name": "Field 2",
"dataType": {
"basicType": "STRING"
}
}
],
"providerFunction": "onExecuteResourceAsValuesFunction"
}
]
}
}
}
עריכת הקוד
בקוד האפליקציה, מטמיעים את providerFunction, שנקרא onExecuteResourceAsValuesFunction() בדוגמה הזו, שמגדיר ומחזיר את המשאב המותאם אישית כ-JSON, שמוצג כאן בצורה מופשטת כ-resourceJSON:
Apps Script
function onExecuteResourceAsValuesFunction() {
var field_1 = "value 1";
var field_2 = "value 2";
var resourceJSON = JSON.stringify({
"field_1": field_1,
"field_2": field_2,
});
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceValues" : [ resourceJSON ]
}
}]
}
}
}
};
}