流程引擎设计之四

原创 2004年04月12日 12:50:00
我们通过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技术作为流程引擎设计的一部分技术,这样你可以实现的操作和后期的应用会很灵活。
<待续>

通用工作流引擎内核的设计与实现

工作流技术是当前计算机应用领域的一个研究热点,利用工作流技术对企业进行业务过程的建模和分析不仅可以规范化企业的业务流程,发现业务流程中不合理和低效的环节,进而对企业的业务过程进行优化重组,达到全面提高...
  • wacky
  • wacky
  • 2016年08月02日 18:43
  • 1007

《自己动手写框架3》:业务流程引擎设计

一般的时候,我们都采用编程式开发,编程式开发的好处非常明显:直接、高效、自由,当然其缺点也是有的,与其优点刚好相对,因为直接,所以有些变化都要进行代码上的修改;因为高效,所以一旦出问题,导致的结果也比...
  • cndes
  • cndes
  • 2015年06月04日 15:04
  • 3701

JavaEE项目实战(OA系统)之二十_流程审批之三

OA系统流程审批模块的测试数据
  • hanhf
  • hanhf
  • 2016年09月24日 14:10
  • 1562

几种开源工作流引擎的简单比较

目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性。   Apache ODE Enhy...
  • 1950
  • 1950
  • 2011年12月31日 17:23
  • 866

“Ceph浅析”系列之四——Ceph的工作原理及流程

原文在 http://yizhaolingyan.net/?p=63, 感谢作者 @一棹凌烟         本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍。如前所述,由于Ceph的...
  • scaleqiao
  • scaleqiao
  • 2015年06月08日 17:09
  • 1196

4层板PCB设计(基于AD)

在系统提供的众多工作层中,有两层电性图层,即信号层与内电层,这两种图层有着完全不同的性质和使用方法。   信号层被称为正片层,一般用于纯线路设计,包括外层线路和内层线路,而内电层被称为负片层,...
  • Uncle_GUO
  • Uncle_GUO
  • 2015年01月10日 02:17
  • 5469

数据结构实验之排序四:寻找大富翁

数据结构实验之排序四:寻找大富翁 Time Limit: 150MS Memory limit: 512K 题目描述 2015胡润全球财富榜调查显示,个人资产在1000万以上的高净值人群...
  • guoqingshuang
  • guoqingshuang
  • 2015年12月23日 22:17
  • 2208

PCB四层板设计步骤

一、常用参数设置 工程右键--》工程参数 (1)位号重复报错 (2)单端网络报错 (3)独立节点 、 二、编译检查原理图中的错误 工程右键——》编译 如没有编号,网络标号虚接,编号重复等错误...
  • fengyuwuzu0519
  • fengyuwuzu0519
  • 2017年02月19日 16:03
  • 2725

sdut 2134 数据结构实验之栈与队列四:括号匹配

数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem...
  • sxy201658506207
  • sxy201658506207
  • 2017年10月10日 18:40
  • 124

“Ceph浅析”系列之四Ceph的结构

本文将从逻辑结构的角度对Ceph进行分析。 4.1    Ceph系统的层次结构         Ceph存储系统的逻辑层次结构如下图所示[1]。         自下向上,可以将Ceph系统...
  • qq_24916117
  • qq_24916117
  • 2015年12月30日 20:42
  • 541
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:流程引擎设计之四
举报原因:
原因补充:

(最多只允许输入30个字)