定義動態變數

本指南說明如何建立動態變數。

盡可能在資訊清單檔案中,將變數靜態定義為輸入或輸出變數。不過,在某些情況下,使用者設定流程時,可能需要定義只能在該流程中使用的變數,因為輸入內容的性質各不相同。舉例來說,在流程設定期間選取特定表單之前,系統無法判斷 Google 表單的問題和答案數量 (以及內容)。

動態變數可讓您定義輸入內容,在資訊清單檔案和步驟的程式碼中產生動態輸出內容集,藉此處理這些情況。

在資訊清單檔案中定義輸出變數

在資訊清單檔案中,按照下列步驟操作:

  • inputs[] 中,指定接受動態輸入值的輸入變數。

  • outputs[] 中,指定會傳回動態輸出變數集的輸出變數。將此輸出內容的 dataType 設為 "workflowResourceDefinitionId": "dynamic_resource_id"

  • 定義自訂資源來處理動態變數。請使用 "resourceType": "DYNAMIC""providerFunction": "onDynamicProviderFunction" 指定 workflowResourceDefinitionsid 必須與 outputs[] 中設定的 workflowResourceDefinitionId 相符。如要進一步瞭解自訂資源,請參閱「定義自訂資源」。

  • dynamicResourceDefinitionProvider 設為步驟程式碼中對應函式的名稱,在本例中為 onDynamicDefinitionFunction(),該函式會定義並傳回設定資訊卡,該資訊卡會接受動態輸入值並傳回自訂資源。

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

在程式碼中定義輸出變數

步驟的程式碼包含下列函式:

  • ,可建構並傳回含有動態輸入小工具的設定資訊卡。onDynamicVariableConfigFunction()這個函式的名稱必須與資訊清單檔案中的 onConfigFunction() 值相符。動態輸入小工具的名稱必須與資訊清單檔案中設定的 id 相符。使用者設定流程時,可透過這個動態輸入小工具設定動態變數,例如選擇 Google 表單。
  • onDynamicVariableExecuteFunction(),在步驟執行時,會以輸出內容的形式傳回動態變數資料。這個函式的名稱必須與資訊清單檔案中的 onExecuteFunction() 值相符。variableIdreturnOutputVariablesAction 必須與資訊清單檔案中設定的輸出變數 id 相符。動態資源位於 e.workflow.resourceFieldsDefinitionRetrieval 的流程事件物件中。輸入內容無法參照變數,因為動態資源的所有輸入內容都必須在設定時間提供。
  • onDynamicDefinitionFunction(),從流程事件物件 (具體來說是 resourceFieldsDefinitionRetrieval) 擷取動態變數資料,並傳回 resourceFieldsDefinitionRetrievedAction,以提供可用的 JSON 格式資料,做為後續步驟的輸出內容。resourceId 必須與資訊清單檔案中 workflowResourceDefinitions[] 陣列內項目的 id 相符。
  • ,從 e.workflow.resourceRetrieval.resourceReference.resourceId 的流程事件物件中擷取動態變數,並以 JSON 格式傳回輸出內容,供後續步驟使用。onDynamicProviderFunction()

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