文章轉自:http://iting365.blog.hexun.com/30855230_d.html
1、osworkflow.xml檔案裡面的配置基本不動,你需要按照osworkflow的要求建造資料庫表。
2、當你要用osworkflow的函數時,你的先調用這個類
如:你用它的內建函數call
你的先定義
<action id="1" name="Start First Draft">
<pre-functions>
<function type="class">
<arg name="class.name">
com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished"status="Underway"
step="1" owner="${caller}"/>
</results>
</action>
3、OSUserGroupCondition - 使用OSUser來判斷調用者是否在參數"group"中,有個OSUser.xml檔案。
StatusCondition - 判斷當前步驟的狀態是否與參數"status"相同。
AllowOwnerOnlyCondition - 如果調用者是指定的步驟的所有者的話,那麼只返回true,如果沒有指明步驟的話,就返回當前步驟。
DenyOwnerCondition - 與AllowOwnerOnlyCondition功能相反
4、 Caller用當前動作的執行者名字設定持久化變數caller。
MostRecentOwner用最近指定的步驟的所有者的名字來設定持久化變數mostRecentOwner。可選特 性可以在有所有者時將變數設定為nothing,或者返回一個內部錯誤。
5、------------------------------osworkflow 異常大全 --------------------------------
1-----org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
xml設定檔頭錯誤 如:docpath寫錯了什麼的
一般就用tomact配置頁面配置出來的資料
2-----javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
首先 應配置同樣工程名稱的.xml檔案 放在tomact的Tomcat 5.0\conf\Catalina\localhost目錄
裡面配置的為資料庫連接池
其次 在osworkflow中用到資料連線池的應在前加java:comp/env/XXXXXXX
再次 應在web.xml中配置
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/leave</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
前提是你應在tomact配置了串連池
3--------提示初始化的action的ID value為‘ ’應查看你的流程xml檔案裡面 action是否重複 action的名字在整個xml檔案都是唯一的
4--------提示找不到設定檔 你應注意把所有的設定檔放在src的根目錄
5--------tomact提示找不到驅動程式 把驅動程式classes12.jar放到Tomcat 5.0\common\lib下
6---------報orcale資料庫增長因子的錯SEQUENCE ;應注意資料庫SEQUENCE 的建立
正確的為 應注意SQL語句順序
create sequence my_seq ---建立序列名
start with 1 ---從1開始
increment by 1 ---每次增長1
maxvalue 999999999 ---最大值
minvalue 1 ---最小值
cycle ---迴圈
cache ---緩衝
order
7--------You are restricted from initializing this workflow 異常
應注意你的workflow配置裡限制了你不能初始化flow,看看<initial-actions>的<restrict-to>段落
8------------Unable to create current step for workflow instance #14: root cause: ORA-02289: ????????
osworkflow的內建錯誤 指orcale裡面的 step 的ID自增因子不存在。
9、java.sql.SQLException: ORA-02291: ???????? (LEAVE.SYS_C001393) - ????????
Cause: A foreign key value has no matching primary key value.(原因:外索引值沒有匹配的主索引值與它匹配)
Action: Delete the foreign key or add a matching primary key.(解決:刪除外部索引鍵關聯或者添加一個和外鍵匹配的主索引值)
解決方案:通過找程式找出這個主外鍵資料不一致衝突的地方 修改資料庫資料
10、ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
(1).可能是系統資源不足或oracle正在作一些非常占系統處資源的處理(建議從新啟動資料庫)
(2).該登入的使用者沒有分配刪除表的許可權。
(3)表被鎖住了,殺掉鎖表的進程,最好是等一會兒再做,
(4)是不是你在別的程式中正在使用這個表!
-------------------------------------------------------------------------------------------
6、在流程設定檔的同一個action中 指令碼方法不可以重複定義
7、在初試化workflow時initialize()方法 和調用工作流程doaction()都要
Workflow work = new BasicWorkflow(username);//設定上下文context 將caller值傳入
應注意username的傳入 否則會引發異常
8、
<condition type="class">
<arg name="class.name">
com.opensymphony.workflow.util.AllowOwnerOnlyCondition
</arg>
</condition>
含義為:如果調用者是指定的步驟的所有者的話,那麼只返回true,如果沒有指明步驟的話,就返回當前步驟。
不應該用在設定檔的<initial-actions>XXX</initial-actions>中
9、問題:從設定檔獲得參數可以 讀Map args中的資料 但如何動態給設定檔裡面的參數賦值??
10、一旦輸入控制項被disable掉 那麼就無法用request.getparamenter(“XXX”)獲得它的value
11、核心方法propertySet的值一般在每個方法函授的excute方法裡面設定;它可以在任意地方取出來
propertySet一般不能設定object對象,會要求你序列化 所以當你要傳對象時最好使用transientVars
當你想初始化時傳入值 那麼你就在doaction方法中放入map,然後你可以在execute方法中將map transientVars的值set到ps中。
12、方法 execute(Map transientVars, Map args, PropertySet ps) 裡面的transientVars值是在執行工作流程 wf.doAction(id, action, map);的map值 你可以建立一個map,
13、工作流程不能執行完了 方法step=-1時 又返回來執行其他的步驟;-1就是這個工作流程已經完了
14、工作流程的wf.doAction方法只能建立一次 你不能這個方法建立了 另一個方法又建立他
你一般沒辦法在別的地方重新獲得動作列表然後又執行他 否則他可能會重複出現相同action