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

Notifications Alfresco工作流和电子邮件通知,notifications,workflow,alfresco,jbpm,Notifications,Workflow,Alfresco,Jbpm,我编写了一个定制的JBPM工作流,对于某些任务,它必须向指定的用户发送通知 我知道如何使用自定义java操作或简单的javascript执行此操作,但我正在尝试使用标志bpm_sendEMailNotifications:如果此标志为true,则类org.alfresco.repo.workflow.jbpm.alfrecoassignment将使用实用程序类org.alfresco.repo.WorkflowNotificationUtils自动发送通知 例如,我的工作流定义中的以下任务在创建

我编写了一个定制的JBPM工作流,对于某些任务,它必须向指定的用户发送通知

我知道如何使用自定义java操作或简单的javascript执行此操作,但我正在尝试使用标志bpm_sendEMailNotifications:如果此标志为true,则类org.alfresco.repo.workflow.jbpm.alfrecoassignment将使用实用程序类org.alfresco.repo.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>
我验证了任务是否已按预期分配给其他用户


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

一个可能的解决方案是使用自定义的alfrecoasignment,其中发送电子邮件通知的代码以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());
AuthenticationUtil.runAs(新的RunAsWork(){
public Void doWork()引发异常{
//
//做作业
//
布尔sendEMailNotification=(布尔)finalExecutionContext.getVariable(WorkflowNotificationUtils.PROP_SEND_EMAIL_NOTIFICATIONS);
if(finalAssignedActor!=null)
{
可赋值.setActorId(finalAssignedActor);
if(Boolean.TRUE.equals(sendEMailNotification)==TRUE)
{
//发送通知
WorkflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
服务,
JBPMEngine.ENGINE_ID+“$”+finalExecutionContext.GettaskinInstance().getId(),
finalAssignedActor,
假);
}
}
if(finalAssignedPooledActors!=null)
{
可转让。setPooledActors(finalAssignedPooledActors);
if(Boolean.TRUE.equals(sendEMailNotification)==TRUE)
{
//发送通知
WorkflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
服务,
JBPMEngine.ENGINE_ID+“$”+finalExecutionContext.GettaskinInstance().getId(),
finalAssignedPooledActors,
正确的);
}
}         
返回null;
}
},AuthenticationUtil.getSystemUserName());

您仍然使用JBMP有什么原因吗?几年来,人们普遍建议在Alfresco的所有新工作流中使用Activiti@加格拉瓦尔:是的,这是有原因的。我被你的这种说法弄糊涂了。“atc1是单击转换按钮的用户,而不是分配给任务的当前用户。”。如果atc1不是分配给任务的当前用户,那么他如何能够看到转换按钮?@mitpatoliya,你是对的,我没有清楚地描述它。在将任务分配给不同的用户之后,电子邮件由action AlfrescoAssignment发送。事件顺序为:1)atc1单击上一个任务上的“已完成”操作2)此任务结束并创建新任务(上面写的任务)3)此任务由Alfrecoasignment分配给用户“legal1”4)Alfrecoasignment尝试发送电子邮件通知。由于代码仍代表身份验证用户atc1运行,因此访问新任务失败
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());