| 
         
     
     | 
     | 
    
  
    | 
    流程引擎设计之四 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    我们通过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技术作为流程引擎设计的一部分技术,这样你可以实现的操作和后期的应用会很灵活。 <待续> 
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |