【问题标题】:Proper User and Notifications for Workflow de/activation工作流程停用/激活的适当用户和通知
【发布时间】:2014-07-16 07:21:37
【问题描述】:

我们有一个多站点设置,其中包含单独的内容树以及自己的组和用户。严格执行 4 眼原则,因此任何用户都没有复制权限。

CQ 的限制是,如果没有复制权限的用户单击 SiteAdmin 或 Sidekick 中的激活按钮,则会触发默认激活请求工作流。这是硬编码的,无法更改;这同样适用于停用。所以我所做的是创建一个自定义工作流程步骤,我将其作为默认工作流程的唯一步骤。此自定义步骤检查工作负载项的路径并触发此树的正确工作流。

第一个问题:由于这一步直接完成并触发了新的工作流,启动工作流的用户立即得到工作流完成的消息。我能否以某种方式让第二个工作流成为子任务,这样初始工作流只有在子任务完成后才会完成?

第二个问题: 特定于树的工作流有一个审批者步骤,然后是自定义的 4 眼检查步骤(如果最后修改的用户等于审批者,则工作流会退回到审批者步骤有错误),最后一步是com.day.cq.wcm.workflow.process.ActivatePageProcess。但由于没有用户具有复制权限,因此未选中“复制为参与者”复选框。因此,每个页面都有admin 作为cq:lastReplicatedBy。是否有可能在没有复制权限的情况下设置批准人?

我们的分叉工作流程的代码片段:

protected void processItem(WorkItem item, WorkflowSession wfSession, WorkflowData workflowData, String config) throws WorkflowException {
    ResourceResolver resolver = getResourceResolver();
    PageManager pm = resolver.adaptTo(PageManager.class);
    try {
        String path = workflowData.getPayload().toString();
        Page page = pm.getContainingPage(path);
        if (page != null) {
            //calculate the id of the correct model depending on page
            String wfid = getWfId(page);
            WorkflowModel mmodel = wfSession.getModel(wfId);
            wfSession.startWorkflow(model, workflowData);
        }
    } finally {
        closeResourceResolver(resolver);
        wfSession.terminateWorkflow(item.getWorkflow());
    }
}

ps。这是一个关于我们特殊工作流程设置的综合问题。如果有版主认为我应该问两个单独的问题,请告诉我。

【问题讨论】:

    标签: workflow aem


    【解决方案1】:

    这是一个非常有趣的案例!

    第一个问题:

    CQ5.6 及更高版本:Day CQ Workflow Email Notification Service 配置中,有一些复选框允许在中止或完成时关闭通知。

    CQ5.5:

    • 选项 1 您可以通过在相同的服务配置 (Day CQ Workflow Email Notification Service) 中将 event.topic 留空来关闭两个通知(中止和完成)

    • 选项 2(不好的方式)您可以删除用于生成该电子邮件的模板。 (/etc/workflow/notification/email/default/en.txt) 这会导致两件事:

      1. 不再发送电子邮件。
      2. 您的日志中会有丑陋的堆栈跟踪。但是,通过正确的日志配置,这些堆栈跟踪可以从主 error.log 中删除。

    第二个问题:我会选择最简单的方法,然后在 CRX 级别更改 cq:lastReplicatedBy 字段的值。在我看来,任何其他方式都太复杂了。 (每个解决方案都只是一种解决方法,我认为没有一个干净的解决方案)

    【讨论】:

    • 感谢您的回答,我将尝试解决第二个问题。首先,我认为我们以某种方式禁用了电子邮件通知。
    • 您能分享一下禁用电子邮件通知的解决方案吗?我对你的方法很感兴趣。
    • 有一个用于工作流的 OSGi 服务,您可以在其中禁用电子邮件:Day CQ 工作流电子邮件通知服务您可以在此处判断是否在中止和/或完成时发送电子邮件
    • CQ5.5 上没有这样的复选框,但是在同一个服务中将 event.topic 留空就可以了!为了将来的访问者,我将编辑我的答案。
    • 好的,那么这可能是在 5.6 或 5.6.1 中添加的,谢谢输入
    【解决方案2】:

    任何工作流程模型都是可定制的,因此您可以让自己的流程来执行任务。您可以在调用默认工作流程步骤之前添加任何逻辑。另见How to modify the Adobe CQ ActivatePageProcess process

    【讨论】:

    • 对不起,但这对于我的具体问题不是很有用。正如我所写的,我已经自定义了默认的停用/激活工作流程并具有自定义步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2021-11-07
    • 2022-01-03
    相关资源
    最近更新 更多