工作流步骤参考

工作流模型由一系列不同类型的步骤组成。 根据类型,可以使用参数和脚本配置和扩展这些步骤,以提供所需的功能和控制。

注意

本节介绍标准工作流步骤。

有关模块特定步骤,另请参阅:

步骤属性

每个步骤组件都有一个​步骤属性​对话框,通过该对话框可以定义和编辑所需的属性。

步骤属性 — 常用选项卡

在“属性”对话框的“常用”选项卡上,大多数工作流步骤组件都可以使用以下属性组合:

  • 标题

    步骤的标题。

  • 描述

    步骤的说明。

  • 工作流暂存

    用于将Stage应用到该步骤的下拉选择器。

  • 超时

    此步骤将在其后“超时”。

    您可以选择:OffImmediate1h6h12h24h

  • 超时处理程序

    当步骤超时时控制工作流的处理程序;例如:

    Auto Advancer

  • 处理程序前进

    选择此选项可在执行后自动将工作流前进到下一步。 如果未选择,则实施脚本必须处理工作流进度。

步骤属性 — “用户/组”选项卡

属性对话框的​用户/组​选项卡上有许多工作流步骤组件可使用以下属性:

  • 通过电子邮件通知用户

    • 您可以在工作流到达步骤时向参与者发送电子邮件,以此通知他们。
    • 如果启用,则将向属性​User/Group​定义的用户发送电子邮件;如果定义了组,则向组的每个成员发送电子邮件。
  • 用户/组

    • 下拉选择框将允许您导航并选择用户或用户组。
    • 如果将步骤分配给特定用户,则只有此用户可以对该步骤执行操作。
    • 如果您将步骤分配给整个组,则当工作流到达此步骤时,此组中的所有用户将在其​工作流收件箱​中执行相应操作。
    • 有关详细信息,请参阅参与工作流

AND 拆分

AND Split​在工作流中创建拆分,在此后两个分支都将处于活动状态。 您可以根据需要向每个分支添加工作流步骤。 通过此步骤,您可以在工作流中引入多个处理路径。 例如,您可以允许并行执行某些审阅步骤,从而节省时间。

wf-26

AND拆分 — 配置

  • 编辑​AND Split​属性:

    • 拆分名称:为说明性目的指定名称。
    • 选择所需的分支数量;2、3、4或5。
  • 根据需要向分支中添加工作流步骤。

    wf-27

容器步骤

容器​步骤开始作为子工作流运行的另一个工作流模型。

此​容器​允许您重用工作流模型以实现常见的步骤序列。 例如,翻译工作流模型可用于多个编辑工作流。

wf-28

容器步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

  • 通用

  • 容器

    • 子工作流:选择要开始的工作流。

跳转步骤

跳转步骤​允许您根据ECMAScript的结果指定要执行的工作流模型中的下一步:

  • true:跳 步骤完成,工作流引擎执行指定步骤。

  • false:Goto Step 成和常规路由逻辑确定要执行的下一步。

使用​跳转步骤​可以在工作流模型中实现高级路由结构。 例如,要实现循环,可以定义​跳转步骤​以执行工作流中的前一步骤,脚本将评估循环条件。

跳转步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

  • 通用

  • 进程

    • 要转到的步骤:选择要执行的步骤。
    • 脚本路径:确定是否执行跳转步骤的ECMAScript 路径
    • 脚本:确定是否执行跳转步骤的 ECMAScript
注意

指定​脚本路径​或​脚本。 不能同时使用这两个选项。 如果为这两个属性指定值,则该步骤将使用​脚本路径

模拟循环

模拟for循环需要保持已发生循环迭代次数的计数:

  • 计数通常表示在工作流中执行操作的项目的索引。
  • 计数将作为循环的退出标准进行计算。

例如,要实现对多个JCR节点执行操作的工作流,可以使用循环计数器作为节点的索引。 要保留计数,请在工作流实例的数据映射中存储integer值。 使用​跳转步骤​的脚本可增加计数,并将计数与退出条件进行比较。

function check(){
   var count=0;
   var keyname="loopcount"
   try{
      if (workflowData.getMetaDataMap().containsKey(keyname)){ 
        log.info("goto script: found loopcount key");
        count= parseInt(workflowData.getMetaDataMap().get(keyname))+1;
      } 
 
     workflowData.getMetaDataMap().put(keyname,count);
 
     }catch(err) {
         log.info(err.message);
         return false;
    }
   if (parseInt(count) <7){
       return true;
   } else {
      return false;
   }
}

OR 拆分

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

注意

有关创建OR拆分的其他信息,请参阅:https://helpx.adobe.com/experience-manager/using/aem64_workflow_servlet.html

wf-29

OR拆分 — 配置

  • 编辑​OR Split​属性:

    • 通用

      • 选择所需的分支数量;2、3、4或5。
    • 分支: x>

      • 脚本路径:包含脚本的文件的路径。
      • 脚本:在框中添加脚本。
      • 默认路由:当多个分支的计算结果为true时,将遵循默认分支。默认只能指定一个分支。
    注意

    每个分支都有一个单独的选项卡:

    • 每个分支的脚本一次计算一个。
    • 分支从左到右计算。
    • 执行计算结果为true的第一个脚本。
    • 如果没有分支的计算结果为true,则工作流不会前进。
    注意

    指定​脚本路径​或​脚本。 不能同时使用这两个选项。 如果为这两个属性指定值,则该步骤将使用​脚本路径

    注意
  • 根据需要向分支中添加工作流步骤。

参与者步骤和选择器

参与者步骤

参与者步骤​允许您为特定操作分配所有权。 仅当用户手动确认该步骤后,工作流才会继续。 当您希望某人对工作流执行操作时,会使用此选项;例如,审阅步骤。

尽管与用户授权不直接相关,但在分配操作时必须考虑用户授权;用户必须有权访问作为工作流有效负荷的页面。

参与者步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

注意

在以下情况下,始终会通知工作流启动器:

  • 工作流已完成(已完成)。
  • 工作流已中止(终止)。
注意

需要配置某些属性才能启用电子邮件通知。 您还可以自定义电子邮件模板或为新语言添加电子邮件模板。 请参阅配置电子邮件通知以在AEM中配置电子邮件通知。

对话框参与者步骤

使用​对话框参与者步骤​从分配了工作项的用户处收集信息。 此步骤对于收集稍后在工作流中使用的少量数据很有用。

完成该步骤后,完成工作项​对话框将包含您在对话框中定义的字段。 在字段中收集的数据存储在工作流有效负荷的节点中。 随后的工作流步骤随后可以从存储库中读取值。

要配置该步骤,请指定要将工作项分配给的组或用户,以及对话框的路径。

对话框参与者步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

对话框参与者步骤 — 创建对话框

要创建对话框,请执行以下操作:

对话框参与者步骤 — 在有效负荷中存储数据

您可以在工作流有效负荷或工作项元数据中存储构件数据。 Widget节点的name属性的格式决定数据存储的位置。

  • 使用有效负荷存储数据

    • 要将Widget数据存储为工作流有效负荷的属性,请对Widget节点的name属性值使用以下格式:

      ./jcr:content/nodename

    • 数据存储在有效负荷节点的nodename属性中。 如果节点不包含该属性,则创建该属性。

    • 当与有效负荷一起存储时,具有相同有效负荷的对话框的后续使用将覆盖属性值。

  • 将数据与工作项一起存储

    • 要将Widget数据存储为工作项元数据的属性,请对name属性的值使用以下格式:

      nodename

    • 数据存储在工作项metadatanodename属性中。 如果随后使用的对话框与相同的有效负荷一起使用,则保留数据。

对话框参与者步骤 — 对话框定义

  1. 对话框结构

    对话框参与者步骤对话框类似于您为创作组件而创建的对话框。 它们存储在:

    /apps/myapp/workflow/dialogs

    触屏优化UI的对话框具有以下节点结构:

    newComponent (cq:Component)
      |- cq:dialog (nt:unstructured)
        |- content 
          |- layout 
            |- items 
              |- column 
                |- items 
                  |- component0
                  |- component1
                  |- ...
    
    注意

    有关详细信息,请参阅创建和配置对话框

  2. 对话框路径属性

    对话参与者步骤​具有​对话路径​属性(以及参与者步骤的属性)。 对话路径​属性的值是对话框dialog节点的路径。

    例如,该对话框包含在存储在节点中的名为EmailWatch的组件中:

    /apps/myapp/workflows/dialogs

    对于触屏优化UI,对话框路径​属性使用以下值:

    /apps/myapp/workflow/dialogs/EmailWatch/cq:dialog

    wf-30

  3. 示例对话框定义

    以下XML代码片断表示一个对话框,该对话框将String值存储在有效负荷内容的watchEmail节点中。 标题节点表示TextField组件:

    jcr:primaryType="nt:unstructured" 
        jcr:title="Watcher Email Address Dialog" 
        sling:resourceType="cq/gui/components/authoring/dialog">
        <content jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/foundation/container">
            <layout jcr:primaryType="nt:unstructured" 
                margin="false" 
                sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"
            />
            <items jcr:primaryType="nt:unstructured">
                <column jcr:primaryType="nt:unstructured"
                    sling:resourceType="granite/ui/components/foundation/container">
                    <items jcr:primaryType="nt:unstructured">
                        <title jcr:primaryType="nt:unstructured" 
                            fieldLabel="Notification Email Address" 
                            name="./jcr:content/watchEmails"
                            sling:resourceType="granite/ui/components/foundation/form/textfield"
                        />
                    </items>
                </column>
            </items>
        </content>
    </cq:dialog>
    

    此示例将在触屏优化UI的情况下生成如下对话框:

    chlimage_1-177

动态参与者步骤

动态参与者步骤​组件与​参与者步骤​类似,其差异是在运行时自动选择参与者。

要配置该步骤,请选择​参与者选择器,该选择器标识要将工作项分配到的参与者,并提供一个对话框。

动态参与者步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

动态参与者步骤 — 开发参与者选择器

您创建参加者选择器。 因此,您可以使用任何选择逻辑或条件。 例如,您的参加者选择器可以选择工作项目最少的用户(在组内)。 您可以创建任意数量的参与者选择器以用于工作流模型中​动态参与者步骤​组件的不同实例。

创建一个OSGi服务或一个ECMAScript,它选择用户将工作项分配给它。

  • ECMAscript

    脚本必须包含一个名为getParticant的函数,该函数将用户ID返回为String值。 将自定义脚本存储在/apps/myapp/workflow/scripts文件夹或子文件夹中。

    标准AEM实例中包含一个示例脚本:

    /libs/workflow/scripts/initiator-participant-chooser.ecma

    注意

    必须​不更改/libs路径中的任何内容。

    这是因为下次升级实例时,将覆盖/libs的内容(应用修补程序或功能包时,可能会覆盖)。

    此脚本选择工作流启动器作为参加者:

    function getParticipant() {
        return workItem.getWorkflow().getInitiator();
    }
    
    注意

    工作流发起者参与者选择器​组件扩展了​动态参与者步骤​并使用此脚本作为步骤实现。

  • OSGi服务

    服务必须实现com.day.cq.workflow.exec.ParticipantStepChooser接口。 接口定义以下成员:

    • SERVICE_PROPERTY_LABEL 字段:使用此字段可指定参加者选择器的名称。该名称显示在​动态参与者步骤​属性中可用参与者选择器的列表中。
    • getParticipant 方法:将动态解析的主体ID返回为 String 值。
    注意

    getParticipant方法返回动态解析的Principal id。 这可以是组ID或用户ID。

    但是,当返回参加者的列表时,组ID只能用于​参加者步骤。 对于​动态参与者步骤,将返回空列表,这不能用于委派。

    要使您的实现对​动态参与者步骤​组件可用,请将您的Java类添加到导出服务的OSGi捆绑包,然后将捆绑包部署到AEM服务器。

    注意

    随机参 加者选择是选择随机用户()的示 com.day.cq.workflow.impl.process.RandomParticipantChooser例服务。随机参与者选择器​步骤组件示例扩展了​动态参与者步骤,并将此服务用作步骤实现。

动态参与者步骤 — 参与者选择器服务示例

以下Java类实现ParticipantStepChooser接口。 该类返回启动工作流的参加者的姓名。 代码使用的逻辑与示例脚本(initator-participant-chooser.ecma)使用的逻辑相同。

@Property注释将SERVICE_PROPERTY_LABEL字段的值设置为Workflow Initiator Participant Chooser

package com.adobe.example;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.ParticipantStepChooser;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;

@Component
@Service
@Properties({
        @Property(name = Constants.SERVICE_DESCRIPTION, value = "An example implementation of a dynamic participant chooser."),
        @Property(name = ParticipantStepChooser.SERVICE_PROPERTY_LABEL, value = "Workflow Initiator Participant Chooser (service)") })
public class InitiatorParticipantChooser implements ParticipantStepChooser {

 private Logger logger = LoggerFactory.getLogger(this.getClass());

 public String getParticipant(WorkItem arg0, WorkflowSession arg1,
   MetaDataMap arg2) throws WorkflowException {

  String initiator = arg0.getWorkflow().getInitiator();
  logger.info("Assigning Dynamic Participant Step work item to {}",initiator);

  return initiator;
 }
}

在​动态参与者步骤​属性对话框中,参与者选择器​列表包含表示此服务的项Workflow Initiator Participant Chooser (script)

“启动工作流模型时,日志会指示启动工作流的用户的ID以及为工作项分配的用户。 在此示例中,admin用户启动了工作流。

13.09.2015 15:48:53.037 *INFO* [10.176.129.223 [1347565733037] POST /etc/workflow/instances HTTP/1.1] com.adobe.example.InitiatorParticipantChooser Assigning Dynamic Participant Step work item to admin

表单参与者步骤

表单参与者步骤​在打开工作项时显示表单。 当用户填写并提交表单时,字段数据将存储在工作流有效负荷的节点中。

要配置该步骤,请指定要将工作项分配到的组或用户,以及表单的路径。

注意

本节介绍页面创作基础组件🔗的Forms部分。

表单参与者步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

表单参与者步骤 — 创建表单

创建表单以正常方式与​表单参与者步骤​一起使用。 但是,表单参与者步骤的表单必须具有以下配置:

  • Form 组件的​开始必须将​操作类型​属性设置为Edit Workflow Controlled Resource(s)

  • Form 组件的​开始必须具有Form Identifier属性的值。

  • 表单组件必须将​元素名称​属性设置为存储字段数据的节点的路径。 路径必须在工作流有效负荷内容中找到节点。 该值使用以下格式:

    ./jcr:content/path_to_node

  • 表单必须包含​工作流提交按钮​组件。 您不配置组件的任何属性。

工作流的要求决定了您应将字段数据存储在何处。 例如,字段数据可用于配置页面内容的属性。 元素名称​属性的以下值将字段数据存储为jcr:content节点的redirectTarget属性的值:

./jcr:content/redirectTarget

在下面的示例中,字段数据用作有效负荷页面上​Text​组件的内容:

./jcr:content/par/text_3/text

"第一个示例可用于cq:Page组件呈现的任何页面。 第二个示例仅在有效负荷页面包含ID为text_3的​Text​组件时才可使用。

表单可以位于存储库中的任意位置,但必须授权工作流用户读取表单。

随机参与者选择器

随机参与者选择器​步骤是将生成的工作项分配给从列表随机选择的用户的参与者选择器。

wf-31

随机参与者选择器 — 配置

要配置该步骤,请编辑并使用以下选项卡:

  • 通用

  • 参数

    • 参与者:指定可供选择的用户的列表。要将用户添加到列表,请单击​添加项目,然后键入用户节点或用户ID的主路径。 用户的顺序不会影响分配工作项的可能性。

工作流发起者参与人选择器

工作流发起者参与者选择器​步骤是一个参与者选择器,它将生成的工作项分配给启动工作流的用户。 除了​Common​属性外,没有其他要配置的属性。

工作流发起者参与者选择器 — 配置

要配置该步骤,请使用以下选项卡进行编辑:

进程步骤

处理步骤​运行ECMAScript或调用OSGi服务以执行自动处理。

wf-32

进程步骤 — 配置

要配置该步骤,请编辑并使用以下选项卡:

  • 通用

  • 进程

    • 流程:要执行的进程实现。使用下拉菜单选择ECMAScript或OSGi服务。 有关信息:

    • 处理程序高级:选择此选项可在执行后自动将工作流前进到下一步。如果未选择,则实施脚本必须处理工作流进度。

    • 参数:要传递到该进程的参数。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now