Z tego przewodnika dowiesz się, jak definiować zasoby niestandardowe w Google Workspace Studio.
Zasoby niestandardowe to struktury danych, które możesz zdefiniować, aby grupować ze sobą wiele zmiennych. Jeśli dane wyjściowe kroku mają statyczną strukturę, reprezentuj je za pomocą zasobu niestandardowego. Aby na przykład utworzyć potencjalnego klienta w systemie CRM, dane wyjściowe muszą zawierać kilka zmiennych:
- Adres e-mail
- Ulica i numer
- Nazwa
Aby mieć pewność, że masz wszystkie dane potrzebne do utworzenia potencjalnego klienta w systemie CRM, wygeneruj zasób niestandardowy zawierający adres e-mail, adres pocztowy i imię.
Wyświetlanie niestandardowego zasobu jako odwołania
Wyprowadzając zasób niestandardowy jako odniesienie, możesz zwrócić zasób niestandardowy według jego identyfikatora zamiast pełnego obiektu zasobu niestandardowego. Jeśli zasób niestandardowy jest duży lub złożony, przekazywanie tylko identyfikatora zwiększa wydajność, ponieważ zmniejsza ilość danych przesyłanych między poszczególnymi krokami.
Aby wygenerować niestandardowy zasób jako odwołanie, edytuj plik manifestu kroku i kod.
Edytowanie pliku manifestu
W pliku manifestu:
Określ
workflowResourceDefinitionsi przypisz do niegoid, tablicęfields[]iproviderFunction.workflowResourceDefinitionsto struktura, która określa typy danych i zawartość zasobu niestandardowego.W tablicy
fields[]określasz poszczególne pola, które składają się na zasób niestandardowy, w tym przykładzie o nazwachfield_1ifield_2.Wartość parametru
providerFunctionmusi odpowiadać nazwie funkcji w kodzie kroku.providerFunctionpobiera w razie potrzeby rzeczywistą zawartość zasobu niestandardowego.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" } ] }W
outputs[]określ zmienną wyjściową, która zwraca dynamiczny zbiór zmiennych wyjściowych. Zmienna wyjściowa madataTypez właściwościąresourceType. Wartośćcardinalitymusi wynosićSINGLE.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } } ], }
Oto pełny plik manifestu, który definiuje zasób niestandardowy:
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"
}
]
}
}
}
Edytuj kod
W kodzie aplikacji:
Zaimplementuj funkcję
providerFunction, która w tym przykładzie ma nazwęonMessageResourceFunction()i w razie potrzeby pobiera zawartość zasobu niestandardowego. Pobiera dane wejściowee, czyli ładunek JSON obiektu zdarzenia kroku, i na jego podstawie ustawia niestandardowy identyfikator zasobu.Google 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(); }Funkcja dostawcy musi zwracać wartość zasobu niestandardowego, pobierając ją za pomocą odpowiedniego mechanizmu, np. wywołując interfejs API lub odczytując bazę danych.
Aby pobrać i zwrócić zasób niestandardowy według jego identyfikatora, zwróć go jako
returnOutputVariablesAction, jak pokazano wonExecuteResourceFunction().Google 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(); }
Oto pełny przykład:
Google 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();
}
Powiązane artykuły
- Zmienne wejściowe
- Sprawdzanie poprawności zmiennej wejściowej
- Zmienne wyjściowe
- Rejestrowanie aktywności i błędów
- Obiekty zdarzeń Workspace Studio