Alfresco工作流程和电子邮件通知

时间:2014-08-06 08:25:24

标签: notifications workflow alfresco jbpm

我编写了一个自定义JBPM工作流,某些任务必须向指定用户发送通知。

我知道如何使用自定义java操作或简单的javascript,但我尝试使用标志bpm_sendEMailNotifications:如果此标志为true,则类org.alfresco.repo.workflow.jbpm.AlfrescoAssignment会自动发送使用实用程序类org.alfresco.repo.workflow.WorkflowNotificationUtils的通知。

例如,我的工作流定义中的以下任务在创建任务时将标志设置为true。

<task-node name="finalReview">
    <task name="mswf:reviewTask">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
           <pooledactors>#{finalReviewReviewer}</pooledactors>
        </assignment>
        <event type="task-create">
            <script>
                executionContext.setVariable("bpm_sendEMailNotifications", true);
            </script>
        </event>
    </task>
    <transition name="approve" to="endFinalReview"/>
    <transition name="reject" to="endFinalReview"/>
</task-node>

因为,当分配任务时,此标志为true,AlfrescoAssignment会尝试发送通知。

不幸的是,转换到此任务节点失败,出现以下异常: &#34; 07052361使用id =&#39; jbpm $ 200957&#39;访问任务用户&#39; atc1&#39;&#34;

不允许使用

atc1是单击转换按钮的用户,而不是分配给该任务的当前用户。

WorkflowNotificationUtils类在尝试获取WorkflowTask时抛出异常(在Alfresco企业版4.1.7的第168行,即sendWorkflowAssignedNotificationEMail()方法的第一行):

WorkflowTask workflowTask = services.getWorkflowService().getTaskById(taskId);

我已验证该任务已按预期分配给其他用户。

我希望有人知道这个解决方案有什么问题。与此同时,我将尝试将此标志与vanilla工作流一起使用,以查看它是否也失败。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用自定义AlfrescoAssigment,其中发送电子邮件通知的代码在runAs中执行:

AuthenticationUtil.runAs(new RunAsWork<Void>() {
    public Void doWork() throws Exception {
        //
        // make the assignment
        //
        Boolean sendEMailNotification = (Boolean)finalExecutionContext.getVariable(WorkflowNotificationUtils.PROP_SEND_EMAIL_NOTIFICATIONS);
        if (finalAssignedActor != null)
        {
            assignable.setActorId(finalAssignedActor);

            if (Boolean.TRUE.equals(sendEMailNotification) == true)
            {
                // Send the notification
                WorkflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
                            services, 
                            JBPMEngine.ENGINE_ID + "$" + finalExecutionContext.getTaskInstance().getId(),
                            finalAssignedActor,
                            false);
            }

        }
        if (finalAssignedPooledActors != null)
        {
            assignable.setPooledActors(finalAssignedPooledActors);

            if (Boolean.TRUE.equals(sendEMailNotification) == true)
            {
                // Send the notification
                WorkflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
                        services, 
                        JBPMEngine.ENGINE_ID + "$" + finalExecutionContext.getTaskInstance().getId(),
                        finalAssignedPooledActors,
                        true);
            }
        }         

        return null;
    }

}, AuthenticationUtil.getSystemUserName());