适用于工作流程/激活的用户和通知

时间:2014-07-16 07:21:37

标签: workflow cq5 aem

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

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

第一个问题:直接完成此步骤并触发新工作流程,启动工作流程的用户立即获得工作流程已完成的消息。我可以以某种方式将第二个工作流程作为子任务,以便初始工作流程仅在子任务完成时完成吗?

第二个问题:特定于树的工作流程有一个审批步骤,然后是自定义四眼检查步骤(如果上次修改的用户等于审批者,则工作流程将返回审批者步骤有错误),最后一步是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。这是关于我们特殊工作流程设置的综合问题。如果某位主持人认为我应该提出两个单独的问题,请告诉我。

2 个答案:

答案 0 :(得分:5)

这是非常有趣的案例!

第一个问题:

CQ5.6及更进一步:Day CQ Workflow Email Notification Service配置中,有一些复选框可以关闭中止或完成的通知。

<强> CQ5.5:

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

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

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

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

答案 1 :(得分:0)

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