本着「軟件以應用爲本」(潘加宇老師對個人影響在這一點上很深。)的原則,我爲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變得有點用了。