本着“软件以应用为本”(潘加宇老师对个人影响在这一点上很深。)的原则,我为ERP搭建了一个用NETBPM做的支持网站,想着可以看着软件得以应用,自是很是高兴。 不过,这个工做流的缺点也是显然的,如何在流程中让上一操做者指定下一个操做者就是一个难点,由于根据预先的组织关系进行的分派颇有可能出现流程没法进行下去的危险,这样就会限制软件的应用。想着netbpm脱胎于jbpm,我就想找找答案。固然有不少此类文章,不过,仍是没有找到好使的。 因而,只好本身思考了。我以为有三个解决办法:一是在流程中让用户指定一个actor,不过要增长一些处理的类;二是利用action来进行处理;三是采用decision的方式来判断。 对于第二种思路,我检查代码,发现行不通。缘由是我想在事件before-activitystate-assignment触发对actor赋值,可是这二者是分开发生的,没法先行赋值给一个actor,形成了actor的Null值错误。开始还想直接经过数据库进行赋值,经过查询attribute的位置,将值赋好,不过这是绝对违背软件的原则的,并且也行不通。 第三种方法还来不及细想,只好回到第一种方法上来。我想的是直接让用户选择下一个actor。开始想在序列化的时候保存actor.id便可,谁知道老是报错,序列化行不通。只好改在htmlformatter上想办法,居然成功!很是简单,又容易理解,嘿嘿,看来走了很多弯路。 代码以下: public String ObjectToHtml(Object valueObject, String parameterName, System.Web.HttpRequest request) { System.String temp = ""; IList users=OrganisationUtil.Instance.FindAllUsers(); System.String text = "<select name=\"" + parameterName + "\" >"; foreach(IUser user in users) { temp=""; temp="<option value=\""+user.Id+"\">"+user.FirstName+user.LastName+"</option> "; text+=temp; } text+="</select>"; return text; } public Object ParseHttpParameter(String text, System.Web.HttpRequest request) { IUser user=OrganisationUtil.Instance.GetUser(text); return user; } 固然,如何取得全部的用户,须要增长一个方法便可。 解决此问题,耗时6个小时,以为又增长了一些功力通常。挺高兴的。 注意:发现一个group下一个用户只能有一个role,否则没法查找group. 感谢网上许多的文章,让netbpm变得有点用了。