前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多公司下Flowportal.Net BPM流程步骤处理人的设定

多公司下Flowportal.Net BPM流程步骤处理人的设定

作者头像
崔文远TroyCui
发布2019-02-26 15:21:03
9660
发布2019-02-26 15:21:03
举报
文章被收录于专栏:远在上海远在上海

6月份以来随着ERP系统的升级上线,忙得不可开交,但因为公司组织机构变动,还是得花时间弄BPM的流程审批人的问题,为了一套流程同行所有的中国区的组织,我们使用角色的定义来设定流程。其中一个典型的是出差申请,其中一个步骤是给到申请人和同行人所在的部门最大的老板审批,我们在BPM的每个Company级别下的组织架构下开设Department级别的部门,然后在每个部门设定一个Department Head的角色。但是在设定步骤审批人的时候,使用以下代码代表当前申请人所在部门的Department Head。

代码语言:javascript
复制
Initiator.GetParentOU("Department").GetAllRoles("Department Head").AllMembers

相应的BPM设置截图如下:

然后使用以下代码代表(多行)同行人所在部门的Department Head

代码语言:javascript
复制
Member.FromAccount(FormDataSet["FormTravelRetinue.Requester"].ToString()).GetParentOU("Department").GetAllRoles("Department Head").AllMembers

但是问题出来了,如果有同行人的时候,是没问题的,一旦没有同行人,这段代码就会报错,说找不到同行人的部门Department Head,于是修改代码如下:

代码语言:javascript
复制
MemberCollection members = new MemberCollection();
if (Initiator.GetParentOU("Department").GetAllRoles("Department Head").AllMembers != null)
{
members.AddRange(Initiator.GetParentOU("Department").GetAllRoles("Department Head").AllMembers);
}
foreach(FlowDataRow row in FormDataSet.Tables["FormTravelRetinue"].Rows)
{
string account = Convert.ToString(row["Requester"]);
if (!string.IsNullOrEmpty(account) && !members.ContainsUser(account))
{
if (Member.FromAccount(account).GetParentOU("Department").GetAllRoles("Department Head").AllMembers != null)
{
     members.AddRange(Member.FromAccount(account).GetParentOU("Department").GetAllRoles("Department Head").AllMembers);
}
}
}
return members;

这样一段代码,却造成一旦有同行人,就没办法提交成功,直接BPM的服务Down掉了。

于是联系官方技术,给出了一下的优化建议:

于是官方技术刘亮发过来修改的代码如下:

代码语言:javascript
复制
//第3版
MemberCollection members = new MemberCollection();
foreach (Member member in Initiator.GetParentOU("Department").GetAllRoles("Department Head").AllMembers)
{
members.Add(member);
}
foreach (FlowDataRow row in FormDataSet.Tables["FormTravelRetinue"].Rows)
{
string account = Convert.ToString(row["Requester"]);
if (!string.IsNullOrEmpty(account) && !members.ContainsUser(account))
{
foreach (Member member in Member.FromAccount(account).GetParentOU("Department").GetAllRoles("Department Head").AllMembers)
{
members.Add(member);
}
}
}
return members;

就这样通过替换AddRange的方法,问题解决了!

记录在这里,给可能遇到类似需求的朋友。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年6月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档