Dinamik değişken tanımlama

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 statik olarak tanımlanmalıdır. Bu değişken, giriş değişkeni, çıkış değişkeni veya özel kaynak olarak tanımlanabilir. Ancak bazı durumlarda, girişin yapısı değiştiği için yalnızca kullanıcı aracıyı yapılandırdığında tanımlanabilen bir değişken gerekir. Örneğin, bir Google Formlar'daki soru ve yanıt sayısı (ve içerikleri), aracı yapılandırması sırasında belirli bir form seçilene kadar 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ışa dataType of "workflowResourceDefinitionId": "dynamic_resource_id" verin.

  • Dinamik değişkeni işlemek için özel bir kaynak tanımlayın. workflowResourceDefinitions değerini "resourceType": "DYNAMIC" ve "providerFunction": "onDynamicProviderFunction" ile birlikte belirtin. id, outputs[] içinde ayarlanan workflowResourceDefinitionId ile eşleşmelidir. Özel kaynaklar hakkında daha fazla bilgi edinmek için Özel kaynak tanımlama başlıklı makaleyi inceleyin.

  • dynamicResourceDefinitionProvider değerini, adımın kodundaki ilgili bir işlevin adıyla (bu örnekte onDynamicDefinitionFunction()) 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

"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ındaki onConfigFunction() değerine uymalıdır. Dinamik giriş widget'ının adı, manifest dosyasında ayarlanan id ile eşleşmelidir. Bu dinamik giriş widget'ı, kullanıcıların adımları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ındaki onExecuteFunction() değerine uygun olmalıdır. returnOutputVariablesAction içindeki variableData anahtarı, manifest dosyasında ayarlanan çıkış değişkeninin id ile eşleşmelidir. Dinamik kaynak, etkinlik nesnesinde e.workflow.resourceFieldsDefinitionRetrieval konumunda bulunur. Giriş, değişkenlere referans veremez. Çünkü dinamik bir kaynağın tüm girişleri yapılandırma sırasında kullanılabilir olmalıdır.
  • onDynamicDefinitionFunction(), etkinlik nesnesinden dinamik değişken verilerini alır (özellikle resourceFieldsDefinitionRetrieval) ve resourceFieldsDefinitionRetrievedAction döndürür. resourceFieldsDefinitionRetrievedAction, sonraki adımlar için çıkış değişkenlerinin adını ve onDynamicProviderFunction()'ün her çıkış değişkenine karşılık gelen değeri sağlayabilmesi için seçicileri de içerir. resourceId, manifest dosyasında ayarlanan workflowResourceDefinitions[] dizisindeki bir öğenin id ile eşleşmelidir.
  • onDynamicProviderFunction(), resourceId ve workflowResourceDefinitionId'ye erişerek seçicileri anahtar olarak kullanarak her çıkış değişkeni için bir değer sağlar.

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;
}