我们通过JDOM,配合界面的设计获取数据,构造了一个Flow.xml文件(参考表格1)
Flow.xml文件在XMLSPY打开之后的样子
<?xml version="1.0" encoding="UTF-8"?>
<Flows>
<Flow flowid="1" name="发文">
<setp stepid="1" name="拟稿">
<forword>0</forword>
<nextstep>2</nextstep>
<display_page>Ng.jsp</display_page>
<Action_page>SaveNg.jsp</Action_page>
<Step_Note>拟稿是发文的第一步骤</Step_Note>
</setp>
<setp stepid="2" name="审核">
<forword>1</forword>
<nextstep>3</nextstep>
<display_page>Sh.jsp</display_page>
<Action_page>SaveSh.jsp</Action_page>
<Step_Note>审核是部门领导对即将发出的文件的第一关审核</Step_Note>
</setp>
</Flow>
<Flow flowid="2" name="收文">
<setp stepid="1" name="登记">
<forword>0</forword>
<nextstep>2</nextstep>
<display_page>Dj.jsp</display_page>
<Action_page>SaveDj.jsp</Action_page>
<Step_Note>收到文件之后的第一步文登记</Step_Note>
</setp>
<setp stepid="2" name="部门领导批示">
<forword>1</forword>
<nextstep>3</nextstep>
<display_page>DPs.jsp</display_page>
<Action_page>SaveDPs.jsp</Action_page>
<Step_Note>文件经过部门领导的批示才能走下一步骤</Step_Note>
</setp>
<setp stepid="3" name="传阅">
<forword>2</forword>
<nextstep>4</nextstep>
<display_page>Cy.jsp</display_page>
<Action_page>SaveCy.jsp</Action_page>
<Step_Note>文件是需要所有的人都看见,所以需要传阅</Step_Note>
</setp>
</Flow>
</Flows>
(参考表格1)
Flow文件中有两个流程,一个是收文,一个是发文,他们有各自的属性和步骤,这是保存起来的流程的所有数据了,所以以后的操作就是对这了文件进行必要的操作即可。我们给出一个例子,说明如何列出所有流程和所有的步骤。(参考表2)
FlowEngine.java处理Flow.XML文件的经过。
package com.test.flow;
//JDOM需要的包的引入
import org.jdom.*;
//import org.jdom.output.*;
import org.jdom.input.*;
import java.io.*;
public class FlowEngine {
public static void main(String[] args) {
try {
SAXBuilder sb = new SAXBuilder();
//从文件构造一个Document,并装载了流程的XML文件进来。
Document doc = sb.build(new FileInputStream("Flow.xml"));
Element root = doc.getRootElement(); //得到根元素
java.util.List flows = root.getChildren(); //流程的集合 System.out.println("+++++++++++++++++++++++++++++++++++++++++++");
for (int i = 0; i < flows.size(); i++) {
Element flow = (Element) flows.get(i); //第一个流程
Attribute flowid = flow.getAttribute("flowid");
Attribute flowname = flow.getAttribute("name");
System.out.print("流程"+i+ " " + flowid.getName() + "=" + flowid.getValue()+ " ");
System.out.println( flowname.getName() + "=" + flowname.getValue()); System.out.println("+++++++++++++++++++++++++++++++++++++++++++");
//获得一个流程的步骤的集合
java.util.List steps = flow.getChildren();
for(int j=0;j<steps.size();j++){
Element step = (Element) steps.get(j); //第一个步骤
Attribute stepid = step.getAttribute("stepid");
Attribute stepname = step.getAttribute("name"); System.out.print("["+stepid.getName() + "=" + stepid.getValue()+ ";");
System.out.println( stepname.getName() + "=" + stepname.getValue()+"]");
System.out.println("步骤内容如下");
java.util.List stepChilrens = step.getChildren(); for(int k=0;k<stepChilrens.size();k++){
Element stepChilren = (Element) stepChilrens.get(k);//获得步骤下的一个内容项目
System.out.print("-");
System.out.println( stepChilren.getName() + "=" + stepChilren.getValue());
}
} System.out.println("+++++++++++++++++++++++++++++++++++++++++++");
}
} catch (Exception ex) {
System.out.print(ex.getMessage());
}
}
}
(参考表2)
处理的结果入下表,我这里没有经过美工处理,如果您需要实现具体的应用操作,您好需要进一步的处理。(参考表3)。
FlowEngine.java处理Flow.XML文件的之活的结果。
+++++++++++++++++++++++++++++++++++++++++++
流程0 flowid=1 name=发文
+++++++++++++++++++++++++++++++++++++++++++
[stepid=1;name=拟稿]
步骤内容如下
-forword=0
-nextstep=2
-display_page=Ng.jsp
-Action_page=SaveNg.jsp
-Step_Note=拟稿是发文的第一步骤
[stepid=2;name=审核]
步骤内容如下
-forword=1
-nextstep=3
-display_page=Sh.jsp
-Action_page=SaveSh.jsp
-Step_Note=审核是部门领导对即将发出的文件的第一关审核
+++++++++++++++++++++++++++++++++++++++++++
流程1 flowid=2 name=收文
+++++++++++++++++++++++++++++++++++++++++++
[stepid=1;name=登记]
步骤内容如下
-forword=0
-nextstep=2
-display_page=Dj.jsp
-Action_page=SaveDj.jsp
-Step_Note=收到文件之后的第一步文登记
[stepid=2;name=部门领导批示]
步骤内容如下
-forword=1
-nextstep=3
-display_page=DPs.jsp
-Action_page=SaveDPs.jsp
-Step_Note=文件经过部门领导的批示才能走下一步骤
[stepid=3;name=传阅]
步骤内容如下
-forword=2
-nextstep=4
-display_page=Cy.jsp
-Action_page=SaveCy.jsp
-Step_Note=文件是需要所有的人都看见,所以需要传阅
我强烈建议你使用XML技术作为流程引擎设计的一部分技术,这样你可以实现的操作和后期的应用会很灵活。
<待续>