Bu kılavuzda, dinamik değişken oluşturma işlemi açıklanmaktadır.
Mümkün olduğunda, bir değişken manifest dosyasında giriş veya çıkış değişkeni olarak statik olarak tanımlanmalıdır. Ancak bazı durumlarda, girişin yapısı değiştiği için yalnızca kullanıcı akışı yapılandırdığında tanımlanabilen bir değişken gerekir. Örneğin, akış yapılandırması sırasında belirli bir form seçilene kadar Google Formlar'daki soru ve yanıt sayısı (ve içerikleri) belirlenemez.
Dinamik değişkenler, giriş tanımlamanıza olanak tanıyarak bu durumları hesaba katar. Bu giriş, manifesto dosyasında ve adımın kodunda dinamik bir çıkış grubu oluşturur.
Çıkış değişkenini manifest dosyasında tanımlayın
Manifest dosyasında şu adımları uygulayın:
inputs[]içinde, dinamik giriş değeri kabul eden bir giriş değişkeni belirtin.outputs[]içinde, dinamik bir çıktı değişkenleri grubu döndüren bir çıktı değişkeni belirtin. Bu çıkışadataTypeof"workflowResourceDefinitionId": "dynamic_resource_id"verin.Dinamik değişkeni işlemek için özel bir kaynak tanımlayın.
workflowResourceDefinitionsdeğerini"resourceType": "DYNAMIC"ve"providerFunction": "onDynamicProviderFunction"ile birlikte belirtin.id,outputs[]içinde ayarlananworkflowResourceDefinitionIdile eşleşmelidir. Özel kaynaklar hakkında daha fazla bilgi edinmek için Özel kaynak tanımlama başlıklı makaleyi inceleyin.dynamicResourceDefinitionProviderdeğerini, adımın kodundaki ilgili bir işlevin adıyla (bu örnekteonDynamicDefinitionFunction()) değiştirin. Bu işlev, dinamik bir giriş değerini kabul eden ve özel bir kaynak döndüren bir yapılandırma kartını tanımlar ve döndürür.
JSON
{
"timeZone": "America/Toronto",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Dynamic Variable Demo",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
"useLocaleFromApp": true
},
"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"
}
}
}
Çıkış değişkenini kodda tanımlama
Adımın kodu şu işlevleri içerir:
onDynamicVariableConfigFunction(), dinamik giriş widget'ı içeren bir yapılandırma kartı oluşturup döndürür. Bu işlevin adı, manifest dosyasındakionConfigFunction()değerine uymalıdır. Dinamik giriş widget'ının adı, manifest dosyasında ayarlananidile eşleşmelidir. Bu dinamik giriş widget'ı, kullanıcıların akışlarını yapılandırırken dinamik bir değişken ayarlamasına (ör. Google Form seçme) olanak tanır.- Adım çalıştırıldığında çıkış olarak dinamik değişken verilerini döndüren
onDynamicVariableExecuteFunction(). Bu işlevin adı, manifest dosyasındakionExecuteFunction()değerine uygun olmalıdır.variableIdreturnOutputVariablesAction, manifesto dosyasında ayarlanan çıkış değişkenininidile eşleşmelidir. Dinamik kaynak, akış etkinliği nesnesindee.workflow.resourceFieldsDefinitionRetrievalkonumunda bulunur. Giriş, değişkenlere referans veremez. Bunun nedeni, dinamik bir kaynağın tüm girişlerinin yapılandırma sırasında kullanılabilir olması gerektiğidir. onDynamicDefinitionFunction(), akış etkinliği nesnesinden dinamik değişken verilerini (özellikleresourceFieldsDefinitionRetrieval) alır ve sonraki adımlarda kullanılabilir JSON biçiminde veri sağlayanresourceFieldsDefinitionRetrievedActiondeğerini döndürür.resourceId, manifest dosyasında ayarlananworkflowResourceDefinitions[]dizisindeki bir öğeninidile eşleşmelidir.onDynamicProviderFunction(),e.workflow.resourceRetrieval.resourceReference.resourceIdkonumundaki akış etkinliği nesnesinden dinamik değişkeni alır ve sonraki adımlarda kullanılmak üzere JSON olarak döndürür.
Apps Komut Dosyası
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;
}
İlgili konular
- Giriş değişkenleri
- Giriş değişkenini doğrulama
- Çıkış değişkenleri
- Özel kaynak tanımlama
- Etkinlikleri ve hataları günlüğe kaydetme
- Akış etkinliği nesnesi