管理工作流实例 administering-workflow-instances

工作流控制台提供了几种工具来管理工作流实例以确保它们按预期执行。

NOTE
JMX控制台提供额外的工作流维护操作。

提供了一系列控制台来管理您的工作流。使用全局导航以打开​ 工具 ​窗格,然后选择​ 工作流

  • 模型:管理工作流定义
  • 实例:查看和管理正在运行的工作流实例
  • 启动器:管理工作流的启动方式
  • 存档:查看已成功完成的工作流的历史记录
  • 故障:查看已完成但出现错误的工作流的历史记录
  • 自动分配:根据模板配置自动分配工作流

监控工作流实例状态 monitoring-the-status-of-workflow-instances

  1. 使用“导航”,依次选择​ 工具 ​和​ 工作流

  2. 选择​ 实例,以便显示当前正在进行的工作流实例的列表。

    wf-96

暂停、恢复和终止工作流实例 suspending-resuming-and-terminating-a-workflow-instance

  1. 使用“导航”,依次选择​ 工具 ​和​ 工作流

  2. 选择​ 实例,以便显示当前正在进行的工作流实例的列表。

    wf-96-1

  3. 选择特定项目,然后相应地使用​ 终止暂停 ​或​ 恢复;需要确认和/或进一步的详细信息:

    wf-97-1

查看存档的工作流 viewing-archived-workflows

  1. 使用“导航”,依次选择​ 工具 ​和​ 工作流

  2. 选择​ 存档,以便显示已成功完成的工作流实例的列表。

    wf-98

    note note
    NOTE
    中止状态被视为成功终止,因为它是用户操作的结果;例如:
    • 使用​ 终止 ​操作
    • 当受工作流约束的页面被(强制)删除时,工作流被终止
  3. 选择特定项目,然后​ 打开历史记录 ​以查看更多详细信息:

    wf-99

修复工作流实例故障 fixing-workflow-instance-failures

当工作流失败时,AEM会提供​ 故障 ​控制台,以便您进行调查,并在找到初始原因后执行适当的操作:

  • 失败详细信息
    打开一个窗口以显示​ 失败消息步骤 ​和​ 失败栈栈

  • 打开历史记录
    显示工作流历史记录的详细信息。

  • 重试步骤 — 再次运行脚本步骤组件实例。 修复导致原始错误的故障后,使用“重试步骤”命令。例如,在修复流程步骤执行的脚本中的错误后,重试该步骤。

  • 终止 — 如果错误导致工作流出现不可调和的情况,则终止工作流。 例如,工作流可以依赖于环境条件,例如存储库中对工作流实例不再有效的信息。

  • 终止并重试 — 类似于​ 终止,只不过使用原始有效负载、标题和描述来启动新的工作流实例。

要调查故障,然后恢复或终止工作流,请执行以下步骤:

  1. 使用“导航”,依次选择​ 工具 ​和​ 工作流

  2. 选择​ 失败,以便您可以显示未成功完成的工作流实例的列表。

  3. 选择特定项目,然后选择适当的操作:

    wf-47

定期清除工作流实例 regular-purging-of-workflow-instances

最大限度地减少工作流实例的数量可以提高工作流引擎的性能,因此,您可以定期从存储库中清除已完成或正在运行的工作流实例。

配置 Adobe Granite 工作流清除配置 ​以根据其时限和状态清除工作流实例。您还可以清除所有模型或特定模型的工作流实例。

您还可以创建多个服务配置以清除满足不同条件的工作流实例。例如,创建一个配置,以便在特定工作流模型的实例运行时间超过预期时间时清除这些实例。 创建另一个配置,以便在一定天数后清除所有已完成的工作流,从而最大限度地减小存储库。

要配置服务,您可以使用Web控制台将OSGi配置添加到存储库。 下表描述了任一方法所需的属性。

NOTE
对于将配置添加到存储库,服务 PID 为:
com.adobe.granite.workflow.purge.Scheduler
由于服务是工厂服务,因此,sling:OsgiConfig 节点的名称需要标识符后缀,例如:
com.adobe.granite.workflow.purge.Scheduler-myidentifier
属性名称(Web 控制台)
OSGi 属性名称
描述
作业名称
scheduledpurge.name
计划清除的描述性名称。
工作流状态
scheduledpurge.workflowStatus

要清除的工作流实例的状态。以下值有效:

  • 已完成:清除已完成的工作流实例。
  • 正在运行:清除正在运行的工作流实例。
要清除的模型
scheduledpurge.modelIds

要清除的工作流模型的 ID。ID是模型节点的路径,例如:
/var/workflow/models/dam/update_asset

要指定多个模型,请单击 Web 控制台中的 + 按钮。

请勿指定任何值以清除所有工作流模型的实例。

工作流时限
scheduledpurge.daysold
要清除的工作流实例的时限(以天为单位)。

设置收件箱的最大大小 setting-the-maximum-size-of-the-inbox

通过配置​ AdobeGranite工作流服务,使用Web控制台将OSGi配置添加到存储库,可以设置收件箱的最大大小。 下表描述了为任一方法配置的属性。

NOTE
对于将配置添加到存储库,服务 PID 为:
com.adobe.granite.workflow.core.WorkflowSessionFactory
属性名称(Web 控制台)
OSGi 属性名称
最大收件箱查询大小
granite.workflow.inboxQuerySize

将工作流变量用于客户拥有的数据存储 using-workflow-variables-customer-datastore

工作流处理的数据存储在 Adobe 提供的存储 (JCR) 中。此类数据本质上可能是敏感的。您可能希望将所有用户定义的元数据/数据保存在您自己的托管存储中,而不是 Adobe 提供的存储中。这些部分描述了如何为外部存储设置这些变量。

设置模型以使用元数据的外部存储 set-model-for-external-storage

在工作流模型级别,提供了一个标志来指示模型(及其运行时实例)具有元数据的外部存储。对于标记为外部存储的模型的工作流实例,工作流变量不会保留在JCR中。

属性 userMetadataPersistenceEnabled 会存储在工作流模型的 jcr:content 节点 ​上。此标志会作为 cq:userMetaDataCustomPersistenceEnabled 保留在工作流元数据中。

以下插图显示的是如何在工作流上设置标志。

workflow-externalize-config

外部存储中的元数据的 API apis-for-metadata-external-storage

要在外部存储变量,请实施工作流公开的API。

UserMetaDataPersistenceContext

以下示例说明如何使用 API。

@ProviderType
public interface UserMetaDataPersistenceContext {

    /**
     * Gets the workflow for persistence
     * @return workflow
     */
    Workflow getWorkflow();

    /**
     * Gets the workflow id for persistence
     * @return workflowId
     */
    String getWorkflowId();

    /**
     * Gets the user metadata persistence id
     * @return userDataId
     */
    String getUserDataId();
}

UserMetaDataPersistenceProvider

/**
 * This provider can be implemented to store the user defined workflow-data metadata in a custom storage location
 */
@ConsumerType
public interface UserMetaDataPersistenceProvider {

   /**
    * Retrieves the metadata using a unique identifier
    * @param userMetaDataPersistenceContext
    * @param metaDataMap of user defined workflow data metaData
    * @throws WorkflowException
    */
   void get(UserMetaDataPersistenceContext userMetaDataPersistenceContext, MetaDataMap metaDataMap) throws WorkflowException;

   /**
    * Stores the given metadata to the custom storage location
    * @param userMetaDataPersistenceContext
    * @param metaDataMap metadata map
    * @return the unique identifier that can be used to retrieve metadata. If null is returned, then workflowId is used.
    * @throws WorkflowException
    */
   String put(UserMetaDataPersistenceContext userMetaDataPersistenceContext, MetaDataMap metaDataMap) throws WorkflowException;
}
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2