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