免费开源我的第一个原创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

我的第一个原创FlowPortal插件:TaskComment,给你的应用增加万能评论功能

上个月我写的第一个FlowPortal插件发布到现在,经过付费用户的使用反馈和建议,目前版本已经非常稳定,代码也比最初发行时做了优化。

这个插件也是一个尝试,看看FlowPortal这个产品的用户群的活跃程度,看看这个产品的生态系统的情况。目前的思路是可以自己寻找其用户群,并销售给需要的用户。另一个方案就是借助官方的力量,通过官方授权认证,并通过官方渠道销售。我相信这么做的话,肯定会有更多人来写FlowPortal插件、应用,同时也会有越来越多的用户购买现成的插件、应用,直接应用到自己的公司或者参考学习。这样子整个FlowPortal的产品会形成一个很好地开发者体系,从而是这个产品更加完善,更加有知名度。

从目前的反馈来看,技术人员很多都过于自信和封闭,认为别人能做到的,自己也能做到,很少有人考虑其付钱给其它技术人员,节省其时间和精力,可以集中精力做更多的业绩,这样不仅是对其它技术人员的尊重,也是对自己的尊重,对技术的尊重。

啰嗦了半天,权当自己意淫了,最后附上插件的发布地址:[URL=http://bbs.bpmsalon.com/thread-163-1-1.html]http://bbs.bpmsalon.com/thread-163-1-1.html[/URL],大家有啥意见和建议都可以到[URL=http://bbs.bpmsalon.com]八匹马BPM沙龙论坛[/URL]跟帖留言,最重要的是用购买来支持我,哈哈。

Loading

成功BPM项目的5个必要步骤

决定一个BPM项目是否能成功的因素有很多,我这里讨论的是对任何业务流程都适用的步骤,而不仅仅是技术的实现步骤等。我个人认为当你对某一个流程不满意的时候,你需要改进或改善它的时候,你需要从以下5个方面考虑和行动:

1、文档化当前的流程(整体图)。从而对比实际的操作,来文档化流程的细节,以及确认是否实际流程即是如此。

2、分析当前流程所出现的问题。如跑完一个流程的时间太长,找出原因和关键步骤。如整体成本太高,多问几个为什么?

3、假设一切都是完美的,画出你期望的流程。如果因为现实问题,不得不做出妥协,你的流程又应该是什么样子的?

4、了解流程中的真正用户的意见,汇总并补充完善出一个当前最好的流程,经过沟通后,最终的流程能另所有人接受的。

5、量化当前的流程。比方说可以用时间、效率等来量化,从而能够很好的对比新旧流程的改善,证明给用户及管理层。

以上文字是我近几年来对BPM项目的个人见解,用上去的话对BPM项目的胜算就会大些,也欢迎大家补充。

Loading

Flowportal.Net BPM最新4.5u版新亮点补充及登录界面世界地图背景分享

首先多谢过路人在前篇文章《[URL=http://www.cuiwenyuan.com/shanghai/post/Flowportal.Net-BPM-V4.5u-New-Features.html]Flowportal.Net BPM最新4.5u版新亮点[/URL]》的一个补充:前端提供了一个web应用开发框架,能够构建以流程为驱动的应用,将BPM的应用带到一个新的高度。这个功能的确是解决了一些基础数据,还有不完全依赖流程而进行的数据维护工作,常见的增加、删除、编辑、查询功能都能很方便的实现,并能在界面和功能上跟相关流程再结合起来。

昨天新版的BPM已经在上海的工厂正式上线了,而下一个任务是升级另一台总部的服务器,今天这篇文章给大家带来一个新版BPM的登录页面的背景图片,如果您所在的公司是一家全球性的公司,而这个BPM应用是一个全球应用,用BPM自带的中国地图背景就未免有点不适,喜欢偷懒的朋友,不妨拿去直接用。

另外,再次感谢一下BPM总部的技术高手马丁,周六的中午有幸见面给我和朋友深入介绍了一下BPM这个产品,也希望以后的日子,马丁能多举办一些周末的小规模技术交流聚会活动,让所有BPM的用户能相互分享、学习和进步。

Loading

Flowportal.Net BPM最新4.5u版新亮点

上周五请Flowportal公司的资深顾问给培训了一下新版的新功能及升级的细节,这两天体验了一下新版的功能,特别在此说一下我个人认为的几个亮点:

亮点1、用户前端界面使用Extjs框架,显得更加专业。人靠衣服马靠鞍,这个软件好不好,很大程度上是来自于广大最终用户的评价,而不仅是IT部门。

亮点2、取消了客户端的ActiveX控件,减少了部署成本。同样地,由于ActiveX只有IE支持,现在取消了,也就带出来第三个亮点。

亮点3、更多主流浏览器支持,以前只有IE,现在Google的Chrome,火狐的Firefox,苹果的Safari等都支持了。

等升级完毕,在实际使用一段时间后,相信还会有新的体会,再来分享给大家。

Loading

在Flowportal.Net 3.5t BPM中批量设定输入框、下拉选项的字体颜色

想了半天也想不好该给这篇文章起个什么标题,其实这篇文章的核心是说当DropDownList使用了disabled属性后,字体变为灰色,怎么办都没法修改字体颜色,除非不用DropDownList或者不要Disabled。研究这个问题的缘由是美国的一个BPM关键用户提出来当访问forms/read.aspx?tid=xxx的页面时,很多输入框和选择项都是灰色的,她说很难看清,要求字体颜色深一点。对于input和textarea,在BPM里有一个DisableBehavior属性如下图,默认是Disable,修改为Readonly就能解决。而对于DropDownList和CheckBox等Select类的选项,就没有办法解决了。

既然如此,那就按照我的思路,只要访问的页面地址包括read.aspx,那就把所有select的控件的disabled属性去掉。首先想起来的就是用Jquery,把核心代码写到 $(document).ready(function(){}中,可悲的是,调整input控件的代码执行了,但是去掉select控件属性的代码怎么都不执行。

<br/>$(document).ready(function(){<br/><br/>var pathname = window.location.pathname;<br/>if (pathname.toLowerCase().indexOf("read.aspx") >= 0 ) {<br/>$("select").removeAttr("disabled");<br/>$("select").removeAttr("readonly");<br/>$("input").removeAttr("disabled");<br/>// method 1<br/>//$("input").attr("DisableBehavior","ReadOnly");<br/>// method 2<br/>$("input").css({color:"#000"});<br/>$("textarea").css({color:"#000"});<br/>}<br/><br/>});<br/>

经过询问官方的技术大牛马丁,他说BPM本身的js是在document的Ready状态执行,可能跟Jquery的document的Ready会有先后执行的顺序问题。给出建议使用Button来调试那段去掉select控件属性的代码,如果成功的话,就放到body.onload中调用。

于是拖了一个xButton控件到页面任意地方,然后用如下代码调试,一切顺利。

<br/>$("#xbtnDarken").click(function(){<br/><br/>$("select").removeAttr("disabled");<br/>$("select").removeAttr("readonly");<br/><br/>});<br/>

于是按照马丁所给思路,我把代码写到window.onload中,如下代码,解决问题。

<br/>//window.onload = function(){<br/>// 可以使用这种方法,建议用下面的方法,当然了,还可以使用body.onload的原生和Jquery两种调用<br/>//};<br/>$(window).load(function (){<br/><br/>var pathname = window.location.pathname;<br/>if (pathname.toLowerCase().indexOf("read.aspx") >= 0 ) {<br/>$("select").removeAttr("disabled");<br/>$("select").removeAttr("readonly");<br/>$("input").removeAttr("disabled");<br/>// method 1<br/>//$("input").attr("DisableBehavior","ReadOnly");<br/>// method 2<br/>$("input").css({color:"#000"});<br/>$("textarea").css({color:"#000"});<br/>}<br/><br/>});<br/>

虽然问题解决了,但是由此引发的思考很多,为了保险起见,我同时保留了Ready的函数。详细原因强烈建议阅读以下几篇文章:

1、[URL=http://www.cnblogs.com/mackxu/archive/2012/12/02/2798207.html]jQuery.ready和onload区别[/URL]
2、[URL=http://www.songlecn.com/2009/03/423/]window.onload 和 ‘jquery.onload’的执行顺序问题[/URL]
3、[URL=http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&site=&source=hp&q=HTML+SELECT+Disable+Font+Color&btnK=Google+%E6%90%9C%E7%B4%A2]HTML SELECT Disable Font Color[/URL]

Loading

在Flowportal.Net 3.5t BPM中设置邮件内直接审批

今天再次碰到用户需要在邮件中直接确认Flowportal.Net BPM中的流程申请,很早以前弄过,居然花了好长时间才找到改怎么用。这里记录下来,以备以后不时之需。

应用场景:

1、适用于:直接发送申请内容到邮件中,看到邮件之后不用打开单独网页查看申请表单,直接通过邮件里面的审批或其它链接处理当前步骤。
2、不适用于:当前处理人需要填写或者修改申请表单的内容,这时候必须引导当前处理人打开申请表单来处理。

开启直接审批的步骤:

1、在BPM主数据库中找到BPMSysSettings表,添加一行数据:
ItemName=ClickToProcessHTTP
ItemValue=http://(本机的Ip地址和端口号/或者域名和端口号)/BPM/XMLService/ClickToProcess.aspx
2、使用流程编辑器,打开流程中相应的步骤,找到“通知(英文版为Notify)”项,在可定制的邮件内容中加入相应的表单信息,然后在合适的位置添加一行代码:<%=Context.Current.CreateProcessLinks()%>

Loading

Flowportal.Net 3.5t BPM系统报表导出限制的解决办法

今天用户说要导出Flowportal.Net 3.5t BPM系统中的某个流程的记录做分析,但是不管怎么选择,最多只能导出1000行数据。我记得好像原来询问过供应商这个问题,倒是我忘记修改了。

解决方法如下:

1、找到安装目录下Website\Reports的DefaultView.aspx文件
2、查找1000,找到第50行(代码如下),修改这行的相关1000字样为你想要设定的值,我设定了10000
备注:如果你想增加那个最大行数的限制,只需修改MaximumValue为较大的值,如99999999

<br/><td style="text-align:right;"><asp:Label ID="_labExpStartRow" runat="server" Text="开始行"></asp:Label><asp:TextBox ID="_edtExpStartRow" CssClass="SchBox" runat="server" Width="30px">1</asp:TextBox><asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="*" ControlToValidate="_edtExpStartRow" Display="Dynamic" MaximumValue="99999999" MinimumValue="1" Type="Integer" ValidationGroup="Export"></asp:RangeValidator><asp:Label ID="_labExpRows" runat="server" Text="行数"></asp:Label><asp:TextBox ID="_edtExpRows" CssClass="SchBox" runat="server" Width="30px">1000</asp:TextBox><asp:RangeValidator ID="RangeValidator2" runat="server" ErrorMessage="1~1000" ControlToValidate="_edtExpRows" Display="Dynamic" MaximumValue="1000" MinimumValue="1" Type="Integer" ValidationGroup="Export"></asp:RangeValidator><asp:Button ID="_Export"  CssClass="SchBtn" runat="server" OnClick="_Export_Click" Text="Export" ValidationGroup="Export" /></td><br/>

Loading

Flowportal.Net BPM中2个有用的函数:setvaluefunc和getvaluefunc

特别感谢Flowportal.Net公司及时快速的技术支持,在Flowportal.Net公司的马丁帮助下,终于搞定了一个在多行表单中动态显示图片的开发,在此整理下来分享给遇到此问题的朋友们。

先上一张图告诉大家要做的是什么事情。

通过上图大家应该能看出来,在这个例子中,用户可以添加多个要申请的文具,每个文具一行。在这里用户希望能够在选择文具后能把相应的图片显示在同一行。经过查看Flowportal.Net的XForm控件,并没有img类型的控件,我们可以拖入一个静态的img或者Asp.Net控件到Form上,转到源码编辑模式,手动对控件添加xdatabind、setvaluefunc、getvaluefunc的属性,同时要写出2个自定义的javascript函数。

还是说重点吧:第一xdatabind绑定到数据库的repeat line table;第二setvaluefunc是XForm控件在绑定的时候必须调用的函数,我们这里的用法是重载它;第三getvaluefunc是在赋值绑定以后在提交保存的时候获取正确的值并存到数据库,我第一次的时候没用这个函数,所有的值存到数据库都是null,造成第2个步骤的人打开表单后看不到图片。

<br/><img src="http://bpm.waiglobal.com.cn/WAI/Stationery/white.jpg" width="90" height="90" xdatabind="WAIWorkflow:FormOfficeSuppliesLine.ItemCode" setvaluefunc="MyFunc" getvaluefunc="MyFunc1" /><br/>

<br/><script type="text/javascript"><br/><br/>function MyFunc(el,value)<br/>{<br/><br/>var a = 'http://bpm.waiglobal.com.cn/WAI/Stationery/white.jpg';<br/>if (value != '')<br/>{<br/>a = 'http://bpm.waiglobal.com.cn/WAI/Stationery/'+value+'.jpg';<br/>}<br/>//alert(a);<br/><br/>el.setAttribute("src",a);<br/>el.setAttribute("itemcode",value);<br/><br/>}<br/><br/>function MyFunc1(el)<br/>{<br/>return el.getAttribute("itemcode");<br/>}<br/><br/></script><br/>

Loading

Flowportal.Net BPM中如何重发邮件

用户说没收到审批通过的邮件,经过查实那天的邮件发送因为SMTP的问题都发送失败了,经过咨询Flowportal.Net BPM的技术人员,原来每条邮件提醒都存储在数据库中,并且分处存放,所以通过直接操作数据库就很容易地实现了邮件的重新发送。

涉及到的表:
BPMSysMessagesQueue 邮件发送队列
BPMSysMessagesFailed 邮件发送失败记录
BPMSysMessagesSucceed 邮件发送成功记录

用到的SQL语句

<br/>INSERT INTO BPMSysMessagesQueue (ProviderName,Address,Title,Message,CreateAt,FailCount)<br/>SELECT ProviderName,Address,Title,Message,CreateAt,0 FROM BPMSysMessagesFailed WHERE CreateAt >='2012-07-25'<br/>

Loading