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