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

做IT也得看清趋势

今天去参加了2016上海Tableau的年度峰会,感触颇多。开始之前,先说一点激励的体悟,一个公司有时候因为整体行业形势、个体业绩等原因造成大环境没有升职加薪的机会,这点任何部门、任何人都没有机会的时候,如何留住团队的骨干就涉及到激励。有时候除了加薪、升职之外,还有荣誉奖励、培训、接触行业动态机会等。如果你也做领导,记得尝试一下这些方式,如果你站在普通员工角度考虑,不妨利用好机会,把去抱怨的时间拿出来给自己充电、提升自己的价值,那么终有一天,你的价值会体现出来,不在此处,便在彼处!

我们做IT,很多时候都是比较专注,专注于技术,反而对同行的交流、跨行业的接触以及外面的世界不太关心。所以,对于市场上什么技术已经流行,什么产品是未来的趋势都不太关心。而那些做得好的IT始终保持一种开放的心态,去认识趋势,顺应趋势。大多数时候,我们提到“随波逐流”,都认为是没有主见,但当破浪来临的时候,难道你要逆水行舟?

就像当年各大公司都在上ERP,尽管结果有好有坏,难道你不上?连联想的柳传志有一句名言:“不上ERP等死,上了ERP找死。” 但是联想还是上了ERP,没办法,哪个公司不经历“出生入死”能依然屹立不倒,百年长青?再举个例子,电子商务,你说现在哪个公司敢说拒绝电子商务?

今天Tableau峰会的主题就是报表可视化,这里明确了2个趋势:

1、可视化报表,一图胜千言(无图无真相)

2、面向最终用户,而非面向IT的BI

何以见得:第一上午峰会开幕参会人员809(下午又多了一些),第二参会的人大部分是来自业务部门,第三这家公司的股票(美国纳斯达克DATA)

我也在反思我们公司用得的BI产品是大名鼎鼎的SAP旗下Business Objects,但是用户不喜欢用?就连我都不喜欢用!

微软虽然在线的Office365的在线Excel,也有自己的数据库MSSQL的报表分析工具,但还是要搞一个叫Power BI的可视化报表产品?

这不得不令我们深思,有时候我们的职业生涯是跟随着某个软件产品、某种开发语言、某个行业,入错行的意思是选择了一个错误的趋势,并且在趋势变化时,没有断臂归零求生存。比如说我选择了Infor ERP LN这个产品,前身叫BaaN ERP,有好几位前伟创力的同事都换行去做了SAP或Oracle,他们的路越走越宽,而我一直在围绕这个产品,职场上的选择机会就相对少了很多很多!

不说了,说多了都是泪,女怕嫁错郎,男怕入错行,做IT的错在没有顺应趋势!

既然说无图无真相,就放上来一张图,让你看看哪些大公司都在用Tableau,看你会不会有下一步行动。

我的行动:

1、立马淘宝买了一套学习Tableau视频!

2、分享给好友

3、写下这篇博客

4、明天安装试用版,开始学习使用

5、以后分享使用心得

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

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

免费开源我的第一个原创FlowPortal插件:TaskComment

大概去年的这个时候,我和上家公司的3个同事开始踌躇满志的希望能在工作中利用Flowportal做点东西,同时能在BPM行业积累更多的经验、人脉,成立了八匹马BPM沙龙,但是随着本来谈好的合作厂商的失信,再加上4人中有一人离开上海,这个BPM沙龙就名存实亡了。
不过也就在去年的7月,我在八匹马BPM沙龙论坛发表了[URL=http://www.cuiwenyuan.com/shanghai/post/FlowPortal-Plug-in-TaskComment.html]我的第一个Flowportal插件:TaskComment[/URL],当时卖出了1份,免费送了好友了几份。之后就销声匿迹了,今年Flowportal的官方人员联系我索取源码,美其名曰帮我卖出去一份,就给我一份钱。我当时就抱着肉包子砸狗的态度,发了一份源码给他们。果不其然,至今几个月过去了,他们没有任何人联系过我。

于是,今天,趁着心情好,我决定在这里免费开源这个插件的源代码,就算你现在没这个需求,保留一份参考一下自己的2次开发也不错,另外也免得被官方再收费。

索取的办法就是在本文留言,并留下您的邮箱。

再次附上插件的介绍

<br/>原创FlowPortal插件:TaskComment,给你的应用增加万能评论功能<br/><br/>插件名称:TaskComment插件版本:V4.5 (没从1开始,为了是紧跟官方版本,不混淆)<br/>使用范围:FlowPortal 4.5及以上版本<br/><br/>实现的功能<br/><br/>1、任意流程、任意步骤、所有人(有权限查看表单的人)、皆可评论<br/>2、给自己开发的基础数据管理的模块也增加评论功能,相当于增加一个记录操作的备注功能<br/><br/>背景:初衷是要在一个任务管理的流程,在这个流程里面任务负责人、参与者、发起人等随时都可以针对当前任务进行评论,发表建议和意见。<br/>后来,越来越多的流程中也需要增加这么一个评论功能。<br/>再后来,自己基于FlowPortal开发的基础数据维护的模块,也需要针对某条记录增加评论和备注的功能。<br/>于是,这个插件诞生了。<br/><br/>插件使用截图<br/><br/><br/><br/><br/><br/>使用方法<br/><br/>1、在数据库中创建一个数据表TaskComment<br/>2、复制源代码到FlowPortal安装目录<br/>3、只需要添加2行javascript代码到您的表单即可拥有强大的自由评论功能!<br/><br/>代码购买及技术支持<br/><br/>个人购买(无发票):人民币100元起/份,您可以任意选择支付100+n元公司购买(有发票):人民币1000元/服务器<br/>支付宝账号:troy@cuiwenyuan.com<br/>QQ: 17185490<br/>技术支持:QQ在线技术解答,TeamViewer远程辅导安装<br/><br/>授权方式<br/><br/>1、开放源代码,可基于源代码进行修改并发布自己的应用。<br/>2、可用于任何自己的客户、公司的应用<br/><br/>安装文件目录截图<br/><br/><br/>

Loading