En esta guía, se explica cómo definir recursos personalizados para Google Workspace Studio.
Los recursos personalizados son estructuras de datos personalizadas que puedes definir para agrupar varias variables. Cuando el resultado de un paso tiene una estructura estática, represéntalo con un recurso personalizado. Por ejemplo, para crear un cliente potencial de CRM, tu salida requiere varias variables:
- Dirección de correo electrónico
- Dirección
- Nombre
Para garantizar la presencia de todos los datos necesarios para crear un cliente potencial de CRM, genera un recurso personalizado que contenga una dirección de correo electrónico, una dirección y un nombre.
Cómo generar un recurso personalizado como referencia
Si generas un recurso personalizado como referencia, puedes devolver el recurso personalizado por su ID en lugar del objeto de recurso personalizado completo. Si un recurso personalizado es grande o complejo, pasar solo el ID mejora el rendimiento, ya que reduce los datos que se transfieren entre los pasos.
Para generar un recurso personalizado como referencia, edita el archivo de manifiesto y el código del paso.
Edita el archivo de manifiesto
En el archivo de manifiesto, haz lo siguiente:
Especifica un
workflowResourceDefinitionsy asígnale unid, un array defields[]y unproviderFunction. ElworkflowResourceDefinitionses una estructura que define los tipos de datos y el contenido del recurso personalizado.Dentro del array
fields[], especifica los campos individuales que componen el recurso personalizado, en este ejemplo llamadosfield_1yfield_2.El valor de
providerFunctiondebe coincidir con el nombre de una función en el código del paso. ElproviderFunctionrecupera el contenido del recurso personalizado real cuando es necesario.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" } ] }En
outputs[], especifica una variable de salida que devuelva un conjunto dinámico de variables de salida. La variable de resultado tiene undataTypecon la propiedadresourceType. El valor decardinalitydebe serSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
Este es un archivo de manifiesto completo que define un recurso personalizado:
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"
}
]
}
}
}
Editar código
En el código de la aplicación:
Implementa
providerFunction, llamadoonMessageResourceFunction()en este ejemplo, que recupera contenido de recursos personalizados cuando es necesario. Toma la entradae, que es la carga útil JSON del objeto de evento del paso, y, a partir de ella, establece el ID de recurso personalizado.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 función del proveedor debe devolver el valor del recurso personalizado recuperándolo con un mecanismo adecuado, como llamar a una API o leer una base de datos.
Para recuperar y devolver un recurso personalizado por su ID, devuélvelo como
returnOutputVariablesAction, como se muestra enonExecuteResourceFunction().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(); }
Este es un ejemplo 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();
}
Temas relacionados
- Variables de entrada
- Cómo validar una variable de entrada
- Variables de salida
- Registra la actividad y los errores
- Objetos de eventos de Workspace Studio