Menentukan variabel dinamis

Panduan ini menjelaskan cara membuat variabel dinamis.

Jika memungkinkan, variabel harus ditentukan secara statis dalam file manifes sebagai variabel input atau output. Namun, beberapa situasi memerlukan variabel yang hanya dapat ditentukan saat pengguna mengonfigurasi alur karena sifat inputnya bervariasi. Misalnya, jumlah pertanyaan dan jawaban (serta kontennya) untuk Google Formulir tidak dapat ditentukan hingga formulir tertentu dipilih selama konfigurasi alur.

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 ini dataType sebesar "workflowResourceDefinitionId": "dynamic_resource_id".

  • Tentukan resource kustom untuk menangani variabel dinamis. Tentukan workflowResourceDefinitions dengan "resourceType": "DYNAMIC" dan "providerFunction": "onDynamicProviderFunction". id harus cocok dengan workflowResourceDefinitionId yang ditetapkan di outputs[]. Untuk mempelajari resource kustom lebih lanjut, lihat Menentukan resource kustom.

  • Tetapkan dynamicResourceDefinitionProvider ke nama fungsi yang sesuai dalam kode langkah, dalam contoh ini onDynamicDefinitionFunction(), 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": "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",
}

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 nilai onConfigFunction() dalam file manifes. Nama widget input dinamis harus cocok dengan id yang ditetapkan dalam file manifes. Widget input dinamis ini memungkinkan pengguna menetapkan variabel dinamis saat mengonfigurasi alur mereka, seperti memilih Google Formulir.
  • onDynamicVariableExecuteFunction(), yang menampilkan data variabel dinamis sebagai output saat langkah dijalankan. Nama fungsi ini harus cocok dengan nilai onExecuteFunction() dalam file manifes. variableId dari returnOutputVariablesAction harus cocok dengan id variabel output yang ditetapkan dalam file manifes. Resource dinamis ditemukan pada objek peristiwa alur di e.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 alur, khususnya resourceFieldsDefinitionRetrieval, dan menampilkan resourceFieldsDefinitionRetrievedAction yang menyediakan data dalam JSON yang dapat digunakan sebagai output untuk langkah-langkah selanjutnya. resourceId harus cocok dengan id item dalam set array workflowResourceDefinitions[] yang ditetapkan dalam file manifes.
  • onDynamicProviderFunction(), yang mengambil variabel dinamis dari objek peristiwa alur di e.workflow.resourceRetrieval.resourceReference.resourceId dan menampilkan JSON sebagai output untuk langkah-langkah selanjutnya.

Apps Script

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",
          })
        }
      }
    }
  };
}