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 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ışa dataType of "workflowResourceDefinitionId": "dynamic_resource_id" verin.

  • Dinamik değişkeni işlemek için özel bir kaynak tanımlayın. workflowResourceDefinitions, "resourceType": "DYNAMIC" ve "providerFunction": "onDynamicProviderFunction" ile birlikte belirtilmelidir. 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 işlevin adıyla (bu örnekte, dinamik giriş değerini kabul eden ve özel bir kaynak döndüren bir yapılandırma kartını tanımlayan ve döndüren onDynamicDefinitionFunction()) değiştirin.

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": "STRING"
          }
       }
      ],
      "outputs": [
        {
          "id": "dynamic_resource_output",
          "description": "Dynamic Data",
          "cardinality": "SINGLE",
          "dataType": {
            "resourceType": {
              "workflowResourceDefinitionId": "dynamic_resource_id"
            }
          }
        }
      ],
      "onConfigFunction": "onDynamicVariableConfigFunction",
      "onExecuteFunction": "onDynamicVariableExecuteFunction"
    }
  }],
  "workflowResourceDefinitions": [{
    "id": "dynamic_resource_id",
    "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 akışlarını yapılandırırken dinamik bir değişken ayarlamasına (ör. Google Form seçme) olanak tanır.
  • onDynamicVariableExecuteFunction(), adım çalıştırıldığında dinamik değişken verilerini çıkış olarak döndürür. Bu işlevin adı, manifest dosyasındaki onExecuteFunction() değerine uygun olmalıdır. variableId returnOutputVariablesAction, manifesto dosyasında ayarlanan çıkış değişkeninin id ile eşleşmelidir. Dinamik kaynak, akış etkinliği nesnesinde e.workflow.resourceFieldsDefinitionRetrieval konumunda 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 (özellikle resourceFieldsDefinitionRetrieval) alır ve sonraki adımlarda kullanılabilir JSON biçiminde veri sağlayan resourceFieldsDefinitionRetrievedAction döndürür. resourceId, manifest dosyasında ayarlanan workflowResourceDefinitions[] dizisindeki bir öğenin id ile eşleşmelidir.
  • onDynamicProviderFunction(), e.workflow.resourceRetrieval.resourceReference.resourceId konumundaki akış etkinliği nesnesinden dinamik değişkeni alır ve sonraki adımlar için çıkış olarak JSON döndürür.

Apps Komut Dosyası

function onDynamicVariableConfigFunction() {
  var card = {
    "sections": [
      {
        "widgets": [
          {
            "textInput": {
              "name": "dynamic_resource_input",
              "label": "Dynamic Resource Input",
            }
          },
        ]
      }
    ]
  };
  return {
    "action": {
      "navigations": [{
        "push_card": card
      }]
    }
  };
}

function onDynamicVariableExecuteFunction(){
  var dynamic_resource_id = uuidv4();
  return {
    "hostAppAction": {
      "workflowAction": {
        "returnOutputVariablesAction": {
          "variableValues": [{
            "variableId": "dynamic_resource_output",
            "variableData": {
              "resourceReferences" : [ dynamic_resource_id ]
            }
          }]
        }
      }
    }
  };
}

function onDynamicDefinitionFunction(e) {
  var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.stringValues[0];
  // input_value == "dynamic_resource_input"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceFieldsDefinitionRetrievedAction": {
          "dynamicResourceDefinitions": [{
            "resourceId": "dynamic_resource_id",
            "fields": [{
                "selector":  "question_1",
                "displayText": "Question 1"
            },{
                "selector":  "question_2",
                "displayText": "Question 2"
            },{
                "selector":  "question_3",
                "displayText": "Question 3"
            }]
          }]
        }
      }
    }
  };
}

function onDynamicProviderFunction(e) {
  var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
  // resourceId == uuidv4();

  var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
  // workflowResourceDefinitionId == "dynamic_resource_id"

  return {
    "hostAppAction": {
      "workflowAction": {
        "resourceRetrievedAction": {
          "resourceJson": JSON.stringify({
            "question_1": "Answer 1",
            "question_2": "Answer 2",
            "question_3": "Answer 3",
          })
        }
      }
    }
  };
}