Questa guida spiega come definire risorse personalizzate per Google Workspace Studio.
Le risorse personalizzate sono strutture di dati personalizzate che puoi definire per raggruppare più variabili. Quando l'output di un passaggio ha una struttura statica, rappresentalo con una risorsa personalizzata. Ad esempio, per creare un lead CRM, l'output richiede più variabili:
- Indirizzo email
- Via
- Nome
Per garantire la presenza di tutti i dati necessari per creare un lead CRM, genera una risorsa personalizzata contenente un indirizzo email, un indirizzo e un nome.
Generare una risorsa personalizzata come riferimento
Se restituisci una risorsa personalizzata come riferimento, puoi restituire la risorsa personalizzata in base al suo ID anziché all'oggetto risorsa personalizzata completo. Se una risorsa personalizzata è grande o complessa, il passaggio del solo ID migliora le prestazioni riducendo i dati trasferiti tra i passaggi.
Per generare un output di una risorsa personalizzata come riferimento, modifica il file manifest e il codice del passaggio.
Modificare il file manifest
Nel file manifest:
Specifica un
workflowResourceDefinitionse assegnagli unid, un arrayfields[]e unproviderFunction.workflowResourceDefinitionsè una struttura che definisce i tipi di dati e i contenuti della risorsa personalizzata.All'interno dell'array
fields[], specifica i singoli campi che compongono la risorsa personalizzata, in questo esempio denominatafield_1efield_2.Il valore di
providerFunctiondeve corrispondere al nome di una funzione nel codice del passaggio.providerFunctionrecupera i contenuti effettivi delle risorse personalizzate quando necessario.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" } ] }In
outputs[], specifica una variabile di output che restituisce un insieme dinamico di variabili di output. La variabile di output ha undataTypecon la proprietàresourceType. Il valore dicardinalitydeve essereSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
Ecco un file manifest completo che definisce una risorsa personalizzata:
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Custom Resource (as reference)",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceDataReference",
"state": "ACTIVE",
"name": "Custom Resource (as reference)",
"description": "Output a custom resource as a reference",
"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"
}
]
}
}
}
Modifica il codice
Nel codice dell'applicazione:
Implementa
providerFunction, denominatoonMessageResourceFunction()in questo esempio, che recupera i contenuti delle risorse personalizzate quando necessario. Prende l'inpute, ovvero il payload JSON dell'oggetto evento del passaggio, e imposta l'ID risorsa personalizzato.Apps Script
function onMessageResourceFunction(e) { console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e)); var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; let fieldValue_1; let fieldValue_2; // Using a if-condition to mock a database call. if (resource_id == "sample_resource_reference_id") { fieldValue_1 = AddOnsResponseService.newVariableData() .addStringValue("value1"); fieldValue_2 = AddOnsResponseService.newVariableData() .addStringValue("value2"); } else { fieldValue_1 = AddOnsResponseService.newVariableData() .addStringValue("field_1 value not found"); fieldValue_2 = AddOnsResponseService.newVariableData() .addStringValue("field_2 value not found"); } let resourceData = AddOnsResponseService.newResourceData() .addVariableData("field_1", fieldValue_1) .addVariableData("field_2", fieldValue_2) let workflowAction = AddOnsResponseService.newResourceRetrievedAction() .setResourceData(resourceData) let hostAppAction = AddOnsResponseService.newHostAppAction() .setWorkflowAction(workflowAction); return AddOnsResponseService.newRenderActionBuilder() .setHostAppAction(hostAppAction) .build(); }La funzione del fornitore deve restituire il valore della risorsa personalizzata recuperandolo con un meccanismo appropriato, ad esempio chiamando un'API o leggendo un database.
Per recuperare e restituire una risorsa personalizzata in base al suo ID, restituiscila come
returnOutputVariablesAction, come mostrato inonExecuteResourceFunction().Apps Script
function onExecuteResourceFunction(e) { console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e)); let outputVariables = AddOnsResponseService.newVariableData() .addResourceReference("sample_resource_reference_id"); let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction() .addVariableData("resource_data", outputVariables); let hostAppAction = AddOnsResponseService.newHostAppAction() .setWorkflowAction(workflowAction); return AddOnsResponseService.newRenderActionBuilder() .setHostAppAction(hostAppAction) .build(); }
Ecco un esempio completo:
Apps Script
function onConfigResourceFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextParagraph()
.setText("This is the Custom Resource Demo card")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onMessageResourceFunction(e) {
console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e));
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
let fieldValue_1;
let fieldValue_2;
// Using a if-condition to mock a database call.
if (resource_id == "sample_resource_reference_id") {
fieldValue_1 = AddOnsResponseService.newVariableData()
.addStringValue("value1");
fieldValue_2 = AddOnsResponseService.newVariableData()
.addStringValue("value2");
} else {
fieldValue_1 = AddOnsResponseService.newVariableData()
.addStringValue("field_1 value not found");
fieldValue_2 = AddOnsResponseService.newVariableData()
.addStringValue("field_2 value not found");
}
let resourceData = AddOnsResponseService.newResourceData()
.addVariableData("field_1", fieldValue_1)
.addVariableData("field_2", fieldValue_2)
let workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(resourceData)
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
function onExecuteResourceFunction(e) {
console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e));
let outputVariables = AddOnsResponseService.newVariableData()
.addResourceReference("sample_resource_reference_id");
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.addVariableData("resource_data", outputVariables);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
Argomenti correlati
- Variabili di input
- Convalidare una variabile di input
- Variabili di output
- Registrare attività ed errori
- Oggetti evento di Workspace Studio