6年做BPM的实施、开发、推广应用的一个小结

晚上加班整理了一下这些年(从2010年就开始使用了)FlowPortal.Net BPM的使用情况,希望能从用户、流程、申请、效率、价值等角度做一些可视化的分析。发现几点有趣的现象。

1、真正用得多的流程都是跟员工利益有重大关系的。
2、有一些流程只是为了帮助一小部分人考虑的时候,产生的效益其实不大。
3、没有一个独立的流程管控部门,不做绩效分析、流程梳理和优化,其实很难达到提高效率的目标,顶多只是电子化,无纸化。
4、做流程很寂寞,需要坚守并打开思路。思考如何做的更好,不能单纯从技术角度考虑。得从老板的角度考虑钱、时间、资源、效率。

目前遇到的问题:

1、表单内容在邮件上的全部展现或者说手机App上的表单展示

2、用户对流程的基本概念培训

3、流程系统和其它系统的无缝结合

Loading

Flowportal.Net BPM中拒绝后更新数据库字段的方法

今天FlowPortal.Net群里有人提问一个问题,希望能在流程被拒绝后,更改流程对应数据库中的指定字段值,这个其实很简单啦,FlowPortal提供了很强大的流程事件,大家可以自行写代码。

请问,流程拒绝后,如何更改流程字段

例如:流程提交收 字段a 有空,改为 ‘申请中’,同意后,A改为 ‘同意’,如果拒绝 A 改为 空

打开“流程管理器”右键点击指定的流程,点击”Event”的Tab,就能看到丰富的事件,我常用的有OnTaskRejected、OnTaskAborted、OnTaskDeleted,其实这几项我实战项目中必须要配置的。

最关键的就是代码的写法,大家参考以下代码。其中FormHire是你流程对应的表(我这个例子是非重复表)名,Status是其中的字段。

FormDataSet.Tables[“FormHire”].Rows[0][“Status”] = “Rejected”;

 

补充:后来快乐DIY问我:如果是重复表呢,好吧,做好人做到底,这个代码不管重复表还是不重复表都行:FormDataSet.Tables[“tableName.FieldName”]=”Reject”;

 

简单吧?!如果觉得有用,就留下你的大名,留言给我你的感触。

Loading

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

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

Initiator.GetParentOU("Department").GetAllRoles("Department Head").AllMembers

相应的BPM设置截图如下:

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

Member.FromAccount(FormDataSet["FormTravelRetinue.Requester"].ToString()).GetParentOU("Department").GetAllRoles("Department Head").AllMembers

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

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掉了。

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

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

//第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的方法,问题解决了!

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

Loading

.Net MVC开源工作流快速开发平台-RoadFlow

其实2014年的时候就无意间看到这款RoadFlow开源的工作流开发平台,相比ccflow,这应该属于轻量级的.Net开源平台。今年打算有空研究一下,毕竟MVC也算是目前的热点技术,充充电还是有必要的。

另外,这款软件官方的介绍是100%源码开放的,并且对于收费的版本只有2种,价格也不贵,适合小企业购买,更适合软件公司购买,集成到自己现有的系统中,应该省力不少。

以下介绍来自官方网站,你可以下载源码和查看详细介绍

先进的.NET MVC开源工作流快速开发平台 – RoadFlow

RoadFlow是一款集成工作流引擎的ASP.NET MVC快速开发平台,由从事多年工作流开发与实施的技术团队开发。该工作流平台是根据多年对企事业单位工作流应用经验总结而成,是一款符合于国情的工作流平台,特别适合于国内无标准,复杂多变的工作审批流转。拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角色的权限管理等先进设计理念,是您开发OA、CRM、HR、ERP等大型系统的最佳基础平台。

全浏览器兼容的可视化流程设计器

RoadFlow可视化流程设计器完全兼容IE6+,火狐,谷歌等浏览器。该设计器在VML和SVG之间自动切换图形展现方式来兼容各浏览器。 通过该设计器能够设计出复杂业务逻辑的工作流程,并和表单设计器以及系统平台其它模块完美结合实现大型企事业单位的OA和业务工作流转。能够实现对数据字段级控制,可以通过设置在某一步骤显示或隐藏某些字段数据。同时支持复杂的工作流设计,如会签,子流程等。

方便快捷的流程表单设计器

RoadFlow表单设计器是在ueditor的基础上加入系统的流程控件,通过与数据库表字段绑定实现流程业务数据的保存和读取。和流程设计器结合实现在某个步骤编辑,显示或隐藏字段数据。实现主表和多个明细表关联功能。

流程引擎与第三方系统完美集成

RoadFlow针对很多客户已有系统,需要一个工作流系统与现有系统完美整合的需求,特推出与第三方系统完美集成版,只需将我们系统目录拷贝至三方系统,实现简单几个接口即可实现完美集成。

Loading

BPM的移动互联的一点想法

上周老板说弄个公司的羽毛球活动的在线报名,我首先想到的就是可以放在BPM系统里面,弄一个流程,但后来想想其实这种活动发起和报名,有很多免费的应用(包括WebApp),其中一个很接地气的国内应用就是基于微信号:messagehelper,中文名叫:信息助手,他们官方网站:hudong.ba,这个是Tony以前推荐给我的,当初因为这个还搞过一个类似的程序,用来网上预订冬枣,然后就没有然后了。

可是我们都知道的,目前国内的移动互联网应用那么多,企业级应用未来也会走到这个趋势来的,那么基于BS架构的BPM系统,我个人觉得其实是未来最有可能从企业内部互联外部的一个系统,这个外部可以代表外部用户,包括客户和供应商,也可以代表自己的员工在公司外部。

如果有一天,BPM走向外部,其实有一个很好的平台可以借助,那就是微信公众平台。如果你还不了解,请百度下。

也许有一天大部分职场人士的手机里都有微信,那么接入微信后,你的BPM就有很大的优势,你只需要绑定微信账号和企业内部的BPM账号,然后就能让用户非常方便的连接你的应用。登录微信,就能方便的看到待处理任务,就能方便的处理任务,提交申请等,该多美好呀。

各位BPM厂商,别说我没提醒你,赶紧的接入微信吧。

Loading

Flowportal.Net BPM的浏览权限变更问题

今天处理了一个特别的Case,本来流程的权限开了所有人都可以查看(如下图),但是因为某些申请的内容较敏感,现在不希望公开给所有人了。于是只能后台进行数据库的修改,相关SQL代码如下。

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT TOP 1000 [TaskID]
      ,[SID]
      ,[AllowRead]
      ,[AllowAdmin]
      ,[ShareByUser]
      ,[CreateDate]
      ,[CreateBy]
      ,[ID]
      ,[ExtYear]
      ,[ExtDeleted]
  FROM [BPMDB].[dbo].[BPMSecurityTACL]
  --WHERE TaskId=10225
  
WHERE TaskId IN (SELECT TaskId FROM [BPMDB].[dbo].[BPMInstTasks] WHERE ProcessName='Travel')
AND SID='S_GS_90674E5E-AC3C-4032-9EDF-7477F2247542'
ORDER BY CreateDate DESC
UPDATE [BPMDB].[dbo].[BPMSecurityTACL]
SET AllowRead=0
WHERE TaskId IN (SELECT TaskId FROM [BPMDB].[dbo].[BPMInstTasks] WHERE ProcessName='Travel')
AND SID='S_GS_90674E5E-AC3C-4032-9EDF-7477F2247542'

完成上述步骤之后,还需要进行指定部门或角色的人可以看到,所以第二步的思路就是针对流程设定相应的权限,然后后台写sql对历史的申请进行TaskRead的授权,这里就不赘述了。

Loading

FlowPortal.Net BPM中常用的js之:Javascript计算两个日期间隔的天数

今天开始一个系列,记录FlowPortal.Net BPM中常用的js代码。以下代码是最近请假项目中用到的计算2个日期之间的天数的(根据需要天数加了一天,请根据实际情形自行调整),提供给大家参考,使用方法为在相应的Text的Express上使用代码:javascript('CalculateDay',WAIWorkflow:FormLeave.StartDate,WAIWorkflow:FormLeave.EndDate)。

function CalculateDay(startdate,enddate){
    var days=1;
    var tempdate;
    var date1;
    var date2;
    //格式为2014-09-22
    if (startdate!="" && enddate!="")
    {
    //alert(startdate);
    //alert(enddate);
    tempdate = startdate.split("-")
    //转换为09-22-2014格式
    date1 = new Date(tempdate[1] + '-' + tempdate[2] + '-' + tempdate[0]) 
    tempdate = enddate.split("-")
    date2 = new Date(tempdate[1] + '-' + tempdate[2] + '-' + tempdate[0])
    //将两个时间相减,求出相隔的天数
    //days = (Math.abs(date2 - date1))/1000/60/60/24;
    days = (date2 - date1)/1000/60/60/24;
    days = days+1;
    }
    //alert(days);
    return days;
    }

想看更多FlowPortal.Net BPM干货,欢迎免费订阅老崔的FlowPortal BPM干货

Loading

免费订阅老崔的FlowPortal.Net BPM干货分享

考虑再三,决定开一个QQ的邮件列表,定期分享一些自己的FlowPortal.Net的使用感触、经验、心得体会、问题解决方案,有兴趣的朋友可以通过以下方式进行订阅:
1、[URL=http://www.cuiwenyuan.com/FlowPortalBPM/]www.cuiwenyuan.com/FlowPortalBPM/[/URL]
2、[URL=http://list.qq.com/cgi-bin/qf_invite?id=6f2870b07d354c642ce9494d39adc0fd7c7fc7fd410c5147]免费订阅老崔的FlowPortal BPM干货[/URL]
3、通过本页面以下输入框进行订阅(推荐

哪些人适合订阅

1、FlowPortal.Net BPM的最终用户
2、FlowPortal.Net BPM的开发人员
3、企业内部C# .Net工作流开发的技术人员
4、业务部门的负责人或流程部门负责人
5、IT经理、主管
6、BPM从业者

QQ交流群

另外,欢迎大家加入BPMSalon的QQ群进行交流:323194188

Loading

Flowportal.Net BPM帮我轻松搞定单次出差+多出差报表的子表单设计

首先要感谢3个人,第1个是宁波的许先生(QQ昵称:木木),他是FlowPortal应用高手,电话指导我如何通过子流程的方式满足客户的需求,不失是一个绝妙的解决方案。第2个是FlowPortal.Net的官方技术支持Ken,帮我使用FlowPortal的自带功能轻松完成客户的需求。最后一个是QQ上的朋友柏先生,他信任我,让我原创的《[URL=http://www.cuiwenyuan.com/shanghai/post/FlowPortal-Plugin-UserSignature.html]原创FlowPortal用户手写签名插件:Signature[/URL]》有机会帮他们的客户快速满足了手写签名的需求。

言归正传,我的需求如下:
1、出差申请是一个流程,在流程中的“总经理审批”后有一个“提交出差报告”的步骤
2、用户可以添加多个出差报告,但要求按照标准的报告格式填写
3、出差报告的详细信息需要保存到数据库表

我截了个图如下期望效果:

该如何实现呢?以下就是使用FlowPortal.Net BPM实现单次出差+多出差报告的主表单和子表单要领。

1、需要创建明细表,然后绑定到主表单的Grid动态表
2、明细表额外创建一个字段(如ReportId)记录出差报告的主键Id
3、按照正常流程创建Form Service、子表单,关联出差报告表到创建的Form Service和子表单
4、需要在Grid动态行里添加子表单的链接,关联到上一步创建的Form Service,同时把子表单绑定到明细表的ReportId
5、发起一下流程,就可以测试通过了

如果你也有类似的出差需求,或者同类型的主表单+子表单的需求,不妨参考一下。
如果没看懂,请QQ(17185490)联系我。

Loading

原创FlowPortal用户手写签名插件:Signature,需要另购手写板(及手写笔)

近期人事部提出需求,要给所有的工人使用电脑请假申请,代替纸质的申请。因为不可能给每一位工人开设Windows或者应用系统账号,更不可能给每一个工人配置电脑,所以他们使用公用的电脑来来申请,所使用的BPM账号也是共享的。所以面临如下风险:

1、工人可以随便帮别人申请,不管善意的还是恶意的。
2、中国的法律环境下,公用账号的系统,增加手写签字的记录可以规避一些风险。

现在的需求提出来了,第一个问题很好解决,我们让工人在领班的带领下去申请休假,领班不能泄露BPM的登录密码。工人使用完毕,及时退出。第二个问题呢比较棘手,从需求提出来,搞了2个多星期,终于搞出来了。技术上使用Html5的Canvas画布,可以保存签名为图片,或者直接放到数据库里,或者转换为JSON的格式保存在数据库。前端的应用使用jQuery,并做了方便移植和部署的插件。

发几张截图吧,有需要的朋友可以直接联系我,不过不是免费的。因为免费的东西是这个世界上最贵的东西!,暂时定价500元,至少可以节省你几天的时间去研究,省下来时间自己充充电,多陪陪家人,如果你的工作能令老板满意,收获的可远远不止500元。

程序员个人购买源码一口价:500元
公司购买需要发票的话,我得找朋友开服务发票,价格1000元。
支付宝转账,QQ、飞信或手机短信联系,邮箱发送代码。
为啥要付费购买:不用苦逼的去加班了,省下来宝贵的时间健健身、陪陪家人、孩子
QQ:17185490
手机:13818699609
支付宝账号:troy@cuiwenyuan.com

申请人填写界面

审批人处理界面

Loading