业务背景:某单据有三级部门和二级部门字段,业务提醒需求如下:三级部门的提醒人与部门领导不一致,二级部门的提醒人与部门领导不一致。
实现方案:创建工作流角色,不同部门配置对应的接收人;监控方案解析插件中动态增加消息接收人及对应的明细消息(由于监控方案配置页面使用工作流角色会报错,因此只能使用插件开发方式)
为监控对象编写监控方案解析插件
继承AbstractWarnServicePlugIn类
重写BeforeSendWarnMessage
获取所有的明细信息,按照三级部门分组,组成Dictionary
获取对应的工作流角色,根据部门查找对应的接收人,并在e.WarnMessage.UserWarnMessageCollection添加接收人(注意事项:UserWarnMessageCollection是个Dictionary,key不能重复,对应的Value是个消息明细数组,也不能重复)
//根据部门负责人员工找到用户id
UserWarnMessage userW = new UserWarnMessage(long.Parse(DeptUtil.GetUserIDByYg(this.Context, fzr["F_Emp_Emp_ID"].ToString())));
if (!e.WarnMessage.UserWarnMessageCollection.ContainsKey(userW.UserId))
{
//如果接收人不在集合中,添加记录
//为用户增加预警消息
foreach (var item in items)
{
userW.Add(item);
}
e.WarnMessage.UserWarnMessageCollection.Add(userW.UserId, userW);
}
else
{
//如果接收人在集合中,补充明细消息
userW = e.WarnMessage.UserWarnMessageCollection[userW.UserId];
foreach (var item in items)
{
if (!userW.GetMessageItems().Contains(item))
{
userW.Add(item);
}
}
}
2. 注册插件
3. 将插件放到服务器bin中,测试。