可以这么说史帝芬的http://my.so-net.net.tw/idealist/OSWorkflow/osworkflow资料是目前华文osworkflow资料中最好的一份入门教程。去面的时候在mssql中中实践过这份入门资料,感觉非常顺利。但感觉按作者的顺序把教程中的例子跑完了,还不完全清楚的明白osworkflow的架构。前些在mysql5.0中重做一次,遇到了挺多问题,我通过一步一步的跟踪原代码调试终于把这些问题搞定。下图是把osworkflow所提供的mysql下的数据表的ER图:
如果你的osworkflow持久化到mysql中你的osworkflow.xml文件内如必需按如下格式来写:
propertyset.xml文件格式如下:
class="com.opensymphony.module.propertyset.database.JDBCPropertySet">
workflows.xml文件格式如下:
osuser.xml文件格式如下:
os_user
os_group
os_membership
username
passwordhash
groupname
username
groupname
java:comp/env/jdbc/DefaultDS
os_user
os_group
os_membership
username
passwordhash
groupname
username
groupname
java:comp/env/jdbc/DefaultDS
os_user
os_group
os_membership
username
passwordhash
groupname
username
groupname
java:comp/env/jdbc/DefaultDS
请假列子的配置如下:
package com.pdw.wfbo;
import java.util.HashMap;
import java.util.Map;
import com.opensymphony.workflow.*;
import com.opensymphony.workflow.basic.BasicWorkflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
public class LeaveWFBO {
/**
* 送出假单
* @param employee
* @return
*/
public long send(String employee) {
Workflow workflow=new BasicWorkflow("peidw");
DefaultConfiguration config=new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId=-1;
try {
workflowId=workflow.initialize("leave",0,null);//leave是workflows.xml里配置的工作流名称
workflow.doAction(workflowId,1,null);
}catch(Exception e) {
e.printStackTrace();
}
return workflowId;
}
/**
* 批假
* @param workflowId 工作流编号
* @param actionId 工作编号,2 准许,3 驳回
*/
public void allow(long workflowId,int actionId) {
Workflow workflow=new BasicWorkflow("peidw");
DefaultConfiguration config=new DefaultConfiguration();
workflow.setConfiguration(config);
try {
System.out.println("actionId->"+actionId);
System.out.println("workflowId->"+workflowId);
workflow.doAction(workflowId,actionId,null);
}catch(Exception e) {
e.printStackTrace();
}
}
}
这是上面的这个例子的一个说明
看完第一支程式,相信讀者會有許多疑問,這些先就流程的設定做初步的介紹。首先,讀者應該注意到了,第一支程式的用到三個xml設定檔,沒錯,這三個是設定流程的設定檔。
osworkflow.xml:這個檔案是設定流程是否存在資料庫或存在記憶體,前面的內容是存在MS SQL Server的寫法。
leave.xml:請假流程寫在這個檔案,這也是osworkflow的重點之一。
workflows.xml:指定系統啟動時要載入那些流程。
這裡針對leave.xml做些說明…
initial-actions:每個流程都至少需定義一個initial-actions,這是流程的起點。
action:導致流程變動的動作,每個action都有個編號,且不能重複。
step:雖然它的名稱是步驟,似乎它會有動作? 其實將它視為流程位置可能比較恰當,osworkflow真正的動作在action發生。
result:執行動作後的結果,result有兩種conditional-result和unconditional-result,每個result一定有unconditional-result,當conditional-result的條件都不滿足時,就執行unconditional-result。
status:流程在某個action時的狀態。
old-status:流程執行某個action後的狀態。
caller:這是OSWorkflow的保留字,可取得呼叫此工作流的user,即Workflow workflow = new BasicWorkflow(caller); 在資料庫中會記錄於Table OS_HISTORYSTEP如下:
記得在pre-functions加上如下設定…
com.opensymphony.workflow.util.Caller
posted on 2006-04-18 15:43 有猫相伴的日子 阅读(6024) 评论(4) 编辑 收藏 所属分类: workflow