定義動態變數

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

盡可能在資訊清單檔案中,將變數靜態定義為輸入或輸出變數。不過,在某些情況下,使用者設定流程時,可能需要定義只能在該流程中使用的變數,因為輸入內容的性質各不相同。舉例來說,在流程設定期間選取特定表單之前,系統無法判斷 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",           })         }       }     }   }; }