工作流模型中的變數是基於其資料類型來儲存值的一種方式。 然後,可以在任何工作流步驟中使用變數的名稱來檢索儲存在變數中的值。 也可以使用變數名稱來定義用於做出路由選擇的表達式。
在工AEM作流模型中,您可以:
以下視頻演示了如何在工作流模型中建立、設定和AEM使用變數:
變數是現有 元資料映射 。 您可以使用 元資料映射 訪問使用變數保存的元資料。
使用工作流模型旁邊可用的「變數」(Variables)部分建立變數。 工作AEM流變數支援以下資料類型:
工作流僅支援日期類型變數的ISO8601格式。
您需要 AEM Forms附加包 「文檔」和「表單資料模型」資料類型。 使用ArrayList資料類型建立變數集合。 可以為所有基元和複雜資料類型建立ArrayList變數。 例如,建立ArrayList變數,然後選擇String作為子類型,以使用該變數儲存多個字串值。
執行以下步驟建立變數:
在實例AEM上,導航至「工具」 >工作流>模型。
點擊 建立 並指定工作流模型的標題和可選名稱。 選取模型並點擊 編輯。
點擊工作流模型旁邊可用的變數表徵圖,點擊 添加變數。
在「添加變數」(Add Variable)對話框中,指定變數名稱並選擇變數類型。
從 類型 下拉清單並指定以下值:
指定變數的可選說明並點擊 的子菜單。 變數顯示在左窗格中可用的清單中。
在建立變數時,請考慮以下操作:
可以使用「設定變數」(Set Variable)步驟來設定變數的值並定義值的設定順序。 變數按設定變數步驟中列出變數映射的順序設定。
變數值的更改只影響發生更改的進程實例。 例如,當啟動工作流並更改變數資料時,更改僅影響工作流的該實例。 這些更改不會影響先前啟動或隨後啟動的工作流的其他實例。
根據變數的資料類型,可以使用以下選項來設定變數的值:
文字: 當知道要指定的精確值時,使用該選項。
表達式: 在根據表達式計算要使用的值時,使用該選項。 表達式是在提供的表達式編輯器中建立的。
JSON點表示法: 使用該選項從JSON或FDM類型變數中檢索值。
XPATH: 使用該選項從XML類型變數中檢索值。
相對於負載: 當要保存到變數的值在相對於負載的路徑上可用時,請使用該選項。
絕對路徑: 當要保存到變數的值在絕對路徑上可用時,使用該選項。
您還可以使用JSON DOT表示法或XPATH表示法更新JSON或XML類型變數的特定元素。
執行以下步驟以添加變數之間的映射:
選擇XML類型的變數以儲存XML檔案。 查詢XML變數,為XML檔案中可用的屬性設定字串變數的值。 使用 為XML變數指定XPATH 欄位,以定義要儲存在字串變數中的屬性。
在此示例中,選擇 格式資料 用於儲存 cc-app.xml 的子菜單。 查詢 格式資料 變數,以設定 電子郵件地址 字串變數,用於儲存 電子郵件地址 屬性 cc-app.xml 的子菜單。
使用表達式計算變數的和並將結果儲存在變數中。
在此示例中,使用表達式編輯器定義表達式以計算 資產成本 和 餘額 變數並將結果儲存在 合計值 變數。
還可以使用表達式計算運行時變數的值。 變數提供表達式編輯器來定義表達式。
使用表達式編輯器可以:
它基於具有以下更改的自適應表單規則編輯器。 變數中的規則編輯器:
有關詳細資訊,請參見 自適應表單規則編輯器。
可以使用變數來檢索輸入和輸出或保存步驟的結果。 工作流編輯器提供了兩種類型的工作流步驟:
「轉至」(Go To)步驟、「或分解」(OR Split)步驟和所有AEM Forms工作流步驟都支援變數。
「或拆分」(OR Split)在工作流中建立一個拆分,之後只有一個分支處於活動狀態。 此步驟使您能夠將條件處理路徑引入工作流。 根據需要將工作流步驟添加到每個分支。
可以使用規則定義、ECMA指令碼或外部指令碼為分支定義路由表達式。
可以使用變數使用表達式編輯器定義路由表達式。 有關使用「或分割」步驟的路由表達式的詳細資訊,請參見 或拆分步驟。
在本示例中,在定義路由表達式之前,請使用 示例2 為 合計值 變數。 如果 合計值 變數大於50000。 同樣,如果Branch 2的值 合計值 變數小於50000。
同樣,選擇外部指令碼路徑或指定路由表達式的ECMA指令碼以計算活動分支。 點擊 更名分支 指定分支的備用名稱。
有關更多示例,請參見 建立工作流模型。
的 轉至步驟 允許您根據路由表達式的結果,在工作流模型中指定要執行的下一步。
與「或拆分」步驟類似,您可以使用規則定義、ECMA指令碼或外部指令碼為「轉到」步驟定義路由表達式。
可以使用變數使用表達式編輯器定義路由表達式。 有關使用「轉至」步驟的路由表達式的詳細資訊,請參見 轉至步驟。
在此示例中,如果「轉到」步驟的值為 行動 變數等於 需要更多資訊。
有關在轉到步驟中使用規則定義的更多示例,請參見 模擬For循環。
所有AEM Forms工作流步驟都支援變數。 有關詳細資訊,請參見 基於OSGi的以Forms為中心的工作流。
您可以使用 元資料映射 用於訪問不支援變數的工作流步驟中的變數的介面。
使用ECMA指令碼中的以下API可基於資料類型檢索現有變數的值:
變數資料類型 | API |
---|---|
基元(長、雙、布爾、日期和字串) | workItem.getWorkflowData()。getMetaDataMap()。get(variableName, type) |
文件 | Packages.com.adobe.aemfd.docmanager.Document doc = workItem.getWorkflowData()。getMetaDataMap()。get("docVar", Packages.com.adobe.aemfd.docmanager.Document.class); |
XML | Packages.org.w3c.dom.Document xmlObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.org.w3c.dom.Document.class); |
表單資料模型 | Packages.com.adobe.aem.dermis.api.FormDataModelInstance fdmObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.com.adobe.aem.dermis.api.FormDataModelInstance.class); |
JSON | Packages.com.google.gson.JsonObject jsonObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.com.google.gson.JsonObject.class); |
您需要 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)
更新 薪 變數為50000。
可以使用API設定變數並傳遞它們以調用工作流實例。
workflowSession.startWorkflow 將model、wfData和metaData用作參數。 使用MetaDataMap為變數設定值。
在此API中, 變數名稱 變數設定為 值 使用metaData.put(variableName, 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);
範例
初始化 文檔 將文檔對象設定為路徑(「a/b/c」),並設定 docVar 變數到儲存在文檔對象中的路徑。
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkflowData;
import com.adobe.granite.workflow.model.WorkflowModel;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.adobe.aemfd.docmanager.Document;
/*This example assumes that you already have a workflowSession and modelId along with the payloadType and payload */
WorkflowData wfData = workflowSession.newWorkflowData(payloadType, payload);
MetaDataMap metaData = wfData.getMetaDataMap();
Document doc = new Document("/a/b/c");// initialize a document object
metaData.put("docVar",doc); //Assuming that you have created a variable "docVar" of type Document in your workflow model
WorkflowModel model = workflowSession.getModel(modelId);
workflowSession.startWorkflow(model, wfData, metaData);
使用表單工作流處理的資料可以包含敏感用戶資料,如個人身份資訊和敏感個人資訊。 企業可以選擇將資料從JCR儲存中儲存到由它們擁有和管理的外部資料儲存中,這些資料由各種工作流步驟處理(並使用工作流變數傳遞)。 要瞭解有關在外部儲存中保留工作流資料的更多資訊,請參見 使用客戶擁有的資料儲存庫的工作流變數。
Adobe Experience Manager 提供工作流API UserMetaDataPersistenceProvider 將工作流變數儲存在外部Azure Blob儲存中。 有關使用API的詳細資訊,請參見 使用工作流變數對敏感資料進行參數化並儲存在外部資料儲存中。
刪除變數之前,請從工作流中刪除變數的所有引用。 確保該變數未在工作流中使用。
執行以下步驟以刪除變數:
有關在AEM Forms工作流步驟中使用變數的更多示例,請參閱 工作流中的AEM變數。