流程引擎设计之四

类别:Java 点击:0 评论:0 推荐:
我们通过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技术作为流程引擎设计的一部分技术,这样你可以实现的操作和后期的应用会很灵活。
<待续>

本文地址:http://com.8s8s.com/it/it16641.htm