本指南說明如何建立動態變數。
盡可能在資訊清單檔案中,將變數靜態定義為輸入或輸出變數。不過,在某些情況下,使用者設定流程時,可能需要定義只能在該流程中使用的變數,因為輸入內容的性質各不相同。舉例來說,在流程設定期間選取特定表單之前,系統無法判斷 Google 表單的問題和答案數量 (以及內容)。
動態變數可讓您定義輸入內容,在資訊清單檔案和步驟的程式碼中產生動態輸出內容集,藉此處理這些情況。
在資訊清單檔案中定義輸出變數
在資訊清單檔案中,按照下列步驟操作:
在
inputs[]中,指定接受動態輸入值的輸入變數。在
outputs[]中,指定會傳回動態輸出變數集的輸出變數。將此輸出內容的dataType設為"workflowResourceDefinitionId": "dynamic_resource_id"。定義自訂資源來處理動態變數。請使用
"resourceType": "DYNAMIC"和"providerFunction": "onDynamicProviderFunction"指定workflowResourceDefinitions。id必須與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()值相符。variableId的returnOutputVariablesAction必須與資訊清單檔案中設定的輸出變數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", }) } } } }; }