AEM工作流中的变量

工作流模型中的变量是根据其数据类型存储值的一种方法。 然后,您可以在任何工作流步骤中使用变量的名称来检索存储在变量中的值。 您还可以使用变量名称定义表达式,以便进行路由决策。

在AEM工作流模型中,您可以:

  • 根据 要存储在数据类型中的信息类型创建数据类型的变量。
  • 使用设置变量工 作流步骤设置变量值。
  • 使用“或 拆分”和“跳转”AEM工作流步骤中的变量来定义执行路由决策的表达式。您还可以在所有AEM Forms工作流步骤中使用变量。

以下视频演示了如何在AEM工作流模型中创建、设置和使用变量:

变量是 MetaDataMap接口的扩展。 可以在ECMAScript中使用MetaDataMap访问使用变量保存的元数据。

创建变量

可使用工作流模型Sidekick中的“变量”部分创建变量。 AEM工作流变量支持以下数据类型:

  • 基本数据类型:长、多次、布尔、日期和字符串
  • 复杂数据类型: XML和 JSON
注意

工作流仅支持ISO8601格式的日期类型变量。

有关AEM Forms工作流中可用的其他复杂数据类型,请参阅AEM Forms工作流中的变量。 使用ArrayList数据类型创建变量集合。 可以为所有简单和复杂的数据类型创建ArrayList变量。 例如,创建一个ArrayList变量,并选择String作为子类型,以使用该变量存储多个字符串值。

执行以下步骤以创建变量:

  1. 在AEM实例上,导航到工具>工作流>模型。

  2. 点按​创建​并指定工作流模型的标题和可选名称。 选择模型,然后点按​编辑

  3. 点按工作流模型的Sidekick中可用的变量图标,然后点按​添加变量

    添加变量

  4. 在添加变量对话框中,指定名称并选择变量类型。

  5. 从​类型​下拉列表中选择数据类型并指定以下值:

    • 基本数据类型——为变量指定可选默认值。
    • JSON或XML —— 指定可选的JSON或XML模式路径。 在将此模式中可用的属性映射和存储到另一个变量时,系统验证模式路径。
    • 表单数据模型——指定表单数据模型路径。
    • ArrayList —— 指定集合的子类型。
  6. 指定变量的可选描述,然后点按以保存更改。 变量将显示在左窗格的可用列表中。

在创建变量时,请考虑以下实践:

  • 创建工作流所需的任意数量的变量。 但是,为了节省数据库资源,请尽可能使用所需的最少变量数,并重用变量。
  • 变量区分大小写。 确保在工作流中使用相同的大小写引用变量。
  • 避免在变量名称中使用特殊字符

设置变量

您可以使用设置变量步骤来设置变量的值并定义值的设置顺序。 变量的设置顺序是变量映射在设置变量步骤中的列出顺序。

对变量值所做的更改只影响发生更改的进程的实例。 例如,当启动工作流并更改变量数据时,更改仅影响该工作流的实例。 这些更改不会影响以前启动或随后启动的工作流的其他实例。

根据变量的数据类型,您可以使用以下选项设置变量的值:

  • 文本: 当您知道要指定的确切值时,请使用此选项。
  • 表达式: 当根据表达式计算要使用的值时,请使用此选项。表达式是在提供的表达式编辑器中创建的。
  • JSON点表示法: 使用此选项从JSON或FDM类型变量检索值。
  • XPATH: 使用该选项从XML类型变量检索值。
  • 相对于有效负 荷:当要保存到变量的值在相对于有效负荷的路径上可用时,请使用此选项。
  • 绝对路径: 当要保存到变量的值在绝对路径上可用时,请使用此选项。

您还可以使用JSON DOT表示法或XPATH表示法更新JSON或XML类型变量的特定元素。

添加变量之间的映射

执行以下步骤以添加变量之间的映射:

  1. 在工作流编辑页面上,点按工作流模型Sidekick中可用的步骤图标。
  2. 将​设置变量​步骤拖放到工作流编辑器中,点按该步骤并选择(配置)。
  3. 在“设置变量”对话框中,选择“映射”“映射”>“添加映射”][
  4. 在​映射变量​部分,选择要存储数据的变量,选择映射模式,并指定要存储在变量中的值。 映射模式因变量类型而异。
  5. 映射更多变量,实现有意义的表达式。 点按以保存更改。

示例1:查询XML变量,为字符串变量设置值

选择XML类型的变量以存储XML文件。 查询XML变量,为XML文件中可用的属性设置字符串变量的值。 使用​为XML变量​字段指定XPATH,以定义要存储在字符串变量中的属性。

在此示例中,选择​formdata XML变量以存储​cc-app.xml​文件。 查询​formdata​变量以设置​emailaddress​字符串变量的值,以存储​cc-app.xml​文件中可用的​emailAddress​属性的值。

示例2:使用表达式存储基于其他变量的值

使用表达式计算变量的和并将结果存储在变量中。

在此示例中,使用表达式编辑器定义一个表达式来计算​assetscost​和​balanceamount​变量的和,并将结果存储在​totalvalue​变量中。

使用表达式编辑器

您还使用表达式计算运行时变量的值。 变量提供表达式编辑器来定义表达式。

使用表达式编辑器可以:

  • 使用其他工作流变量、数字或数学表达式设置变量值。
  • 在数学表达式中使用工作流变量、字符串、数字或表达式
  • 添加条件以设置变量值。
  • 在条件之间添加运算符。

表达式编辑器

它基于具有以下更改的自适应表单规则编辑器。 变量中的规则编辑器:

  • 不支持功能。
  • 不提供视图规则摘要的UI
  • 没有代码编辑器。
  • 不支持启用和禁用对象的值。
  • 不支持对象的设置属性。
  • 不支持调用Web服务。

有关详细信息,请参阅自适应表单规则编辑器

使用变量

您可以使用变量来检索输入和输出或保存步骤的结果。 工作流编辑器提供两种类型的工作流步骤:

  • 支持变量的工作流步骤
  • 不支持变量的工作流步骤

支持变量的工作流步骤

“转至”步骤、“或拆分”步骤和所有AEM Forms工作流步骤都支持变量。

OR拆分步骤

“或拆分”(OR Split)在工作流中创建拆分,之后只有一个分支处于活动状态。 此步骤允许您将条件处理路径引入工作流。 您可以根据需要向每个分支添加工作流步骤。

您可以使用规则定义、ECMA脚本或外部脚本为分支定义路由表达式。

您可以使用变量来定义路由表达式,使用表达式编辑器。 有关对“或拆分”步骤使用路由表达式的详细信息,请参阅“或拆分”步骤

在此示例中,在定义路由表达式之前,请使用示例2设置​totalvalue​变量的值。 如果​totalvalue​变量的值大于50000,则分支1处于活动状态。 同样,如果​totalvalue​变量的值小于50000,则可以定义使分支2处于活动状态的规则。

同样,选择外部脚本路径或为路由表达式指定ECMA脚本以评估活动分支。 点按​重命名分支​以指定分支的替代名称。

有关更多示例,请参阅创建工作流模型

转到步骤

跳转步骤​允许您根据路由表达式的结果指定要执行的工作流模型中的下一步。

与“或拆分”步骤类似,您可以使用规则定义、ECMA脚本或外部脚本为“跳转”步骤定义路由表达式。

您可以使用变量来定义路由表达式,使用表达式编辑器。 有关对Goto步骤使用路由表达式的详细信息,请参阅Goto步骤

跳转规则

在此示例中,如果​actiontaked​变量的值等于​需要更多信息,则跳转步骤将指定审核信用卡应用程序作为下一步。

有关在跳转步骤中使用规则定义的更多示例,请参阅模拟For循环

Forms以工作流为中心的工作流步骤

所有AEM Forms工作流程步骤都支持变量。 有关详细信息,请参阅OSGi](/docs/experience-manager-65/forms/using/aem-forms-workflow-step-reference.html?lang=zh-Hans)上以Forms为中心的工作流。[

不支持变量的工作流步骤

您可以使用 MetaDataMap接口访问工作流步骤中不支持变量的变量。

检索变量值

在ECMA脚本中使用以下API,根据数据类型检索现有变量的值:

可变数据类型 API
基元(长、多次、布尔、日期和字符串) workItem.getWorkflowData()。getMetaDataMap()。get(variableName, type)
XML Packages.org.w3c.dom.文档xmlObject = workItem.getWorkflowData()。getMetaDataMap()。get(variableName, Packages.org.w3c.dom.文档.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);

编辑变量

  1. 在编辑工作流页面上,点按工作流模型Sidekick中的可用变量图标。 左窗格中的“变量”部分显示所有现有变量。
  2. 点按要编辑的变量名称旁边的(编辑)图标。
  3. 编辑变量信息并点按以保存更改。 不能编辑变量的​名称​和​类型​字段。

删除变量

在删除变量之前,请从工作流中删除变量的所有引用。 确保该变量未在工作流中使用。

执行以下步骤以删除变量:

  1. 在编辑工作流页面上,点按工作流模型Sidekick中的可用变量图标。 左窗格中的“变量”部分显示所有现有变量。
  2. 点按要删除的变量名称旁边的删除图标。
  3. 点按以确认并删除变量。

在此页面上