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

Tho*_*mas 3 workflow aem

我们有一个多站点设置,其中包含具有各自组和用户的单独内容树.严格执行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());
    }
}
Run Code Online (Sandbox Code Playgroud)

PS.这是关于我们特殊工作流程设置的综合问题.如果某位主持人认为我应该提出两个单独的问题,请告诉我.

Mic*_*udy 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字段的值.在我看来,任何其他方式都会过于复杂.(并且每个解决方案都只是一种解决方法,我认为没有一个干净的解决方案)