我们有一个多站点设置,其中包含独立的内容树以及各自的组和用户。严格执行四眼原则,因此任何用户都没有复制权。
CQ 的局限性在于,如果没有复制权限的用户单击 SiteAdmin 或 Sidekick 中的激活按钮,则会触发默认激活工作流请求。这是硬编码的,无法更改;这同样适用于停用。所以我所做的是创建一个自定义工作流程步骤,我将其作为默认工作流程中的唯一步骤。此自定义步骤检查工作负载项的路径并为此树触发正确的工作流。
第一个问题:由于这一步直接完成并触发了新的工作流,启动工作流的用户会立即收到工作流已完成的消息。我能否以某种方式将第二个工作流程作为子任务,以便初始工作流程仅在子任务完成时完成?
第二个问题:树特定的工作流程有一个批准人步骤,然后是自定义的四眼检查步骤(如果最后修改的用户等于批准人,则工作流退回到批准人步骤有错误),最后一步是 com.day.cq.wcm.workflow.process.ActivatePageProcess
。但由于没有用户具有复制权限,因此未选中复选框“作为参与者复制”。因此每个页面都有 admin
作为 cq:lastReplicatedBy
。是否有可能在没有复制权的情况下设置批准者?
我们 fork 工作流程的代码片段:
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());
}
}
附言。这是一个关于我们特殊工作流程设置的综合问题。如果某些版主认为我应该问两个单独的问题,请告诉我。
最佳答案
这是一个非常有趣的案例!
第一个问题:
CQ5.6 及进一步:
在 Day CQ Workflow Email Notification Service
配置中,有一些复选框允许在中止或完成时关闭通知。
CQ5.5:
选项 1 您可以通过在相同的服务配置 (
Day) 中将
)event.topic
留空来关闭这两个通知(中止和完成) CQ 工作流电子邮件通知服务选项 2(不好的方法)您可以删除用于生成该电子邮件的模板。 (
/etc/workflow/notification/email/default/en.txt
) 这会导致两件事:- 将不再发送电子邮件。
- 您的日志中会有难看的堆栈跟踪。但是,通过适当的日志记录配置,这些堆栈跟踪可以从主错误日志中删除。
第二个问题:我会选择最简单的方法,然后在 CRX 级别更改 cq:lastReplicatedBy 字段的值。在我看来,任何其他方式都太复杂了。 (每个解决方案都只是一个解决方法,我认为没有一个干净的解决方案)
关于workflow - 工作流程停用/激活的正确用户和通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24774570/