Panduan ini menjelaskan cara membuat variabel dinamis.
Jika memungkinkan, variabel harus ditentukan secara statis dalam file manifes sebagai variabel input, variabel output, atau resource kustom. Namun, beberapa situasi memerlukan variabel yang hanya dapat ditentukan saat pengguna mengonfigurasi agen karena sifat inputnya bervariasi. Misalnya, jumlah pertanyaan dan jawaban (serta kontennya) untuk Google Formulir tidak dapat ditentukan hingga formulir tertentu dipilih selama konfigurasi agen.
Variabel dinamis memperhitungkan kasus ini dengan memungkinkan Anda menentukan input yang menghasilkan serangkaian output dinamis dalam file manifes dan dalam kode langkah.
Menentukan variabel output dalam file manifes
Di file manifes, ikuti langkah-langkah berikut:
Di
inputs[], tentukan variabel input yang menerima nilai input dinamis.Di
outputs[], tentukan variabel output yang menampilkan kumpulan variabel output dinamis. Beri output inidataTypesebesar"workflowResourceDefinitionId": "dynamic_resource_id".Tentukan resource kustom untuk menangani variabel dinamis. Tentukan
workflowResourceDefinitionsdengan"resourceType": "DYNAMIC"dan"providerFunction": "onDynamicProviderFunction".idharus cocok denganworkflowResourceDefinitionIdyang ditetapkan dioutputs[]. Untuk mempelajari resource kustom lebih lanjut, lihat Menentukan resource kustom.Tetapkan
dynamicResourceDefinitionProviderke nama fungsi yang sesuai dalam kode langkah, dalam contoh inionDynamicDefinitionFunction(), yang menentukan dan menampilkan kartu konfigurasi yang menerima nilai input dinamis dan menampilkan resource kustom.
JSON
"flows": {
"workflowElements" : [{
"id": "getDynamicVariable",
"state": "ACTIVE",
"name": "Get Dynamic Variable",
"description": "Get Dynamic Variable",
"workflowAction": {
"inputs": [
{
"id": "dynamic_resource_input",
"description": "Dynamic Resource Input",
"cardinality": "SINGLE",
"dataType": {
"basicType": "INTEGER"
}
}
],
"outputs": [
{
"id": "dynamic_resource_output",
"description": "Dynamic Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_definition_1"
}
}
}
],
"onConfigFunction": "onDynamicVariableConfigFunction",
"onExecuteFunction": "onDynamicVariableExecuteFunction"
}
}],
"workflowResourceDefinitions": [{
"id": "resource_definition_1",
"name": "Dynamic Resource",
"providerFunction": "onDynamicProviderFunction",
"resourceType" : "DYNAMIC"
}],
"dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}
Menentukan variabel output dalam kode
Kode langkah mencakup fungsi berikut:
onDynamicVariableConfigFunction(), yang membuat dan menampilkan kartu konfigurasi dengan widget input dinamis. Nama fungsi ini harus cocok dengan nilaionConfigFunction()dalam file manifes. Nama widget input dinamis harus cocok denganidyang ditetapkan dalam file manifes. Widget input dinamis ini memungkinkan pengguna menetapkan variabel dinamis saat mengonfigurasi langkah mereka, seperti memilih Google Formulir.onDynamicVariableExecuteFunction(), yang menampilkan data variabel dinamis sebagai output saat langkah dijalankan. Nama fungsi ini harus cocok dengan nilaionExecuteFunction()dalam file manifes. KuncivariableDatadireturnOutputVariablesActionharus cocok denganidvariabel output yang ditetapkan dalam file manifes. Resource dinamis ditemukan pada objek peristiwa die.workflow.resourceFieldsDefinitionRetrieval. Input tidak dapat mereferensikan variabel karena semua input untuk resource dinamis harus tersedia pada waktu konfigurasi.onDynamicDefinitionFunction(), yang mengambil data variabel dinamis dari objek peristiwa, khususnyaresourceFieldsDefinitionRetrieval, dan menampilkanresourceFieldsDefinitionRetrievedActionyang memberikan nama variabel output untuk langkah-langkah selanjutnya, dan juga pemilih sehinggaonDynamicProviderFunction()dapat memberikan nilai yang sesuai untuk setiap variabel output.resourceIdharus cocok denganiditem dalam set arrayworkflowResourceDefinitions[]yang ditetapkan dalam file manifes.onDynamicProviderFunction(), yang memberikan nilai untuk setiap variabel output menggunakan pemilih sebagai kunci dengan mengaksesresourceIddanworkflowResourceDefinitionId.
Apps Script
function onDynamicVariableConfigFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextInput()
.setFieldName("dynamic_resource_input")
.setTitle("Dynamic Resource Input")
.setHint("Input a Integer value between 1 and 3\(inclusive\) for corresponding number of output variables")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onDynamicDefinitionFunction(e) {
console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];
let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
.setResourceId("resource_definition_1")
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_1")
.setDisplayText("Question 1")
);
if (input_value == 2 || input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_2")
.setDisplayText("Question 2")
);
}
if (input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_3")
.setDisplayText("Question 3")
);
}
let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
.addDynamicResourceDefinition(resourceDefinitions);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicVariableExecuteFunction(e) {
console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.setVariableDataMap({
"dynamic_resource_output": AddOnsResponseService.newVariableData()
.addResourceReference("my_dynamic_resource_id")
});
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicProviderFunction(e) {
console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));
// resourceId == "my_dynamic_resource_id"
var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
// workflowResourceDefinitionId == "resource_definition_1"
var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(
AddOnsResponseService.newResourceData()
.addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
.addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
.addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
);
const hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
const renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
Topik terkait
- Variabel input
- Memvalidasi variabel input
- Variabel output
- Menentukan resource kustom
- Mencatat aktivitas dan error
- Objek peristiwa Workspace Studio