测试版本:TC10
用户在配置流程时,经常会提出要求,在每个节点配置邮件通知,以便提醒用户及时进行审批。这个功能是使用的系统默认的handler,EPM-Notify这个handler。但是实际使用时,在有些情况流程虽然提交,但是此程序会报错,且无法收到邮件。错误如图1:
图1
此问题的复杂之处在于有时报错,有时正常。而且此handler是系统自带的handler,一般健壮性是比较好的,通常不会出问题。例如我下图所做的demo流程,校对节点时,用户就可以顺利收到通知邮件,但是校对提交时就会报错,批准人员无法收到邮件。
图2
我们对问题多个层面进行了分析。首先两层tao窗口和syslog未发现有用信息。又是OOTB的handler,无法修改源码,追加注释信息来协助分析问题。其次是在同一个流程不同节点配置了多次handler,配置参数没有问题。第三,我们针对同一个对象提交流程得到不同结果,item本身也没有什么问题。最后我们定位的问题的原因还是权限问题导致的程序报错。
我们来分析下产生的具体原因。首先是该项目对权限控制的非常细,不同组之间创建的对象都互相不可见。但是审核时有需要跨组审核。流程配置时,是在各节点配置了动态读权限,以保证各节点审核时都能正常看到目标对象。
图3
通常情况下,如果流程不涉及到邮件通知的话,现有配置已解决了跨组或者跨部门的审核要求。可以实现正常的流程审批。
图4
但是如果有邮件通知就有可能失败。这就要分析一下邮件通知的逻辑了。我们通知的目的是为了提醒审核者审批,所以我们要配到审核节点,通知校对人员,我们要配到校对的开始位置,通知批准人员,配置到批准节点的开始位置。功能触发是当前节点提交任务后,触发后一个节点开始位置处的通知handler来发送邮件通知。发件人是当前节点的审核人,接收人是下一节点的审核人。hanller是配置在下一个节点开始处。这样当前节点审核人一旦提交流程,流程任务就跑到下一个节点触发,当前节点审核人如果是跨部门且在工作中对该对象无读权限的话,这时触发邮件通知功能时,由于无读权限,导致目标对象为NULL,程序发送邮件失败。而发起人提交任务给校对时,由于对象是发起人创建的,发起人一直有读权限,就会正常发送邮件。
所以邮件通知功能也牵涉到了权限问题。当某些单位权限管理比较细致,跨部门无权限的时候,就可能导致发送邮件失败。在于客户沟通方案时,如果客户权限要求较高且需要邮件通知时,一定要考虑此问题,并与客户沟通,避免后续实施时由于权限无法满足要求导致邮件功能失败。