如何捕获在Alfresco的Activiti 6中发送电子邮件时发生的错误?

时间:2018-12-28 10:20:25

标签: java email error-handling alfresco activiti

我需要发送电子邮件,并且我使用service task

<serviceTask id="SendEmail_1" name="Sending a notification by email" activiti:type="mail">
  <documentation></documentation>
  <extensionElements>
    <activiti:field name="to">
      <activiti:expression><![CDATA[${to}]]></activiti:expression>
    </activiti:field>
    <activiti:field name="subject">
      <activiti:expression><![CDATA[${subject}]]></activiti:expression>
    </activiti:field>
    <activiti:field name="text">
      <activiti:expression><![CDATA[${body}]]></activiti:expression>
    </activiti:field>
    <activiti:field name="ignoreException">
      <activiti:string><![CDATA[true]]></activiti:string>
    </activiti:field>
    <activiti:field name="charset">
      <activiti:string><![CDATA[utf8]]></activiti:string>
    </activiti:field>
  </extensionElements>
</serviceTask>

我还需要捕获发送邮件时发生的错误。在用户指南中,我读到为了获得对错误的描述,您需要从过程变量中读取变量“ exceptionVariableName”的值。正如您在上面看到的,我将其添加到服务任务中,但是到目前为止,我还没有看到它起作用。我试图给他收件人的地址不存在,但是没有错误。还能用吗?什么时候起作用?还是有另一种获取错误描述的机制?

我使用Activiti 6.0.0。

PSS我试图在“ extensionElements”标记中添加以下代码块:

<activiti:field name="exceptionVariableName">
  <activiti:string><![CDATA[error]]></activiti:string>
</activiti:field>

它也没有帮助我(例如,如果收件人不正确)。

PSSS我在创建进程配置bean时指定了错误的smtp服务器主机,但得到了错误描述(下面显示了用于接收它的Java代码),但是它没有信息。

public void logEmailSending(DelegateExecution execution) {
    Object error = execution.getVariable("error");
    if (error != null)
        logger.error("An error occurred while sending the email: " + error);
}

它几乎解决了我的问题,但是,正如我在上面所写,我想更具体地讲,但仍然无法在收件人的地址中找到错误

1 个答案:

答案 0 :(得分:0)

我们在 Activiti BPM 6.0.0 中碰壁了。我们通过以下步骤解决了我们的问题。


  1. 实施新的服务任务e。 G。扩展org.activiti.engine.impl.bpmn.behavior.MailActivityBehavior的SendEmailServiceTask。为了覆盖负责异常处理的方法handleException,这是必需的。

从Activiti文档8.5.6. Email Task中注意到,邮件任务不是BPMN 2.0规范的正式任务(因此,它没有专用图标)。因此,在Activiti中,邮件任务被实现为专用服务任务。

在执行服务任务时,我们注意了:

  • 由于SMTP错误导致正在捕获EmailException,SendFailedException。
  • 从异常中解析信息性数据,并登录到应用程序日志和用户操作日志中。
  • 设置我们的自定义BPM过程变量以控制进一步的执行流程。

  1. 修改BPMN流程定义,更精确地用我们从第1点开始的新服务任务替换邮件任务激活。

为了重现Activiti提供的默认邮件任务的相同功能,我们必须在 from bcc 主题文本。设置与先前定义的邮件任务相同的值。

最重要的是,我们必须将 ignoreException 设置为 true ,以防止BPM引擎由于SMTP异常(无效的收件人,SMTP服务器域等)而引发ActivitiException。 ),同时向收件人发送电子邮件。

我们的业务要求是将邮件成功发送给密件抄送字段中的所有收件人,否则将失败。因此,我们没有将服务任务建模为多实例元素。


我绝对知道针对此特定问题还有其他解决方案。如上所述,我们设法解决了这个问题。