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 resultado 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.
Genera un recurso personalizado como referencia
Si generas un recurso personalizado como referencia, puedes mostrarlo 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 transferidos 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, unfields[]array 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 real del recurso personalizado 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 muestre un conjunto dinámico de variables de salida. La variable de salida tiene undataTypecon la propiedadresourceType. El valor decardinalitydebe serSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
A continuación, se muestra 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, haz lo siguiente:
Implementa la
providerFunction, llamadaonMessageResourceFunction()en este ejemplo, que recupera el contenido del recurso personalizado cuando es necesario. Toma la entradae, que es la carga útil de JSON del objeto de evento del paso , y a partir de ella, establece el ID del 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 mostrar 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 mostrar un recurso personalizado por su ID, muéstralo 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(); }
A continuación, se muestra 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
- Valida una variable de entrada
- Variables de salida
- Registro de actividad y errores
- Objetos de evento de Workspace Studio