工作流模型中的變數是根據其資料類型儲存值的方法。 然後,您可以在任何工作流程步驟中使用變數的名稱來擷取儲存在變數中的值。 您也可以使用變數名稱來定義用於做出路由決策的表達式。
在AEM工作流程模型中,您可以:
下列影片示範如何在AEM工作流程模型中建立、設定和使用變數:
變數是MetaDataMap介面的擴充功能。 您可以在ECMAScript中使用MetaDataMap來存取使用變數儲存的中繼資料。
您可使用工作流程模型側腳中的「變數」區段來建立變數。 AEM工作流程變數支援下列資料類型:
工作流程僅支援ISO8601格式的日期類型變數。
如需AEM Forms工作流程中可用的其他複雜資料類型,請參閱「AEM Forms工作流程中的變數」。 使用ArrayList資料類型來建立變數集合。 您可以為所有基本和複雜資料類型建立ArrayList變數。 例如,建立ArrayList變數,並選擇「字串」作為子類型,以使用變數儲存多個字串值。
執行下列步驟以建立變數:
在AEM例項上,導覽至「工具>工作流程>模型」。
點選「建立」,並指定工作流程模型的標題和選用名稱。 選擇模型並點選Edit。
點選工作流程模型側點中可用的變數圖示,然後點選「新增變數」。
在「新增變數」對話方塊中,指定名稱並選取變數類型。
從Type下拉式清單中選取資料類型,並指定下列值:
指定變數的選用說明,並點選以儲存變更。 變數會顯示在左窗格的可用清單中。
建立變數時,請考慮下列實務:
您可以使用「設定變數」步驟來設定變數的值,並定義值的設定順序。 變數的設定順序為變數映射在設定變數步驟中列出。
變數值的變更只會影響變更發生的程式例項。 例如,當啟動工作流且變數資料變更時,這些變更只會影響該工作流程的例項。 這些更改不會影響以前啟動或隨後啟動的工作流的其他實例。
視變數的資料類型而定,您可以使用下列選項來設定變數的值:
您也可以使用JSON DOT符號或XPATH符號來更新JSON或XML類型變數的特定元素。
執行下列步驟以新增變數之間的映射:
選擇XML類型的變數以儲存XML檔案。 查詢XML變數,為XML檔案中可用的屬性設定字串變數的值。 使用為XML變數欄位指定XPATH,以定義要儲存在字串變數中的屬性。
在此範例中,選取formdata XML變數以儲存cc-app.xml檔案。 查詢formdata變數,以設定電子郵件地址字串變數的值,以儲存cc-app.xml檔案中可用之emailAddress屬性的值。
使用運算式來計算變數的總和,並將結果儲存在變數中。
在此範例中,使用運算式編輯器來定義運算式,以計算assetcost和balanceamount變數的總和,並將結果儲存在totalvalue變數中。
您也可以使用運算式來計算執行階段中變數的值。 變數提供運算式編輯器來定義運算式。
使用運算式編輯器可:
它以具有下列變更的最適化表單規則編輯器為基礎。 變數中的規則編輯器:
如需詳細資訊,請參閱最適化表單規則編輯器。
您可以使用變數來擷取輸入和輸出,或儲存步驟的結果。 工作流編輯器提供兩種工作流步驟:
「跳至」步驟、「或分割」步驟和所有AEM Forms工作流程步驟都支援變數。
「或分割」(OR Split)在工作流中建立一個分割,之後只有一個分支處於活動狀態。 此步驟可讓您將條件式處理路徑引入工作流程中。 您可以視需要將工作流程步驟新增至每個分支。
您可以使用規則定義、ECMA指令碼或外部指令碼為分支定義路由表達式。
可以使用變數使用表達式編輯器定義路由表達式。 有關使用OR分割步驟的路由表達式的詳細資訊,請參閱OR分割步驟。
在此示例中,在定義路由表達式之前,請使用example 2來設定totalvalue變數的值。 如果totalvalue變數的值大於50000,則分支1是活動的。 同樣地,如果totalvalue變數的值小於50000,您也可以定義規則,使Branch 2處於活動狀態。
同樣地,選擇外部指令碼路徑或指定路由表達式的ECMA指令碼以評估活動分支。 點選重新命名分支以指定分支的替代名稱。
如需更多範例,請參閱建立工作流程模型。
轉至步驟允許您指定工作流模型中要執行的下一個步驟,這取決於路由表達式的結果。
與「或分割」步驟類似,您可以使用規則定義、ECMA指令碼或外部指令碼來定義「轉到」步驟的路由表達式。
可以使用變數使用表達式編輯器定義路由表達式。 有關使用Goto步驟的路由表達式的詳細資訊,請參閱Goto步驟。
在此示例中,如果actiontaken變數的值等於需要更多資訊,則Goto步驟將指定「複查信用卡應用程式」作為下一步。
有關在Goto步驟中使用規則定義的更多示例,請參閱模擬For循環。
所有AEM Forms工作流程步驟都支援變數。 如需詳細資訊,請參閱OSGi](/docs/experience-manager-65/forms/using/aem-forms-workflow-step-reference.html?lang=zh-Hant)上的[表單導向工作流程。
您可以使用MetaDataMap介面,在不支援變數的工作流程步驟中存取變數。
在ECMA指令碼中使用下列API,以根據資料類型擷取現有變數的值:
變數資料類型 | API |
---|---|
基元(長、雙、布爾、日期和字串) | workItem.getWorkflowData()。getMetaDataMap()。get(variableName, type) |
XML | Packages.org.w3c.dom.Document xmlObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.org.w3c.dom.Document.class); |
JSON | Packages.com.google.gson.JsonObjectJsonObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.com.google.gson.JsonObject.class); |
如需AEM Forms工作流程中其他複雜變數資料類型的API資訊,請參閱「AEM Forms工作流程中的變數」。
範例
使用下列API擷取字串資料類型的值:
workItem.getWorkflowData().getMetaDataMap().get(accname, Packages.java.lang.String)
在ECMA指令碼中使用下列API來更新變數的值:
workItem.getWorkflowData().getMetaDataMap().put(variableName, value)
範例
workItem.getWorkflowData().getMetaDataMap().put(salary, 50000)
將salary變數的值更新為50000。
您可以使用API來設定變數,並傳遞這些變數以叫用工作流程例項。
workflowSession. startWorkflows使用模型、wfData和metaData作為參數。使用MetaDataMap來設定變數的值。
在此API中,variableName變數會使用metaData.put(variableName, value)設為value;
import com.adobe.granite.workflow.model.WorkflowModel;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.adobe.aemfd.docmanager.Document;
/*Assume that you already have a workflowSession and modelId along with the payloadType and payload*/
WorkflowData wfData = workflowSession.newWorkflowData(payloadType, payload);
MetaDataMap metaData = wfData.getMetaDataMap();
metaData.put(variableName, value); //Create a variable "variableName" in your workflow model
WorkflowModel model = workflowSession.getModel(modelId);
workflowSession.startWorkflow(model, wfData, metaData);
在刪除變數之前,請從工作流程中移除變數的所有參照。 請確定此變數未用於工作流程。
執行下列步驟以刪除變數: