Workflow 工作流取消/激活的正确用户和通知

Workflow 工作流取消/激活的正确用户和通知,workflow,aem,Workflow,Aem,我们有一个多站点设置,有单独的内容树,有自己的组和用户。严格执行4眼原则,因此用户没有复制权限 CQ的限制是,如果没有复制权限的用户单击SiteAdmin或Sidekick中的激活按钮,则会触发默认的激活工作流请求。这是硬编码的,不能更改;这同样适用于停用。因此,我所做的是创建一个自定义工作流步骤,作为默认工作流中的唯一步骤。此自定义步骤检查工作负载项的路径,并为此树触发正确的工作流 第一个问题:由于此步骤直接完成并触发了新的工作流,启动工作流的用户会立即收到工作流已完成的消息。我是否可以让第二

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

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

第一个问题:由于此步骤直接完成并触发了新的工作流,启动工作流的用户会立即收到工作流已完成的消息。我是否可以让第二个工作流成为子任务,这样只有在子任务完成时才能完成初始工作流

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

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

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 CQ工作流电子邮件通知服务
    )来关闭这两个通知(中止和完成)

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

  • 电子邮件将不再发送
  • 日志中会有难看的堆栈跟踪。但是,通过正确的日志记录配置,可以从main error.log中删除这些堆栈跟踪

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

对不起,但这对于我的具体问题不是很有用。正如我写的那样,我已经自定义了默认的解除/激活工作流,并且有自定义步骤。感谢您的回答,我将尝试解决第二个问题。首先,我认为我们以某种方式禁用了电子邮件通知。您能分享禁用电子邮件通知的解决方案吗?我对你的方法很感兴趣。有一个OSGi工作流服务,你可以在其中禁用电子邮件:Day CQ Workflow Email Notification Service,你可以说是否在中止和/或完成时发送电子邮件CQ5.5上没有这样的复选框,但在同一服务中保留event.topic为空就可以了!为了将来的访问者,我会编辑我的答案。好的,那么也许这是添加了5.6或5.6.1,谢谢你的输入