工作流模型中的变量是一种根据值的数据类型来存储值的方法。 然后,您可以在任何工作流步骤中使用变量的名称来检索存储在变量中的值。 您还可以使用变量名称定义用于做出路由决策的表达式。
在AEM工作流模型中,您可以:
以下视频演示了如何在AEM工作流模型中创建、设置和使用变量:
变量是MetaDataMap接口的扩展。 您可以在ECMAScript中使用MetaDataMap访问使用变量保存的元数据。
您可以使用工作流模型Sidekick中提供的“变量”部分创建变量。 AEM工作流变量支持以下数据类型:
工作流仅支持ISO8601格式的日期类型变量。
有关AEM Forms工作流中可用的其他复杂数据类型,请参阅AEM Forms工作流中的变量。 使用ArrayList数据类型创建变量集合。 您可以为所有基元和复杂数据类型创建ArrayList变量。 例如,创建一个ArrayList变量并选择字符串作为子类型,以使用该变量存储多个字符串值。
执行以下步骤以创建变量:
在AEM实例上,导航至工具>工作流>模型。
点按创建 ,然后为工作流模型指定标题和可选名称。 选择模型,然后点按编辑。
点按工作流模型Sidekick中可用的变量图标,然后点按添加变量。
在添加变量对话框中,指定名称并选择变量的类型。
从类型下拉列表中选择数据类型,并指定以下值:
为变量指定可选描述,然后点按以保存更改。 变量显示在左侧窗格的可用列表中。
在创建变量时,请考虑以下实践:
您可以使用设置变量步骤来设置变量的值并定义值的设置顺序。 变量按变量映射在设置变量步骤中列出的顺序进行设置。
变量值的更改仅影响发生更改的流程实例。 例如,当启动工作流并更改变量数据时,所做的更改仅会影响该工作流实例。 这些更改不会影响之前启动或随后启动的工作流的其他实例。
根据变量的数据类型,您可以使用以下选项设置变量的值:
您还可以使用JSON点表示法或XPATH表示法来更新JSON或XML类型变量的特定元素。
执行以下步骤以添加变量之间的映射:
选择XML类型的变量以存储XML文件。 查询XML变量,为XML文件中可用的属性设置字符串变量的值。 使用为XML变量字段指定XPATH ,以定义要存储在字符串变量中的属性。
在此示例中,选择formdata XML变量以存储cc-app.xml文件。 查询formdata变量以设置emailaddress字符串变量的值,以存储cc-app.xml文件中可用emailAddress属性的值。
使用表达式计算变量的总和并将结果存储到变量中。
在此示例中,使用表达式编辑器定义表达式来计算assetscost和balanceamount变量的和,并将结果存储在totalvalue变量中。
您还可以使用表达式在运行时计算变量的值。 变量提供用于定义表达式的表达式编辑器。
使用表达式编辑器可执行以下操作:
它基于自适应表单规则编辑器,并进行了以下更改。 变量中的规则编辑器:
有关更多信息,请参阅自适应表单规则编辑器。
您可以使用变量检索输入和输出或保存步骤结果。 工作流编辑器提供了两种类型的工作流步骤:
“转到”步骤或“拆分”步骤以及所有AEM Forms工作流步骤都支持变量。
“或拆分”(OR Split)在工作流中创建一个拆分,在该拆分之后,只有一个分支处于活动状态。 通过此步骤,您可以在工作流中引入条件处理路径。 您可以根据需要向每个分支添加工作流步骤。
您可以使用规则定义、ECMA脚本或外部脚本为分支定义路由表达式。
您可以使用变量通过表达式编辑器定义路由表达式。 有关在“或拆分”步骤中使用路由表达式的详细信息,请参阅OR拆分步骤。
在此示例中,在定义路由表达式之前,请使用示例2来设置totalvalue变量的值。 如果totalvalue变量的值大于50000,则分支1处于活动状态。 同样,如果totalvalue变量的值小于50000,则可以定义一个规则以使分支2处于活动状态。
同样,选择外部脚本路径或指定路由表达式的ECMA脚本以计算活动分支。 点按重命名分支以指定分支的替代名称。
有关更多示例,请参阅创建工作流模型。
通过转到步骤,您可以根据路由表达式的结果,指定要执行的工作流模型中的下一步。
与“或拆分”步骤类似,您可以使用规则定义、ECMA脚本或外部脚本定义跳转步骤的路由表达式。
您可以使用变量通过表达式编辑器定义路由表达式。 有关在跳转步骤中使用路由表达式的详细信息,请参阅跳转步骤。
在此示例中,如果actiontaked变量的值等于需要更多信息,则跳转步骤会指定审核信用卡应用程序作为下一步。
有关在跳转步骤中使用规则定义的更多示例,请参阅模拟For循环。
所有AEM Forms工作流步骤都支持变量。 有关更多信息,请参阅OSGi🔗上以Forms为中心的工作流。
您可以使用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.JsonObject jsonObject = 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. startWorkflow使用模型、wfData和metaData作为参数。使用MetaDataMap为变量设置值。
在此API中,使用metaData.put(variableName, value)将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);
在删除变量之前,请从工作流中删除该变量的所有引用。 确保未在工作流中使用变量。
执行以下步骤以删除变量: