Ce guide explique comment définir des ressources personnalisées pour Google Workspace Studio.
Les ressources personnalisées sont des structures de données personnalisées que vous pouvez définir pour regrouper plusieurs variables. Lorsque la sortie d'une étape a une structure statique, représentez-la avec une ressource personnalisée. Par exemple, pour créer un prospect CRM, votre sortie nécessite plusieurs variables :
- Adresse e-mail
- Adresse postale
- Nom
Pour vous assurer que toutes les données requises pour créer un prospect CRM sont présentes, générez une ressource personnalisée contenant une adresse e-mail, une adresse postale et un nom.
Afficher une ressource personnalisée comme référence
En générant une ressource personnalisée en tant que référence, vous pouvez renvoyer la ressource personnalisée par son ID au lieu de l'objet de ressource personnalisée complet. Si une ressource personnalisée est volumineuse ou complexe, le fait de ne transmettre que l'ID améliore les performances en réduisant les données transférées entre les étapes.
Pour générer une ressource personnalisée en tant que référence, modifiez le fichier manifeste et le code de l'étape.
Modifier le fichier manifeste
Dans le fichier manifeste :
Spécifiez un
workflowResourceDefinitionset attribuez-lui unid, un tableaufields[]et unproviderFunction.workflowResourceDefinitionsest une structure qui définit les types de données et le contenu de la ressource personnalisée.Dans le tableau
fields[], vous spécifiez les champs individuels qui composent la ressource personnalisée, appelésfield_1etfield_2dans cet exemple.La valeur de
providerFunctiondoit correspondre au nom d'une fonction dans le code de l'étape.providerFunctionrécupère le contenu réel de la ressource personnalisée si nécessaire.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" } ] }Dans
outputs[], spécifiez une variable de sortie qui renvoie un ensemble dynamique de variables de sortie. La variable de sortie possède undataTypeavec la propriétéresourceType. La valeur decardinalitydoit êtreSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
Voici un fichier manifeste complet qui définit une ressource personnalisée :
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"
}
]
}
}
}
Modifier le code
Dans le code de l'application :
Implémentez
providerFunction, appeléonMessageResourceFunction()dans cet exemple, qui récupère le contenu de la ressource personnalisée si nécessaire. Il prend l'entréee, qui correspond à la charge utile JSON de l'objet d'événement de l'étape, et définit l'ID de ressource personnalisé à partir de celle-ci.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 fonction de fournisseur doit renvoyer la valeur de la ressource personnalisée en la récupérant avec un mécanisme approprié, comme l'appel d'une API ou la lecture d'une base de données.
Pour récupérer et renvoyer une ressource personnalisée par son ID, renvoyez-la en tant que
returnOutputVariablesAction, comme indiqué dansonExecuteResourceFunction().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(); }
Voici un exemple complet :
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();
}
Articles associés
- Variables d'entrée
- Valider une variable d'entrée
- Variables de sortie
- Consigner l'activité et les erreurs
- Objets d'événement Workspace Studio