程式
這裡將建立兩個網頁分別給員工和主管使用,另外有兩個servlet及一個類別作為趨動流程。
Leave.java
package tw.idv.idealist;
import com.opensymphony.workflow.InvalidActionException;
import com.opensymphony.workflow.InvalidEntryStateException;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.InvalidRoleException;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.WorkflowException;
import com.opensymphony.workflow.basic.BasicWorkflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
import com.opensymphony.workflow.spi.Step;
/**
* 請假流程
* @author steven
*/
public class Leave {
/**
* 送出假單
*/
public long send(String employee) {
Workflow workflow = new BasicWorkflow(employee);
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = -1;
try {
//leave是workflowx.xml中定的名稱
workflowId = workflow.initialize("leave", 0, null);
workflow.doAction(workflowId, 1, null);
} catch (InvalidActionException e) {
e.printStackTrace();
} catch (InvalidRoleException e) {
e.printStackTrace();
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (InvalidEntryStateException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
return workflowId;
}
/**
* 准假假單
* @param workflowId 工作流編號
* @param actionId 動作編號, 2 准許, 3 駁回
*/
public void allow(long workflowId, int actionId) {
Workflow workflow = new BasicWorkflow("manager1");
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
workflow.doAction(workflowId, actionId, null);
} catch (InvalidInputException e) {
e.printStackTrace();
} catch (WorkflowException e) {
e.printStackTrace();
}
catch (InvalidActionException e) {
e.printStackTrace();
}
}
}
LeaveAction.java (servlet)
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class LeaveAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Leave leave = new Leave();
String employee = req.getParameter("employee");
long workflowId = leave.send(employee);
resp.sendRedirect("allow.jsp?workflowId=" + workflowId);
}
}
AllowAction.java (servlet)
package tw.idv.idealist.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import tw.idv.idealist.Leave;
/**
* @author Steven
*/
public class AllowAction extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String workflowId = req.getParameter("workflowId");
String actionId = req.getParameter("actionId");
Leave leave = new Leave();
leave.allow(Long.parseLong(workflowId), Integer.parseInt(actionId));
}
}
leave.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ page language="java" contentType="text/html; charset=BIG5"
pageEncoding="BIG5" %>
<%@ page import="tw.idv.idealist.*" %>
<META http-equiv="Content-Type" content="text/html; charset=BIG5">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>填寫假單</TITLE>
</HEAD>
<BODY>
<P>員工請假</P>
<form action="LeaveAction">
員工代號: <input type="text" name="employee">
<input type="submit" value="送出">
</form>
</BODY>
</HTML>
allow.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ page language="java" contentType="text/html; charset=BIG5"
pageEncoding="BIG5" %>
<META http-equiv="Content-Type" content="text/html; charset=BIG5">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>批准假單</TITLE>
<Script Language="JavaScript">
function DoAction(actionId) {
document.myForm.actionId.value = actionId;
document.myForm.submit();
}
</Script>
</HEAD>
<BODY>
<%
String workflowId = request.getParameter("workflowId");
%>
<P>主管批假單</P>
<form action="AllowAction" name="myForm">
<input type="hidden" name="actionId" value="">
工作流編號: <input type="text" name="workflowId" value=<%= workflowId %>>
<input type="button" value="准許" OnClick="DoAction(2)">
<input type="button" value="駁回" OnClick="DoAction(3)">
</form>
</BODY>
</HTML>