我们有一个多站点设置,其中包含具有各自组和用户的单独内容树.严格执行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.这是关于我们特殊工作流程设置的综合问题.如果某位主持人认为我应该提出两个单独的问题,请告诉我.
这是非常有趣的案例!
第一个问题:
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)这将导致两件事:
第二个问题:我会选择最简单的方法,然后在CRX级别更改cq:lastReplicatedBy字段的值.在我看来,任何其他方式都会过于复杂.(并且每个解决方案都只是一种解决方法,我认为没有一个干净的解决方案)