NetBpm Q&A(7)

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   檔案   io   

原文:NetBPM工作流程的一個樣本:請假審批



前言 在NetBPM的實踐與應用中,大家一定會遇到各種各樣的問題,筆者特建此帖, 聚集了一些典型問題,並作了初步解答。本帖將不斷更新,大家有什麼問題,可以在目錄中尋找,若沒有類似問題答案,歡迎留言討論,對某些問題有好的解決方案等也可以留言,我將更新到目錄中;-) 原文地址:http://www.cnblogs.com/LuBen/archive/2007/08/12/852382.html,轉載就保留。如何打包par包 流程定義組件介面能夠識別的包是zip壓縮包,rar壓縮包不能識別。 .par只是讓流程定義壓縮包區分其他壓縮包的尾碼,其實是不是.par不重要,重要的是zip壓縮格式,並且包內檔案結構符合nPdl要求。 所以要打包.par包,用普通壓縮軟體winrar進行zip壓縮即可;-)流程定義不支援中文? 作為中國使用者,在流程定義檔案中使用中文是難以避免的,比如把流程的 名稱取為"請假流程"而不是"holiday"。大家一定想到了XML編碼,沒錯,把processdefinition.xml和webinterface.xml儲存 為unicode編碼就可以了(註:光在檔案中這樣寫<?xml version="1.0" encoding="unicode" ?>是不行的,因為XML檔案本身的編碼格式也需要為unicode;-))。我們可以使用記事本開啟XML檔案,然後把編碼改為unicode,然後儲存即可: 流程圖片大小不能超過8k? 如果您使用的SQL Server2000資料庫(其他資料庫沒有驗證;-)),那麼就會遇到一個問題: 流程圖片大小不能超過8000位元組,在web顯示上也只能顯示8000位元組的圖片;-) 為什麼呢?實際上,如果圖片超過8000位元組,在流程定義包解析儲存時, 資料庫中也只儲存了8000位元組,多餘的位元組被忽略掉了,這是由於Nhibernate設定檔映射引起的。 解決的辦法如下:修改Nhibernate對應檔ProcessBlockImpl.hbm.xml檔案: 1 <property2 name="Image"3 type="binary"4 update="true"5 insert="true"6 column="image"7 />為:1 <property2 name="Image"3 type="BinaryBlob"4 update="true"5 insert="true"6 column="image"7 />動態委託類不能用嗎? 動態委託類不能用,也是如上小節中流程圖片大小一樣原因 引起的,在庫中只載入了8000位元組的程式集,導致動態載入委託類不可用。解決辦法如下:修改NHibernate對應檔AssemblyFileImpl.hbm.xml:1 <property2 name="Bytes"3 type="binary"4 update="true"5 insert="true"6 column="bytes"7 />為:1 <property2 name="Bytes"3 type="BinaryBlob"4 update="true"5 insert="true"6 column="bytes"7 />關於流程圖形化設計的支援 NetBPM支援圖形化設計,源碼在CVS GPD模組中。流程設計器由JAVA寫成,若您對JAVA比較熟悉,可以對它進行擴充;-) 注意:GPD源碼,NetBPM作者不進行維護支援工作。action的參數不能超過3個 經過測試,流程定義時,action參數定義數目不能超過3個,如果超過3個,則在載入流程壓縮包時將出錯。如: 1 <action event="process-instance-end" 2 handler="NetBpm.Workflow.Delegation.Impl.Action.EmailAction, NetBpm" on-exception="log"> 3 <!-- 4 <parameter name="four">previousActor</parameter> 5 --> 6 <parameter name="one">previousActor</parameter> 7 <parameter name="two">您提交了請假申請</parameter> 8 <parameter name="three">you requested a holiday from ${start date} to ${end date} with comment ${comment}</parameter> 9 </action>10 去掉注釋,則action參數達到4個,此時載入報錯。 此BUG還沒有修複,暫時的解決方案為:用類似${start date}的文法定義要用到的屬性,然後定義解析該文法的工具類,以替代達到目的。 修改by LuBen 20070821: 並不是action的參數個數問題;-) 載入出現如下錯誤NetBpm.Util.DB.DbException : NHibernate.ADOException while performing database operation ‘iterate(select max( pd.Version ) from pd in class NetBpm.Workflow.Definition.Impl.ProcessDefinitionImpl where pd.Name = ? ,請假流程Holiday,type)‘ : could not insert: [NetBpm.Workflow.Delegation.Impl.DelegationImpl#246]couldn‘t continue to parse the process archive 是因為載入的值比資料庫欄位設計的值要小, 在NBPM_DELEGATION表中cofiguration欄位設計為255, 而加上第四個參數後, 載入的值已經超過了255,而在源碼中並沒有捕獲ArgumentOutOfRangeException, 所以會報這個看似不相干的錯誤. 其他類似超過資料庫欄位設計都會報這個錯誤, 知道原因了, 修改即可.關於processinstance的endtime為空白值 流程結束時源碼中存在一個小BUG,流程結束後processinstance的endtime一直為空白值,不會在流程結束時賦值。 解決方案為,在NetBpm.Workflow.Execution.Impl命名空間下,修改ExecutionEngineImpl類中ProcessEndState方法部分如下: .........1 FlowImpl rootFlow = (FlowImpl) executionContext.GetFlow();2 rootFlow.ActorId = null;3 rootFlow.End = DateTime.Now; // 添加紅色該句4 ((ProcessInstanceImpl)executionContext.GetProcessInstance()).End = DateTime.Now;5 rootFlow.Node = endState; // setting the node is not necessary if this method is called6 // from processTransition, but it is necessary if this method is7 // called from cancelProcessInstance in the component-impl...............關於子流程向父流程傳送屬性 在IProcessInvocationHandler介面定義了CollectResults(IProcessInvocationContext processInvocationContext)方法, 此方法用來在子流程結束時,收集子流程要向父流程傳遞的屬性值,但是引擎對收集後的屬性儲存實現不完全,需要作出修改。更新.....

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.