﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font size="5"&gt;Web2.0学习园地&lt;/font&gt;-文章分类-工作流</title><link>http://www.blogjava.net/CrazyJava/category/24104.html</link><description>&lt;marquee behavior="alternate" scrolldelay=3 scrollamount=3&gt;
&lt;font face="楷体_GB2312" color="#FFFF00" size="4"&gt;网络无所不在,信息无所不在,应用无所不在!&lt;/font&gt;
&lt;/marquee&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 18 Feb 2008 19:14:31 GMT</lastBuildDate><pubDate>Mon, 18 Feb 2008 19:14:31 GMT</pubDate><ttl>60</ttl><item><title>用JBoss jBPM管理业务流程（转载）</title><link>http://www.blogjava.net/CrazyJava/articles/180034.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 15 Feb 2008 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/180034.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/180034.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/180034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/180034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/180034.html</trackback:ping><description><![CDATA[<p class="a14"><strong>JBoss jBPM为设计及开发工作流和业务流程管理系统提供了一个先进的平台。由API、特定领域的语言和图形建模工具组成的框架让开发人员和业务分析人员能够使用通用平台进行沟通及操作。</strong>
<p class="a14">工作流管理和业务流程管理（BPM）正在迅速成为企业获得软件敏捷性和适应性的重要方法。JBoss jBPM是一个面向流程的工作流/BPM框架和工具集，它使业务分析人员能够与软件组件进行交互、有助于获得有效的业务解决方案。
<p class="a14">许多企业在积极寻求一种结构化方法，以便设计业务动作/事务，并且优先使用自动化流程加以执行。业务流程管理（BPM）和工作流管理使用动作、任务和流程等概念，提供了解决这个问题的办法。
<p class="a14">业务流程管理一词通常是指企业通过一系列活动，以能够适应动态变化的环境的方式，自动管理及优化流程。这些活动通常寻求来自软件工程和工具的帮助。因而，BPM一词往往直接用来指软件工程技术和工具。
<p class="a14">BPM体现为三个不同的实践
<p class="a14">1．流程设计：指设计现有及新的流程这一任务；
<p class="a14">2．流程执行：执行自动化序列的相关事件，这些事件涉及软件流程以及/或者人为活动；
<p class="a14">3．流程监控：观察及审查单个流程的状态，以便这些流程的统计数字和性能可以加以记录、报告及优化。
<p class="a14">BPM力求让软件工程师们能够与业务分析人员共享同样的概念和框架，因而，软件开发商试图创建这样的工具，让企业可以通过使用图形建模工具、特定领域的语言和专有应用软件，获取、设计及优化业务流程。
<p class="a14">JBoss jBPM 3.0提供了这样的功能：使用业务流程执行语言（BPEL）、灵活而且可插入的应用编程接口（API）、本地流程定义语言以及图形建模工具，利用基于行业标准的编制机制开发新的自动化业务流程和工作流。
<p class="a14">JBoss jBPM是采用开放源代码（LGPL许可证）的框架，包括了Java API、工具和定义语言，可以充当Web应用或者独立的Java应用。JBoss jBPM相当于业务分析人员和开发人员之间的中介，为他们提供了名为jPDL的通用流程定义语言。
<p class="a14">JBoss jBPM架构综述
<p class="a14">JBoss jBPM定义了使用JBoss流程定义语言编写的文件里面的流程定义。jPDL是一种面向图形编程（GOP）的语言，它基于节点、转换和动作组成的模型。在这种模型里面，节点是在流程定义过程中彼此相遇时执行的命令。转换负责指导流程定义的执行过程，而动作在节点或者转换事件发生时执行特定逻辑。
<p class="a14">在jBPM中，流程定义被封装成流程档案（process archives）。流程档案被传送到jPDL流程引擎加以执行。jPDL流程引擎负责遍历流程图、执行定义的动作、维持流程状态，并且记录所有流程事件。
<p class="a14">JBoss jBPM在以下组件里面进行封装:
<p class="a14">● 流程引擎: 该组件通过下列委托组件（delegate component）来执行定义的流程动作、维持流程状态，并记录所有流程事件：请求处理程序、状态管理程序、日志管理程序、定义加载程序、执行服务。
<p class="a14">● 流程监管器: 该模块跟踪、审查及报告流程在执行时的状态。
<p class="a14">● 流程语言: 流程定义语言（jPDL）基于GOP。
<p class="a14">● 交互服务: 这些服务把遗留应用提供成流程执行时所用的功能或者数据。
<p class="a14">图1表明了这些组件之间的关系。
<center><img src="http://360doc.com/DownloadImg/10754/416296_1.jpg"  alt="" /></center>
<p class="a14">如图1所示，含有动作处理程序的jBPM流程定义由jBPM流程引擎加以加载及执行。 如果流程引擎在流程定义过程中遇到拥有相关动作的节点，所有相关的动作处理程序就会被调用。动作处理程序是Java代码的实例，在执行时能够与外部系统进行交互。
<p class="a14">下面就是简单的动作处理程序的示例:
<p class="a14">import org.jbpm.graph.def.*;
<p class="a14">import org.jbpm.graph.exe.*;
<p class="a14">public class MyActionHandler
<p class="a14">implements ActionHandler
<p class="a14">{
<p class="a14">public void execute(ExecutionContext executionContext)
<p class="a14">　{
<p class="a14">System.out.println("MyActionHandler has executed: " + executionContext);
<p class="a14">　}
<p class="a14">}
<p class="a14">流程档案里面的PDL文件名为process-definition.xml。该文件含有诸流程的正式描述。以下示子表明了process-definition.xml文件的例子：
<p class="a14">&lt; ?xml version="1.0" encoding="UTF-8"?&gt;
<p class="a14">&lt; !DOCTYPE process-definition PUBLIC "-//jbpm/jBPM Mapping DTD 2.0//EN" "http://jBPM.org/dtd/processdefinition-2.0.dtd"&gt;
<p class="a14">&lt; process-definition name="purchase process"&gt;
<p class="a14">&lt; !--...--&gt;
<p class="a14">&lt; !-- START-STATE --&gt;
<p class="a14">&lt; start-state name="request a purchase"&gt;
<p class="a14">　&lt; transition to="evaluating"/&gt;
<p class="a14">&lt; /start-state&gt;
<p class="a14">&lt; !-- NODES --&gt;
<p class="a14">&lt; state name="evaluating"&gt;
<p class="a14">　&lt; !--...--&gt;
<p class="a14">　&lt; transition name="approve" to="purchase approved"/&gt;
<p class="a14">　&lt; transition name="disapprove" to="done"/&gt;
<p class="a14">&lt; /state&gt;
<p class="a14">&lt; fork name="purchase approved"&gt;
<p class="a14">　&lt; transition to="decrement inventory" /&gt;
<p class="a14">　&lt; transition to="increment revenue" /&gt;
<p class="a14">&lt; /fork&gt;
<p class="a14">&lt; state name="decrement inventory"&gt;
<p class="a14">　&lt; !--...--&gt;
<p class="a14">　&lt; transition to="join" /&gt;
<p class="a14">&lt; /state&gt;
<p class="a14">&lt; state name="increment revenue"&gt;
<p class="a14">　&lt; !--...--&gt;
<p class="a14">　&lt; transition to="join" /&gt;
<p class="a14">&lt; /state&gt;
<p class="a14">&lt; join name="join"&gt;
<p class="a14">　&lt; transition to="done" /&gt;
<p class="a14">&lt; /join&gt;
<p class="a14">&lt; !-- END-STATE --&gt;
<p class="a14">&lt; end-state name="done" /&gt;
<p class="a14">&lt; /process-definition&gt;
<p class="a14">流程定义基于定向图（directed graph）。有向图由节点、转换、一个起始状态以及一个终止状态组成。每个节点的类型定义了该节点的运行时行为。流程定义在执行时，以下实体就会起到作用：
<p class="a14">● 流程实例: 流程实例是流程定义的一次执行。
<p class="a14">● 标记: 标记是一条执行路径。标记是运行时概念，它含有指向定向图中节点的指针。一旦创建了流程实例，就会创建主要执行路径的标记。该标记名为流程实例的根标记，它位于流程定义的起始状态。
<p class="a14">● 信号: 信号指示标记继续由转换实现的图像执行。
<p class="a14">● 节点: 节点负责图像执行的继续进行。如果标记进入节点，节点就会执行。不会传播执行的节点被认为是状态节点。
<p class="a14">● 动作：动作是流程执行过程中出现事件时执行的Java代码的实例。主要的事件类型有：&#8220;进入节点&#8221;、&#8220;离开节点&#8221;和&#8220;进行转换&#8221;。
<center><img src="http://360doc.com/DownloadImg/10754/416296_2.jpg"  alt="" /><br />
图2 jBPM图形建模设计器</center>
<p class="a14">使用jBPM图形建模设计器，就很容易创建流程定义。设计器目前作为Eclipse插件而安装。图2表明了图形建模设计器的示例屏幕。
<p class="a14">图形设计器可以用来创建流程定义、把动作处理程序与事件连接起来、编辑定义来源、创建流程档案、测试流程定义，等等。
<p class="a14">部署JBoss jBPM
<p class="a14">JBoss jBPM把流程定义存储在数据库中。因而，把流程部署到JBoss jBPM里面需要解析process-definition.xml，并且把它存储在JBoss jBPM数据库中。可通过以下方法实现这项工作：
<p class="a14">● 使用由JBoss jBPM提供的par Ant任务来创建流程档案。
<p class="a14">● 使用deploypar实用程序。该实用程序还可以创建流程档案，并且把流程档案部署到jBPM数据库上。Deploypar实用程序把jBPM.properties文件作为一个属性。该文件指定了配置选项，其中包括流程档案所要部署到的那个数据库。
<p class="a14">● 通过编程解析process-definition.xml，并把它存储到数据存储区中。
<p class="a14">让JBoss jBPM完成一些简单步骤
<p class="a14">JBoss jBPM充当编制引擎，它位于企业应用的中间，能够实现不同应用之间的集成和协调。
<p class="a14">本文使用随同jBPM交付的示例部署，讨论如何利用jBPM和jPDL来创建及修改具有Web功能的简单的订单处理系统。
<p class="a14">1.下载JBoss jBPM
<p class="a14">JBoss jBPM入门套件（http://www.jboss.com/products/jBPM/downloads）包括了执行JBoss jBPM所需的一切，只是没有Java开发者工具包（JDK）。JBoss jBPM入门套件里面的JBoss应用服务器需要J2SE 1.4或者更新版本。
<p class="a14">下载入门套件后，把它解压缩到选择的目录下面。一旦解压缩了该入门套件，就有了类似如下的目录结构：
<p class="a14">● Jbpm-starters-kit-3.1。
<p class="a14">● Jbpm：含有JBoss jBPM产品的源代码。
<p class="a14">● jbpm-bpel：含有JBoss jBPM的BPEL扩展件方面的信息。
<p class="a14">● jbpm-db：含有把JBoss jBPM连接到其他数据库的示例配置。
<p class="a14">● jbpm-designer：含有用于JBoss jBPM可视化流程设计器的Eclipse插件。
<p class="a14">● jbpm-server：含有JBoss应用服务器和JBoss jBPM引擎以及示例流程。
<p class="a14">2.执行JBoss jBPM引擎
<p class="a14">为了启动部署了jBPM的JBoss应用服务器，进入jbpm-server目录，执行里面的启动脚本。命令窗口会随同jBPM控制台窗口一起出现，类似图3。
<center><img src="http://360doc.com/DownloadImg/10754/416296_3.jpg"  alt="" /></center>
<p class="a14">现在，打开浏览器窗口，输入http://localhost:8080/jbpm。就会看到JBoss jBPM的示例Web应用的登录页面。
<p class="a14">以cookie monster用户的身份登录，选择&#8220;创建新的Web销售订单&#8221;链接。这会创建预制的&#8220;Web销售&#8221;流程的新实例，如图4所示。
<center><img src="http://360doc.com/DownloadImg/10754/416296_4.jpg"  alt="" /></center>
<p class="a14">实际的定义文件：processdefinition.xml位于websale.par里面，如以下列表所示：
<p class="a14">&lt; ?xml version="1.0"?&gt;
<p class="a14">&lt; process-definition name="websale"
<p class="a14">xmlns="urn:jbpm.org:jpdl-3.1"&gt;
<p class="a14">&lt; !-- SWIMLANES (= process roles) --&gt;
<p class="a14">&lt; swimlane name="buyer" /&gt;
<p class="a14">&lt; swimlane name="salesman"&gt;
<p class="a14">&lt; assignment expression="user(ernie)" /&gt;
<p class="a14">&lt; /swimlane&gt;
<p class="a14">&lt; swimlane name="accountant"&gt;
<p class="a14">&lt; assignment expression="user(bert)" /&gt;
<p class="a14">&lt; /swimlane&gt;
<p class="a14">&lt; swimlane name="shipper"&gt;
<p class="a14">&lt; assignment expression="user(grover)" /&gt;
<p class="a14">&lt; /swimlane&gt;
<p class="a14">&lt; !-- NODES --&gt;
<p class="a14">&lt; start-state name="create new web sale order"&gt;
<p class="a14">&lt; task swimlane="buyer"&gt;
<p class="a14">&lt; controller&gt;
<p class="a14">&lt; variable name="item"/&gt;
<p class="a14">&lt; variable name="quantity"/&gt;
<p class="a14">&lt; variable name="address"/&gt;
<p class="a14">&lt; /controller&gt;
<p class="a14">&lt; /task&gt;
<p class="a14">&lt; transition to="evaluate web order" /&gt;
<p class="a14">&lt; /start-state&gt;
<p class="a14">&lt; task-node name="evaluate web order"&gt;
<p class="a14">&lt; task swimlane="salesman"&gt;
<p class="a14">&lt; timer duedate="20 seconds" repeat="10 seconds"&gt;
<p class="a14">&lt; action class="org.jbpm.websale.RemindActor"&gt;
<p class="a14">&lt; swimlaneName&gt;salesman&lt; /swimlaneName&gt;
<p class="a14">&lt; /action&gt;
<p class="a14">&lt; /timer&gt;
<p class="a14">&lt; controller&gt;
<p class="a14">&lt; variable name="item" access="read"/&gt;
<p class="a14">&lt; variable name="quantity" access="read"/&gt;
<p class="a14">&lt; variable name="address" access="read"/&gt;
<p class="a14">&lt; variable name="comment"/&gt;
<p class="a14">&lt; /controller&gt;
<p class="a14">&lt; /task&gt;
<p class="a14">&lt; transition name="ok" to="salefork" /&gt;
<p class="a14">&lt; transition name="more info needed" to="fix web order data" /&gt;
<p class="a14">&lt; /task-node&gt;
<p class="a14">&lt; task-node name="fix web order data"&gt;
<p class="a14">&lt; task swimlane="buyer"&gt;
<p class="a14">&lt; controller&gt;
<p class="a14">&lt; variable name="comment" access="read"/&gt;
<p class="a14">&lt; variable name="item" /&gt;
<p class="a14">&lt; variable name="quantity" /&gt;
<p class="a14">&lt; variable name="address" /&gt;
<p class="a14">&lt; /controller&gt;
<p class="a14">&lt; /task&gt;
<p class="a14">&lt; transition to="evaluate web order" /&gt;
<p class="a14">&lt; /task-node&gt;
<p class="a14">&lt; fork name="salefork"&gt;
<p class="a14">&lt; transition name="payment" to="wait for money" /&gt;
<p class="a14">&lt; transition name="shipping" to="ship item" /&gt;
<p class="a14">&lt; /fork&gt;
<p class="a14">&lt; task-node name="wait for money"&gt;
<p class="a14">&lt; task swimlane="accountant"&gt;
<p class="a14">&lt; controller&gt;
<p class="a14">&lt; variable name="item" access="read" /&gt;
<p class="a14">&lt; variable name="quantity" access="read" /&gt;
<p class="a14">&lt; variable name="address" access="read" /&gt;
<p class="a14">&lt; variable name="money received" /&gt;
<p class="a14">&lt; /controller&gt;
<p class="a14">&lt; /task&gt;
<p class="a14">&lt; transition to="update books" /&gt;
<p class="a14">&lt; /task-node&gt;
<p class="a14">&lt; node name="update books"&gt;
<p class="a14">&lt; action class="org.jbpm.websale.UpdateBooks"&gt;
<p class="a14">&lt; msg&gt;accountancy application is now informed of the payment&lt; /msg&gt;
<p class="a14">&lt; /action&gt;
<p class="a14">&lt; transition to="salejoin" /&gt;
<p class="a14">&lt; /node&gt;
<p class="a14">&lt; node name="ship item"&gt;
<p class="a14">&lt; action class="org.jbpm.websale.ShipItem"&gt;
<p class="a14">&lt; swimlaneName&gt;shipper&lt; /swimlaneName&gt;
<p class="a14">&lt; msg&gt;${shipper} now ships ${item} to ${address}&lt; /msg&gt;
<p class="a14">&lt; /action&gt;
<p class="a14">&lt; transition to="salejoin" /&gt;
<p class="a14">&lt; /node&gt;
<p class="a14">&lt; join name="salejoin"&gt;
<p class="a14">&lt; transition to="end" /&gt;
<p class="a14">&lt; /join&gt;
<p class="a14">&lt; end-state name="end" /&gt;
<p class="a14">&lt; /process-definition&gt;
<p class="a14">一旦&#8220;创建新的Web销售订单&#8221;页面加载完毕，填写&#8220;物品&#8221;和&#8220;数量&#8221;表格字段，其中cookie作为物品，1作为数量。然后选择&#8220;保存&#8221;和&#8220;结束任务&#8221;，即可完成&#8220;创建新的Web销售订单&#8221;任务。Web应用会向jBPM发出信号，要求把Web销售流程标记转移到&#8220;评估Web订单&#8221;任务，然后使用输入数据作为流程变量。这时候，登录页面会再次显示。你会注意到这样一则消息：&#8220;新的任务已分配给'ernie&#8217;。&#8221;
<p class="a14">现在，选择&#8220;以另一个用户登录&#8221;链接、以ernie的身份登录。你会注意到：&#8220;评估Web订单&#8221;任务呈高亮显示。把所需地址输入到注释字段，然后选择&#8220;需要更多信息&#8221;按钮。这样就可以把流程标记转移到&#8220;修复Web订单数据&#8221;任务，并且让浏览器回到登录页面。
<p class="a14">这时候，可以以cookie monster用户的身份登录，选择&#8220;修复Web订单数据&#8221;链接，就可以查看高亮显示的任务如何变化、体现流程标记在执行流程中的位置。
<p class="a14">重复流程定义在浏览器窗口中显示的步骤，出现提示时以相应用户的身份登录，完成填写每项新任务的表格。你最终会进入到流程末端，这时就会出现屏幕，告诉你流程已完成。 </p>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/180034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2008-02-15 10:58 <a href="http://www.blogjava.net/CrazyJava/articles/180034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(5) </title><link>http://www.blogjava.net/CrazyJava/articles/130215.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 17:27:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130215.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130215.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130215.html</trackback:ping><description><![CDATA[<div class=postbody>前篇说起要讲在JBPM中实现用户权限，但这段时间比较忙，一直拖着。这里先把jbpm自带的websale例子放上来，大伙先将就看看。这个例子我已经把它抽取了出去，网页部份丢弃了。在看的时候主要看WebsaleTest.java，看看它的用户权限是怎么用的。<br><br>几个重点：<br>(1) jBPM没有角色的概念!!! 很多人把ActorID理解成角色，那是相当错误的。jBPM只有参与者的概念，也就是ActorID，它可以是用户ID，也可以是角色ID，也可以什么都不是。你要自己去把用户角色等东东和ActorID映射起来。不过一般我们把ActorID设置成角色，但jbpm websale却是设置成用户的。<br>(2)用户信息的入口是JbpmContext，里面有一个setActorID方法。你用户登录时候，把一些用户信息set进去。<br>(3)泳道概念：你去看看UML中的带泳道的活动图，那就是象一个游泳池里的泳道一样。<br><br><br>安装提示：<br>&nbsp;&lt;classpathentry kind="con" path="JBPM/jBPM 3.1.2"/&gt;<br>.classpath的这一句很可能和你电脑的设置不符，这是jbpm插件的一个设置，指向jbpm的HOME目录，以便找到jbpm的jar包。你按照你电脑上的设置相应修改一下这一行。<br><br><br>websale的eclipse项目ZIP包：<a href="http://www.blogjava.net/Files/chengang/chen-jbpm_websale.zip"><font color=#1d58d1>http://www.blogjava.net/Files/chengang/chen-jbpm_websale.zip</font></a> </div>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 01:27 <a href="http://www.blogjava.net/CrazyJava/articles/130215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(4) </title><link>http://www.blogjava.net/CrazyJava/articles/130214.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 17:26:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130214.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130214.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130214.html</trackback:ping><description><![CDATA[<div class=postbody>
<h2 style="MARGIN: 12pt 0cm"><span lang=EN-US><font face=Arial>7</font> </span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">　</span> <span lang=EN-US><font face=Arial>jBPM</font> </span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的客户端开发</span> </h2>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有了前面的</span> <span lang=EN-US>HelloWorld</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后台流程，我们就要开始客户端程序了。正如前面提到的，本文不写</span> <span lang=EN-US>JSP</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而改采用</span> <span lang=EN-US>JUnit</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的形式，输出则用</span> <span lang=EN-US>System.out.println</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。举一反三，知道在方法中输入及用</span> <span lang=EN-US>println</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输出，在</span> <span lang=EN-US>JSP</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span> <span lang=EN-US>SWING</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等</span> <span lang=EN-US>GUI</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">界面还不是一样嘛。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个</span> <span lang=EN-US>JUnit</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户端，我们就借用创建项目时自动生成的</span> <span lang=EN-US>SimpleProcessTest.java</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了，改写后如下：</span> </p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #fff4e9; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div">
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">package</span> </strong><span lang=EN-US>com.sample;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>junit.framework.TestCase;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>org.jbpm.JbpmConfiguration;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>org.jbpm.JbpmContext;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>org.jbpm.context.exe.ContextInstance;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>org.jbpm.graph.def.ProcessDefinition;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">import</span> </strong><span lang=EN-US>org.jbpm.graph.exe.ProcessInstance;</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><font face="Courier New"><strong><span lang=EN-US style="COLOR: #7f0055">public</span> </strong><span lang=EN-US><strong><span style="COLOR: #7f0055">class</span> </strong>SimpleProcessTest <strong><span style="COLOR: #7f0055">extends</span></strong> TestCase {</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong>JbpmConfiguration <span style="COLOR: #0000c0">config</span> = JbpmConfiguration.<em>getInstance</em>();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong>JbpmContext <span style="COLOR: #0000c0">ctx</span> = <span style="COLOR: #0000c0">config</span>.createJbpmContext();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// helloworld</span> </font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">对应于</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">jbpm_processdefinition</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">表的</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">name</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">字段值，也即</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">processdefinition.xml</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">的</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">name</font> </span></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">这个值得取比较耗时，实际项目里最好和&#8220;数据库的</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">JDBC</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">连接&#8221;一样，让它共享，不要频繁打开关闭。</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong>ProcessDefinition <span style="COLOR: #0000c0">processDefinition</span> = <span style="COLOR: #0000c0">ctx</span>.getGraphSession().findLatestProcessDefinition(<span style="COLOR: #2a00ff">"helloworld"</span>);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">public</span> </strong><strong><span style="COLOR: #7f0055">void</span> </strong>testNewRequest() {</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">long</span> </strong>id = newRequest();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.<em><span style="COLOR: #0000c0">out</span></em>.println(<span style="COLOR: #2a00ff">"id="</span> + id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checkNewRequest(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>confirmRequest(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checkconfirmRequest(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000c0">ctx</span>.close();<span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">关闭</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">jbpm</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">容器</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f5fbf">/**</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></span><span style="COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">创建一个请假单</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> <strong><span style="COLOR: #7f9fbf">@return</span> </strong></font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*/</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong><strong><span style="COLOR: #7f0055">long</span> </strong>newRequest() {</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">创建一个新流程</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProcessInstance pi = <span style="COLOR: #0000c0">processDefinition</span>.createProcessInstance();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">取得流程的数据环境</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContextInstance ci = pi.getContextInstance();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">创建一张请假单</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ci.setVariable(<span style="COLOR: #2a00ff">"name"</span>, <span style="COLOR: #2a00ff">"</span></font> </span><st1:personname w:st="on"><span style="COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">陈刚</span> </st1:personname><font face="Courier New"><span lang=EN-US style="COLOR: #2a00ff">www.chengang.com.cn"</span> <span lang=EN-US>);</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ci.setVariable(<span style="COLOR: #2a00ff">"day"</span>, 2);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(<strong><span style="COLOR: #7f0055">null</span></strong>, ci.getVariable(<span style="COLOR: #2a00ff">"note"</span>));</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">请假申请结束，转到下一个流程结点</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pi.signal();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">return</span> </strong>pi.getId();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f5fbf">/**</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></span><span style="COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">检查请假单的数据</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> <strong><span style="COLOR: #7f9fbf">@param</span> </strong><span style="COLOR: #3f5fbf">id</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*/</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong><strong><span style="COLOR: #7f0055">void</span> </strong>checkNewRequest(<strong><span style="COLOR: #7f0055">long</span></strong> id) {</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">从数据库提取原流程</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProcessInstance pi = <span style="COLOR: #0000c0">ctx</span>.loadProcessInstance(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">取得流程的数据环境</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContextInstance ci = pi.getContextInstance();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">创建一张请假单</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(<span style="COLOR: #2a00ff">"</span></font> </span><st1:personname w:st="on"><span style="COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">陈刚</span> </st1:personname><font face="Courier New"><span lang=EN-US style="COLOR: #2a00ff">www.chengang.com.cn"</span> <span lang=EN-US>, ci.getVariable(<span style="COLOR: #2a00ff">"name"</span>));</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(Integer.<em>valueOf</em>(2), ci.getVariable(<span style="COLOR: #2a00ff">"day"</span>));</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(<span style="COLOR: #2a00ff">"</span></font> </span><span style="COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">我要请假</span> <font face="Courier New"><span lang=EN-US style="COLOR: #2a00ff">"</span> <span lang=EN-US>, ci.getVariable(<span style="COLOR: #2a00ff">"note"</span>));</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">当前是结点为</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">confirm</font> </span></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(pi.getRootToken().getNode().getName(), <span style="COLOR: #2a00ff">"confirm"</span>);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">流程还没结束</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertFalse</em>(pi.hasEnded());</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f5fbf">/**</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New"><font size=2><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></font></span><span style="COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'"><font size=2>审批<st1:personname w:st="on">陈刚</st1:personname>的请假申请</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*</span> <strong><span style="COLOR: #7f9fbf">@param</span> </strong><span style="COLOR: #3f5fbf">id</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span> <span style="COLOR: #3f5fbf">*/</span> </font></font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong><strong><span style="COLOR: #7f0055">void</span> </strong>confirmRequest(<strong><span style="COLOR: #7f0055">long</span></strong> id) {</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProcessInstance pi = <span style="COLOR: #0000c0">ctx</span>.loadProcessInstance(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContextInstance ci = pi.getContextInstance();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">不通过</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ci.setVariable(<span style="COLOR: #2a00ff">"note"</span>, <span style="COLOR: #2a00ff">"</span></font> </span><span style="COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">不准请假，继续加班</span> <font face="Courier New"><span lang=EN-US style="COLOR: #2a00ff">"</span> <span lang=EN-US>);</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">审批结束，到下一个流程结点</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pi.signal();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong><span style="COLOR: #7f0055">private</span> </strong><strong><span style="COLOR: #7f0055">void</span> </strong>checkConfirmRequest(<strong><span style="COLOR: #7f0055">long</span></strong> id) {</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProcessInstance pi = <span style="COLOR: #0000c0">ctx</span>.loadProcessInstance(id);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContextInstance ci = pi.getContextInstance();</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// ConfirmAction</span> </font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">类在</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">signal</font> </span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">后执行，所以覆盖了经理的审批意见</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(<span style="COLOR: #2a00ff">"</span></font> </span><span style="COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">准假</span> <font face="Courier New"><span lang=EN-US style="COLOR: #2a00ff">"</span> <span lang=EN-US>, ci.getVariable(<span style="COLOR: #2a00ff">"note"</span>));</span> </font></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">当前是结点为</span> <span lang=EN-US style="COLOR: #3f7f5f"><font face="Courier New">end</font> </span></font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertEquals</em>(pi.getRootToken().getNode().getName(), <span style="COLOR: #2a00ff">"end"</span>);</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #3f7f5f">// </span></font></span><span style="COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">流程结束了</span> </font></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em>assertTrue</em>(pi.hasEnded());</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>}</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>}</font> </span></p>
</div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">这个例子还是很简单，而且关键是缺少用户、组、权限等工作流系统必须的东西，不过没关系。下面的内容我将完成一个更完整的实例。</span> </div>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 01:26 <a href="http://www.blogjava.net/CrazyJava/articles/130214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(3) </title><link>http://www.blogjava.net/CrazyJava/articles/130213.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 17:25:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130213.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130213.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130213.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jBPM开发入门指南(3) 5 　安装 jBPM 的 Eclipse 开发插件 有个辅助工具开发起来方便一点，只不过现在 jBPM 的开发工具插件功能还不算太强，也就一个&#8220;项目创建向导&#8221;的功能，让你： （1）不用再去配置 classpath 库的引用了 （2）直接得到了一个 jBPM 的项目初始结构 其实吧，开发 jBPM 也不需要什么插件工具，在熟...&nbsp;&nbsp;<a href='http://www.blogjava.net/CrazyJava/articles/130213.html'>阅读全文</a><img src ="http://www.blogjava.net/CrazyJava/aggbug/130213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 01:25 <a href="http://www.blogjava.net/CrazyJava/articles/130213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(2) </title><link>http://www.blogjava.net/CrazyJava/articles/130212.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130212.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130212.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130212.html</trackback:ping><description><![CDATA[<div class=postbody>
<h2 style="MARGIN: 12pt 0cm"><span lang=EN-US><font face=Arial>4 </font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">数据库初始化</span> </h2>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要数据库支持，</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会把自己的一个初始化数据存储到数据库，同时工作流的数据也是存储到数据库中的。</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span> <span lang=EN-US>Hibernate</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来做为自己的存储层，因此只要是</span> <span lang=EN-US>Hibernate</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持的数据库，</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就支持。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文先以</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例，然后再以</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例，来谈谈</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据库初始化操作。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=a0 style="MARGIN: 6pt 0cm"><font size=2><font style="BACKGROUND-COLOR: #dddddd"><span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">注：在上面的</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">自带的示例中，并没有设置数据库，那是因为</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">默认使用的是内存数据库</span> <span lang=EN-US>hsqldb</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。</span> </font></font></p>
<h3 style="MARGIN: 12pt 0cm 6pt"><span lang=EN-US><font face="宋体, MS Song" size=3>4.1<span style="mso-spacerun: yes">&nbsp; </span>MySQL</font> </span></h3>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=4 style="MARGIN: 6pt 0cm; TEXT-INDENT: 21pt"><span lang=EN-US>1</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">、首先安装</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的安装比较简单，网上也有很多文章，本文不再赘述。本指南所用</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本为</span> <span lang=EN-US>MySQL 4.1</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span> <span lang=EN-US>for windows</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。再找一个</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户端，目的是方便查看数据库中的数据，本文推荐使用</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站上免费提供的&#8220;</span> <span lang=EN-US>MySQL Query Brower</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;，当然你用其他的客户端也行，比如</span> <span lang=EN-US>MySQL-Front</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=4 style="MARGIN: 6pt 0cm; TEXT-INDENT: 21pt"><span lang=EN-US>2</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">、建库</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中创建一个库，库名：</span> <span lang=EN-US>jbpm</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=4 style="MARGIN: 6pt 0cm; TEXT-INDENT: 21pt"><span lang=EN-US>3</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">、生成建表的</span> <span lang=EN-US>SQL</span> <span style="FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">语句并建表</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将</span> <span lang=EN-US>jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的子目录</span> <span lang=EN-US>jbpm</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改名为</span> <span lang=EN-US>jbpm.3</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则在执行下面的</span> <span lang=EN-US>ant</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令时会报如</span> <span lang=EN-US>jbpm.3</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录不存在的错误：</span> </p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #fff4e9; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div">
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build.xml:361: The following error occurred while executing this line:</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build.xml:68: Basedir D:\jbpm-starters-kit-3.1.1\jbpm.3 does not exist</font> </span></p>
</div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span> <span lang=EN-US>DOS</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">窗下，进入</span> <span lang=EN-US>D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录，执行如下命令：</span> </p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #fff4e9; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div">
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>ant mysql.scripts</font> </span></p>
</div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行成功后，在</span> <span lang=EN-US>D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build\mysql\scripts</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录里生成了四个</span> <span lang=EN-US>sql</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，它们做什么用的一看名字就知道了。在</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户端中执行&#8220;</span> <span lang=EN-US>mysql.create.sql</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;脚本，这样将在</span> <span lang=EN-US>jbpm</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">库中创建一个个的数据表。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<h3 style="MARGIN: 12pt 0cm 6pt"><span lang=EN-US><font face="宋体, MS Song" size=3>4.2<span style="mso-spacerun: yes">&nbsp; </span>Oracle</font> </span></h3>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">先安装好</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器。我们公司有现存的</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器，也提供给了我一个属于我自己的用户名，一登录就可以任意在我的库之下创建表了。所以这一步就省了，没有的自个先装好吧。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">推荐用&#8220;</span> <span lang=EN-US>PLSQL Developer</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;。不过要连接</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还要在本机上装上</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自己的客户端程序，里面提供了</span> <span lang=EN-US>JDBC</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包和一些配置。要连接服务器还得配置一下，我一般都是不用</span> <span lang=EN-US>GUI</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而直接改</span> <span lang=EN-US>tnsnames.ora</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，在我的电脑里此文件的目录地址是：</span> <span lang=EN-US>D:\oracle\ora92\network\ADMIN\tnsnames.ora</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，内容如下</span> <span lang=EN-US>(</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两面有两个配置了</span> <span lang=EN-US>)</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span> </p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BACKGROUND: #fff4e9; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div">
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2># TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2># Generated by Oracle configuration tools.</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>WXXRDB_192.168.3.2 =</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>(DESCRIPTION =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>(ADDRESS_LIST =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.2)(PORT = 1521))</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>(CONNECT_DATA =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SID = wxxrDB)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SERVER = DEDICATED)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Courier New" size=2>&nbsp;</font> </o:p></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Courier New" size=2>WXXRDB_192.168.4.2 =</font> </span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>(DESCRIPTION =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>(ADDRESS_LIST =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.2)(PORT = 1521))</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>(CONNECT_DATA =</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SID = wxxrDB)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SERVER = DEDICATED)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>)</font> </font></span></p>
<p class=a style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font size=2><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>)</font> </font></span></p>
</div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前面都是</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一些知识，不会的</span> <span lang=EN-US>Google</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一下吧。最后配置好后，用</span> <span lang=EN-US>PLSQL Developer</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输入你的用户名和密码联接到</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就算</span> <span lang=EN-US>OK</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了。</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;</o:p> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参考上面</span> <span lang=EN-US>MySQL</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的步骤，基本一样：</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1; mso-char-indent-count: 0"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">（1）<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将</span> <span lang=EN-US>jbpm</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改名为</span> <span lang=EN-US>jbpm.3</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1; mso-char-indent-count: 0"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">（2）<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再执行</span> <span class=Char><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ant oracle.scripts</font> </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo1; mso-char-indent-count: 0"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">（3）<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</span> <span lang=EN-US>jbpm-db\build\oracle\scripts</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录的</span> <span lang=EN-US>oracle.create.sql</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本，在</span> <span lang=EN-US>Oracle</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中生成</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的所有表。在&#8220;</span> <span lang=EN-US>PLSQL Developer</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;中可以新建一个</span> <span lang=EN-US>Command Windows</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">窗口然后输入命令：</span> <span lang=EN-US>@D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build\oracle\scripts\oracle.create.sql</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0"><span lang=EN-US><o:p>&nbsp;<br><br><font face=宋体><strong>作者简介<br></strong>陈刚，广西桂林人，著作有《Eclipse从入门到精通》<br>您可以通过其博客了解更多信息和文章：</font><a href="http://www.chengang.com.cn/"><font face=宋体 color=#000033>http://www.ChenGang.com.cn</font></a></o:p> </span></p>
</div>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 01:23 <a href="http://www.blogjava.net/CrazyJava/articles/130212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(1) </title><link>http://www.blogjava.net/CrazyJava/articles/130211.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 17:22:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130211.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130211.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130211.html</trackback:ping><description><![CDATA[<h2><a id=viewpost1_TitleUrl href="http://www.blogjava.net/chengang/archive/2006/07/13/57986.html"><font color=#223355>jBPM开发入门指南(1)</font></a> </h2>
<div class=postbody>
<div class=Section1 style="LAYOUT-GRID:  15.6pt none">
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">工作流虽然还在不成熟的发展阶段，甚至还没有一个公认的规范标准。但其应用却已经在快速展开，这说明市场对工作流框架的需求是急迫而巨大的。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作，这是一个比较典型的工作流系统。过去我们用的工作流引擎是</span> <span lang=EN-US>shark</span> <span style="FONT-FAMILY: 宋体">，然后在使用后发现其过于庞大，后台数据库操作频繁而未进行优化，直接导致的后果就是前台操作缓慢。于是经研究决定，将工作流引擎由</span> <span lang=EN-US>shark</span> <span style="FONT-FAMILY: 宋体">换成</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">之前是一个开源软件，后加入</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 宋体">组织。正好我们公司也是用</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 宋体">的。不过</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">并没有绑定在</span> <span lang=EN-US>JBOSS</span> <span style="FONT-FAMILY: 宋体">上，</span> <span lang=EN-US>Tomcat</span> <span style="FONT-FAMILY: 宋体">等也可以使用它。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的正处在不断发展中，做为开源软件的特点，其设计变化往往很大。所以一些过去的资料可能已经不适用了。于是作者根据自己的使用经验，重新整理出这份文档，以备学习参考。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 楷体_GB2312">注：本文使用的</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 楷体_GB2312">版本为</span> <span lang=EN-US>3.1.1</span> </p>
<h2><span style="FONT-FAMILY: 黑体">环境准备</span> </h2>
<h3><span lang=EN-US>1</span>、安装<span lang=EN-US>JDK</span></h3>
<p class=MsoNormal><span style="FONT-FAMILY: 宋体">所有</span> <span lang=EN-US>JAVA</span> <span style="FONT-FAMILY: 宋体">开发第一个需要安装的，没什么好说的。记得把系统变量</span> <span lang=EN-US>JAVA_HOME</span> <span style="FONT-FAMILY: 宋体">设上。</span> </p>
<h3><span lang=EN-US>2</span>、安装<span lang=EN-US>Ant</span></h3>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>Ant</span> <span style="FONT-FAMILY: 宋体">是使用</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">必须的一个工具。</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">中的很多操作都要用到</span> <span lang=EN-US>Ant</span> <span style="FONT-FAMILY: 宋体">。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">安装方法：</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">（</span> <span lang=EN-US>1</span> <span style="FONT-FAMILY: 宋体">）先下载：</span> <span lang=EN-US><a href="http://archive.apache.org/dist/ant/binaries/"><font color=#1d58d1>http://archive.apache.org/dist/ant/binaries/</font></a> </span><span style="FONT-FAMILY: 宋体">，选一个如：</span> <span lang=EN-US>apache-ant-1.6.5-bin.zip</span> <span style="FONT-FAMILY: 宋体">。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">（</span> <span lang=EN-US>2</span> <span style="FONT-FAMILY: 宋体">）解压到</span> <span lang=EN-US>D:\ant</span> <span style="FONT-FAMILY: 宋体">（当然其他目录也可以）。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">（</span> <span lang=EN-US>3</span> <span style="FONT-FAMILY: 宋体">）设置如下系统变量：</span> <span lang=EN-US>ANT_HOME=d:\ant</span> <span style="FONT-FAMILY: 宋体">。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">（</span> <span lang=EN-US>4</span> <span style="FONT-FAMILY: 宋体">）把</span> <span lang=EN-US>%ANT_HOME%\bin</span> <span style="FONT-FAMILY: 宋体">加入到系统变量</span> <span lang=EN-US>PATH</span> <span style="FONT-FAMILY: 宋体">中。</span> </p>
<h3><span lang=EN-US>3</span>、安装<span lang=EN-US>Eclipse</span></h3>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>Eclipse</span> <span style="FONT-FAMILY: 宋体">不是开发</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">必须的工具，但它是对</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">开发很有帮助的工具，特别是</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">提供了一个</span> <span lang=EN-US>Eclipse</span> <span style="FONT-FAMILY: 宋体">插件用来辅助开发</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">。关于</span> <span lang=EN-US>Eclipse</span> <span style="FONT-FAMILY: 宋体">的安装不赘述了，本文用的版本是：</span> <span lang=EN-US>Eclipse3.2</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US></span>&nbsp;</p>
<h2><span style="FONT-FAMILY: 黑体">安装</span> <span lang=EN-US>jBPM</span> </h2>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的下载地址：</span> <span lang=EN-US><a href="http://www.jboss.com/products/jbpm/downloads"><font color=#1d58d1>http://www.jboss.com/products/jbpm/downloads</font></a> </span><span style="FONT-FAMILY: 宋体">　</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>JBoss jBPM</span> <span style="FONT-FAMILY: 宋体">是</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的软件包</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>JBoss jBPM Starters Kit</span> <span style="FONT-FAMILY: 宋体">　是一个综合包，它包括了</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">软件包、开发插件、一个配置好了的基于</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 宋体">的</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">示例、一些数据库配置文件示例。</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>JBoss jBPM Process Designer Plugin</span> <span style="FONT-FAMILY: 宋体">　是辅助开发</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的</span> <span lang=EN-US>Eclipse</span> <span style="FONT-FAMILY: 宋体">插件。</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>JBoss jBPM BPEL Extension jBPM</span> <span style="FONT-FAMILY: 宋体">关于</span> <span lang=EN-US>BPEL</span> <span style="FONT-FAMILY: 宋体">的扩展包</span> </p>
<p class=a1><span style="FONT-FAMILY: 宋体">本指南选择下载：</span> <span lang=EN-US>JBoss jBPM Starters Kit</span> <span style="FONT-FAMILY: 宋体">。下载后解压到</span> <span lang=EN-US>D:\jbpm-starters-kit-3.1</span> <span style="FONT-FAMILY: 宋体">，目录下含有五个子目录：</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>jbpm</span> <span style="FONT-FAMILY: 宋体">　</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的软件包</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>jbpm-bpel </span><span style="FONT-FAMILY: 宋体">只含有一个网页</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>jbpm-db </span><span style="FONT-FAMILY: 宋体">各种数据库</span> <span lang=EN-US>hibernate</span> <span style="FONT-FAMILY: 宋体">配置文件示例，有些还包含了相应的</span> <span lang=EN-US>jdbc</span> <span style="FONT-FAMILY: 宋体">驱动程序。</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>jbpm-designer</span> <span style="FONT-FAMILY: 宋体">　辅助开发</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的</span> <span lang=EN-US>Eclipse</span> <span style="FONT-FAMILY: 宋体">插件，具体在</span> <span lang=EN-US>jbpm-gpd-feature</span> <span style="FONT-FAMILY: 宋体">子目录中</span> </p>
<p class=a1><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=EN-US>jbpm-server</span> <span style="FONT-FAMILY: 宋体">　一个已经配置好了的基于</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 宋体">的</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">示例</span> <span lang=EN-US>.</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US></span>&nbsp;</p>
<h2><span style="FONT-FAMILY: 黑体">感觉下工作流</span> </h2>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">前面我们说了，在</span> <span lang=EN-US>JBoss jBPM Starters Kit</span> <span style="FONT-FAMILY: 宋体">的</span> <span lang=EN-US>jbpm-server</span> <span style="FONT-FAMILY: 宋体">目录是一个已经配置好的了</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">示例，那么让我们来感觉一下</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">做出的东西吧。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US></span>&nbsp;</p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">双击</span> <span lang=EN-US>jbpm-server</span> <span style="FONT-FAMILY: 宋体">目录下的</span> <span lang=EN-US>start.bat</span> <span style="FONT-FAMILY: 宋体">文件，启动</span> <span lang=EN-US>JBoss</span> <span style="FONT-FAMILY: 宋体">服务。这时会打开一个</span> <span lang=EN-US>DOS</span> <span style="FONT-FAMILY: 宋体">窗口，启动完成后，日志会不断输出，其中最后一句是&#8220;</span> <span lang=EN-US>13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd)</span> <span style="FONT-FAMILY: 宋体">&#8221;，这表示</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">在开始工作了，它不断进行轮询。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">打开网页：</span> <span lang=EN-US><a href="http://localhost:8080/jbpm/"><font color=#1d58d1>http://localhost:8080/jbpm/</font></a> </span><span style="FONT-FAMILY: 宋体">　得到如下画面</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>&nbsp;<img height=191 alt=20060713_image001.jpg src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image001.jpg" width=554 border=0></span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">这是一个已经用</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">开发好的用户定单流程，具有下单、审核、估价等流程。它所用的数据库是一个内置的数据库。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">以</span> <span lang=EN-US>cookie monster</span> <span style="FONT-FAMILY: 宋体">用户登录，选择&#8220;</span> <span lang=EN-US>create new web sale order</span> <span style="FONT-FAMILY: 宋体">&#8221;可以创建一个定单。如下图所示，在图左边是填写的定单情况，右边一整个定货流程的示意图，红色框表示流程进行到哪一步了。填写好定单好，选择&#8220;</span> <span lang=EN-US>Save and Close Task</span> <span style="FONT-FAMILY: 宋体">&#8221;，完成定单提交。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>&nbsp;<img height=326 alt=20060713_image002.jpg src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image002.jpg" width=553 border=0></span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">选择右上角的&#8220;</span> <span lang=EN-US>Login as another user</span> <span style="FONT-FAMILY: 宋体">&#8221;以另外一个用户名</span> <span lang=EN-US>ernie</span> <span style="FONT-FAMILY: 宋体">登录。这时可以看到</span> <span lang=EN-US>ernie</span> <span style="FONT-FAMILY: 宋体">用户的任务列表中多了一项。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>&nbsp;<img height=302 alt=20060713_image003.jpg src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image003.jpg" width=489 border=0></span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">点进去后，显示如下画面。这个示例对中文的支持不好，全都显示成了</span> <span lang=EN-US>unicode</span> <span style="FONT-FAMILY: 宋体">码了。不管这什么多，反正知道是这么回事就行了。在</span> <span lang=EN-US>comment</span> <span style="FONT-FAMILY: 宋体">项填写意见，选</span> <span lang=EN-US>OK</span> <span style="FONT-FAMILY: 宋体">按钮，进入到下一步。如果选择</span> <span lang=EN-US>more info needed</span> <span style="FONT-FAMILY: 宋体">按钮，则打回给</span> <span lang=EN-US>cookie monster</span> <span style="FONT-FAMILY: 宋体">用户修改定单。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span lang=EN-US>&nbsp;<img height=271 alt=20060713_image004.jpg src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image004.jpg" width=553 border=0></span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">下面的流程，这里就不再赘述了。在这个很标准的工作流示例中，我们基本可以看到</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的应用范围还是比较广的。而且从这个示例，我们是看不出有</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的，也就是说</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">在后台起着作用。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">从这个例子，还看不出</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的优势。不过，如果在一个流程不确定，经常需要变动的项目中，</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">的好处将会显然出来。应用</span> <span lang=EN-US>jBPM</span> <span style="FONT-FAMILY: 宋体">后，改变流程只需改变流程描述文件，这将在后面的内容提到。</span> </p>
<p class=MsoNormal style="TEXT-INDENT: 0cm"><span style="FONT-FAMILY: 宋体">这是一个已做好的示例，接下来我们将仿造这个实例来开发一个请假流程。<br><br><strong>作者简介</strong><br>陈刚，广西桂林人，著作有《Eclipse从入门到精通》<br>您可以通过其博客了解更多信息和文章：<a href="http://www.chengang.com.cn/"><font color=#000033>http://www.chenGang.com.cn</font></a></span> </p>
</div>
</div>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 01:22 <a href="http://www.blogjava.net/CrazyJava/articles/130211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流设计</title><link>http://www.blogjava.net/CrazyJava/articles/130208.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 16:58:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130208.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130208.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130208.html</trackback:ping><description><![CDATA[<p><strong>工作流设计</strong></p>
<p>&nbsp;&nbsp;&nbsp; 一个Excel表单可以带一个工作流。工作流定义了Excel表单流动的步骤（任务）、人员和权限。</p>
<p>&nbsp;&nbsp;&nbsp; 定义工作流的步骤：</p>
<p>1.&#8220;新建&#8221;或&#8220;打开&#8221;一个模版，&#8220;工作流&#8221;主菜单自动出现。</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl8.jpg" border=0></p>
<p>2.点击&#8220;定义工作流&#8221;</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl59.gif" border=0></p>
<p>流程名称：工作流的名称。</p>
<p>流程描述：对工作流的说明。</p>
<p>输入&#8220;流程名称&#8221;和&#8220;流程描述&#8221;后，点击&#8220;确定&#8221;，进入工作流设计环境。</p>
<p>3.进入工作流设计环境</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl10.jpg" border=0></p>
<p>可以发现在模版工作表后面增加了一个叫&#8220;workflow&#8221;的新工作表，以及出现了一个&#8220;工作流设计&#8221;菜单。</p>
<p>4.建立任务</p>
<p>点击&#8220;工作流设计&#8221;上的&#8220;新建任务&#8221;，出现：</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl60.jpg" border=0></p>
<p>（1）流程任务定义的&#8220;基本信息&#8221;：</p>
<p>任务名称-工作流的任务名称。</p>
<p>任务描述-任务的说明。</p>
<p>本任务是流程的起始任务-如果选择，该任务是工作流的第一个任务。每个工作流必须有一个起始任务。</p>
<p>完成此步后保存到数据库-如果选择，完成该步后，则将数据保存到数据库中。在&#8220;我的工作台&#8221;中&#8220;报表数据&#8221;中查询到。</p>
<p>完成时限：</p>
<p>到期时限-到了定义的时限后，任务完成者的待办事宜中，该任务显示红色。</p>
<p>到期后自动转向-如果选择，到期后自动转向所指定的任务。</p>
<p>（2）执行权限</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl61.gif" border=0></p>
<p>点击&#8220;从工作表上选择&#8221;，出现：</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/reference/images/workfl1.gif" border=0></p>
<p>选择需要在第一步中填写的工作表上，用鼠标左键点击所需要填写的数据项。选择完成后，点击&#8220;确定&#8221;。</p>
<p>由哪些用户可执行此任务：</p>
<ul>
    <li>由上一步执行人指定
    <li>属于此部门和角色： </li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 可以选择具体部门角色或全部。选择&#8220;全部&#8221;，可以任务发到所有部门和角色。</p>
<p>如果该任务不是起始任务，还需要确定任务的执行方式：</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/ch8/ch812.2.gif" border=0></p>
<ul>
    <li>抢先式-将任务发给多个人，但只有第一个打开的人才能执行，执行完后，其他人的该任务被取消。
    <li>并列时-将任务发给多人，每个人都必须执行。 </li>
</ul>
<p>（3）后续任务</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl62.gif" border=0></p>
<p>自动列出后续任务。</p>
<p>5.新建流向</p>
<p>点击&#8220;工作流设计&#8221;上的&#8220;新建流向&#8221;，并且点击一个起始任务和一个终止任务，出现：</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl63.gif" border=0></p>
<p>流向条件：</p>
<p>（1）无条件向下进行</p>
<p>（2）当以下条件满足时向下进行</p>
<p>点击&#8220;构造条件表达式&#8221;：</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl64.gif" border=0></p>
<p>显示该表单上的字段，可以构造流动规则。</p>
<p>6.建立完整的工作流程图</p>
<p>反复应用建立任务和建立流向，就可以划出需要的流程图。</p>
<p><img src="http://cimg.163.com/tech/netSchool/excel/images/workfl17.jpg" border=0></p>
<p>　</p>
<p>注意：workflow工作表在<a href="http://cimg.163.com/tech/netSchool/excel/reference/fill.htm"><u><font color=#0000ff>填报</font></u></a>时并不显示。</p>
<p>　</p>
<p><strong>工作流使用规则</strong></p>
<p>1.一个Excel服务器模板只能有一个工作流。</p>
<p>2.工作流中只能有一个&#8220;起始任务&#8221;。</p>
<p>3.一个任务可以指向多个任务。</p>
<p>4.一个任务仅可以被一个任务指向。</p>
<p>5.流向中可以增加条件。</p>
<p>6.部门和角色需要在不同条件下完成多个任务，需要单独设置多个任务。</p>
<p>7.工作流任务不能启动另一个工作流。</p>
<p>总之，Excel服务器的工作流，在图形上，是一个树形结构。</p>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 00:58 <a href="http://www.blogjava.net/CrazyJava/articles/130208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流</title><link>http://www.blogjava.net/CrazyJava/articles/130207.html</link><dc:creator>CrazyJava</dc:creator><author>CrazyJava</author><pubDate>Fri, 13 Jul 2007 16:49:00 GMT</pubDate><guid>http://www.blogjava.net/CrazyJava/articles/130207.html</guid><wfw:comment>http://www.blogjava.net/CrazyJava/comments/130207.html</wfw:comment><comments>http://www.blogjava.net/CrazyJava/articles/130207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CrazyJava/comments/commentRss/130207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CrazyJava/services/trackbacks/130207.html</trackback:ping><description><![CDATA[&nbsp;<a href="http://www.itisedu.com/phrase/200603110944215.html" target=_new><u><font color=#800080>工作流</font></u></a>（<a href="http://www.itisedu.com/phrase/200604231404275.html" target=_new><u><font color=#0000ff>Workflow</font></u></a>）就是&#8220;业务过程的部分或整体在<a href="http://www.itisedu.com/phrase/200603021438435.html" target=_new><u><font color=#0000ff>计算机</font></u></a>应用环境下的自动化&#8221;，它主要解决的是&#8220;使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行，从而实现某个预期的业务目标，或者促使此目标的实现&#8221;。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单地说，工作流就是一系列相互衔接、自动进行的业务活动或任务。一个工作流包括一组任务（或活动）及它们的相互顺序关系，还包括流程及任务（或活动）的启动和终止条件，以及对每个任务（或活动）的描述。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作流在大多数的实际应用中的情况可以这样来简单地描述：在网络、服务器和多台计算机<a href="http://www.itisedu.com/phrase/200603082208195.html" target=_new><u><font color=#0000ff>客户端</font></u></a>的硬件平台上，业务过程按照预先设定的规则并借助应用<a href="http://www.itisedu.com/phrase/200604232224305.html" target=_new><u><font color=#0000ff>程序</font></u></a>和人对相关数据的处理而完成。例如，在日常办公中，当撰写好某份报告之后，可能需要将其提交给领导进行审阅或批示；审批意见可能需要汇集并提交给另外一个人，以便对报告进行进一步的修改。这样，可能会形成同一篇文档在多个人之间的顺序或同时传递。对于这样的情况，我们可以使用工作流技术来控制和管理文档在各个计算机之间自动传递，而非手工传递。这就可以称之为工作流。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.itisedu.com/phrase/200603090857555.html" target=_new><u><font color=#0000ff>类</font></u></a>似的关于文档的自动化处理只是工作流技术的一种简单应用。事实上，工作流技术在现实生活中能够完成更多更复杂的任务。如企业（或机构）内部的各种数据或信息的自动处理，多种业务流程的整合，企业（或机构）之间的数据交换，借助Internet技术实现跨地域的数据传输和处理等等。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 某产品销售的工作流示意图： </p>
<p><img src="http://www.itisedu.com/manage/Upload/image/200631194212456.gif" border=0></p>
<p><strong>一、工作流发展</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作流技术起源于二十世纪七十年代中期办公自动化领域的研究，由于当时计算机尚未普及，网络技术水平还很低以及理论基础匮乏，这项新技术并未取得成功。1983年至1985年间，在图像处理领域和电子邮件领域出现了早期的含有工作流特征的商用系统。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进入九十年代以后，随着个人计算机、网络技术的普及和推广，以及信息化建设的日益完善，使得工作流技术的研究与开发进入了一个新的热潮。1993年8月,第一个工作流技术标准化的工业组织——工作流管理联盟（Workflow Management Coalition，简称<a href="http://www.itisedu.com/phrase/200604231403245.html" target=_new><u><font color=#0000ff>WFMC</font></u></a>，下同）成立。1994年，工作流管理联盟发布了用于<a href="http://www.itisedu.com/phrase/200603111053225.html" target=_new><u><font color=#0000ff>工作流管理系统</font></u></a>之间互操作的工作流参考模型，并相继制定了一系列工业标准。与此同时，关于工作流技术的学术研究也十分活跃，许多原型系统在实验室里开发出来。进入二十一世纪以来，工作流技术已被越来越多的人认可，与之相关的标准规范、工作流引擎及商业产品不胜枚举。人们在开发推广工作流产品的同时，更加注重工作流的理论研究，以推动该项技术走向成熟。</p>
<p><strong>二、工作流的特点</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1，图形化、可视化设计流程图 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2，支持各种复杂流程<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3，组织结构级处理者指定功能<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4，<a href="http://www.itisedu.com/phrase/200604291151335.html" target=_new><u><font color=#0000ff>B/S结构</font></u></a>，纯浏览器应用<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5，强大的安全性特色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6，表单功能强大，扩展便捷<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7，灵活的外出、超时管理策略<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8，处理过程可跟踪、管理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9，丰富的统计、查询、报表功能<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10，与MAIL系统集成 </p>
<p><strong>三、工作流的优点</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 企业实施工作流管理所带来的好处是非常明显的，这包括提高企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性、提高工作效率、集中精力处理核心业务、跟踪业务处理过程、量化考核业务处理的效率、减少浪费、增加利润、充分发挥现有计算机网络资源的作用。实施工作流将达到缩短企业运营周期、改善企业内（外）部流程、优化并合理利用资源、减少人为差错和延误，提高劳动生产率等目的。<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总结实施工作流带来的好处，可以归纳为以下几点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1，要处理的事项已自动传递到个人<a href="http://www.itisedu.com/phrase/200604231234155.html" target=_new><u><font color=#0000ff>电脑</font></u></a>上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2，不再需要对员工进行流程的培训，平滑实现流程变更 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3，员工只需将精力集中在处理自己关心的数据上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4，随时得到历史数据 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5，随时生成处理效率报表 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6，达到无纸化办公的目标 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7，完全支持移动办公，使作业同步化 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8，科学管理更进一层，办公效率明显提高 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9，企业的核心竞争力将有提升 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10，通过流程自动化与<a href="http://www.itisedu.com/phrase/200602271218062.html" target=_new><u><font color=#0000ff>数据库</font></u></a>集成，以及各类表单统计查询功能，提高决策能力 </p>
<p><strong><font face=Verdana>四、工作流WorkFlow技术构架</font></strong></p>
<p><img src="http://www.itisedu.com/manage/Upload/image/200631194152246.jpg" border=0></p>
<p><br><strong>五、</strong><font face=Verdana><strong>工作流是如何实现的</strong></font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作流的实施需要三个基本步骤：映射、建模和管理。映射是第一个步骤，其首要任务是确定并且文档化组织内全部现有的手工和自动化的业务流程；建模则是开发一个有助于建成流线型业务过程的模型。第三阶段是<a href="http://www.itisedu.com/phrase/200604232134205.html" target=_new><u><font color=#0000ff>软件</font></u></a>实施以及跨越全部工作部门、业务单元甚至是整个企业的无缝系统集成。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了确保工作流系统能够&#8220;无缝地&#8221;实施到组织机构中，项目组都必须遵从已经定义好的、经过实践确认的行之有效的工作方法，并且在每个工作阶段都必须有可以<a href="http://www.itisedu.com/phrase/200604231331545.html" target=_new><u><font color=#0000ff>度量</font></u></a>的结果。一个深思熟虑的实施计划被有经验的<a href="http://www.itisedu.com/phrase/200603082251135.html" target=_new><u><font color=#0000ff>团队</font></u></a>执行，是成功地采用和实施工作流的决定因素。下图描述了一个推荐的、可供典型组织机构采纳的高层工作流（实施流程）。下面按图中步骤具体阐述。 </p>
</font>
<p>&#160;</p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立<a href="http://www.itisedu.com/phrase/200604240825565.html" target=_new><u><font color=#0000ff>项目管理</font></u></a>办公室</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目管理办公室的组成是第一步，也是最重要的一步。项目管理办公室的成员须经过严格谨慎挑选，他们必须在恰当的程度上广泛代表组织内的业务、运营、IT以及审计等部门。产品供应方的产品专家、技术支持人员和管理人员也必须参与其中，以与用户互补。通常在PMO中还包含变更管理顾问，有助于形成组织中人员思路的多样化。每个成员的角色和责任必须定义清楚。PMO从整体上确立项目的实施范围、目标、实施时间<a href="http://www.itisedu.com/phrase/200603061723295.html" target=_new><u><font color=#0000ff>框架</font></u></a>以及优先级等等。PMO也负责管理和跟踪项目进度、设定检测项目是否成功的指标，以及定期向高层汇报项目状况等。 </font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 业务分析</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目组将分析用户现有的业务流程，找出哪些流程需要优化和改进以达到上佳效果，并分析每个流程的时间线和期望的结果。他们将与关键人员进行座谈，收集和鉴别正确的信息及数据，从而决定工作流系统如何满足<a href="http://www.itisedu.com/phrase/200603101518295.html" target=_new><u><font color=#0000ff>需求</font></u></a>。接下来的业务分析将辨别出哪些流程可以被优化、自动化、流线型化，哪些流程甚至需要重新设计。 </font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定目标</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定上佳目标是建立在业务流程详细分析的基础之上的。工作流项目的目标定义应该清晰并可以进行验证，好的目标意味着项目的成功。在实施过程的每一个阶段，项目组必须确认达到的结果是他们所期望的结果。例如，如果目标是缩短开发票周期两周，则必须分析现有的时间跟踪、记账和开发票等流程。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定实施计划</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标确立后，由用户和软件供应商组成的项目组展示工作流解决方案具备的各种模块，根据用户提出的特定需求定义他们的功能和特性，并基于业务的优先级，共同决定每个模块的上线时间。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将业务流程在工作流系统中建立模型</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在实施过程中建立业务模型是一个极重要的步骤。用户应当紧密地同软件产品应用专家进行合作，以在易用性和功能需求之间达到平衡。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户可以在部署阶段前对模型进行测试，以确保该模型符合实际要求且没有过多的开销。需要指出的是，如果这个建模步骤没有完全正确地完成，将导致错误的报表或者多余的管理工作。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实现流程和软件集成</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个阶段，项目组将确定现有的需要与工作流系统交互的流程与系统。如果处理不当，新旧流程的集成将导致失败。流程集成的一个重要方面就是在多系统之间消除或者最小化冗余数据，并在多个系统间复制这些数据。流程必须紧密集成，数据必须能跨越不同的流程和应用，顺畅流动。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目组也必须确保工作流系统符合用户组织机构的安全标准，这一点经常在部署阶段前被忽视。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 部署工作流系统</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 部署工作流系统包括两部分内容。第一部分自然是技术部分，涵盖了硬件和软件的安装、备份、恢复以及网络安装等等，这与一般的IT应用实施相似。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二部分是指上线试运行。试运行小组应具有真正的代表性。项目组必须与试运行小组就项目的重要性进行沟通，并确保提供足够的培训，使得试运行小组能够对试运行工作得心应手。建议项目组建立清晰的沟通渠道，保证在试运行期间可以及时反馈用户的意见和建议。试运行将使项目组鉴别出原来设计和计划的弱点和缺点，并在大规模上线运行前加以解决。这也可以提高用户对于新流程的接受程度，因为用户感到他们也参与了项目的开发部分，解决方案不是强加给他们的。 </font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般认为，采用阶段性实施工作流系统可使用户更快地获得效益。因为用户可以更有效地渐进学习新系统，取得立竿见影的效益。阶段性实施还给予用户更多的时间了解、评估他们进一步的需求，使得项目实施期间的修改更加容易。另外，阶段性实施项目降低了风险。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统评估</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 特别注意，在每一个阶段完成后，项目组都应该基于项目开始时设定的目标，对已经完成的结果进行评估，同时分析所达到的结果，并与最初的设计目标相对照。为了确保工作流解决方案在现有的业务环境中优化出更理想的结果，项目组必须进行定期的监控、评估和沟通，以了解什么需要更改。</font></p>
<p><font face=Verdana><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统支持</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为确保实施成功，更佳地使用工作流软件，组织机构必须进行服务投资，组织机构应该委派专业人员提供第一线的服务，也应负责与供应商签订合同，以获得第二级支持。</font></p>
<p><strong>六、工作流适用行业</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。</p>
<p><strong>七、工作流具体应用</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关键业务流程： 订单、报价处理、采购处理、合同审核、客户电话处理、供应链管理等 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行政管理类：出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 人事管理类： 员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 财务相关类： 付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户服务类： 客户信息管理、客户投诉、请求处理、售后服务管理等管理等。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 特殊服务类： ISO系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为一个成熟稳定的工作流产品，不仅提供日常办公和关键业务流程智能化管理，而且能根据公司的特殊实际要求轻松方便地随时定制各种流程，并可实现不同角色不同的跟踪、查询、统计、打印等强大功能</p>
<p><font face=Verdana><strong>结论</strong></font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 许多组织机构都有雄心勃勃的计划，为了能够夺回失去的时间和获得竞争优势，希望能够以大的步伐，更深（企业级或多级）、更广（多应用）和更快（短时间）地进入数字工作流时代。我经常发现他们因为许多原因而惨遭失败。根据我个人经验，明智的做法是从小的范围开始做起，并随着工作流的成长而逐步做大。阶段性实施提供了转换到新的流程的平稳方法。由于用户看到了效益，使得用户更易于接纳新的工作流程。阶段性实施的另一个原因，是用户不能够承受一下子丢弃原有的全部流程，从零开始。组织机构应该在当前业务过程中最没有效率的地方，集中寻找他们的&#8220;痛处&#8221;，然后利用&#8220;案例驱动&#8221;原则影响他们。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 组织机构也必须认识到，当计划实施一个新的工作流程时，行政力量和企业文化必须要考虑进去。</font></p>
<p><font face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功与否的最后一个关键要素就是&#8220;人&#8221;。当我们改变业务流程时，技术是一个方面，但更大的挑战来自员工。的确，数字工作流系统要分阶段进行，使人们&#8220;渐进式&#8221;地取得经验，而不是&#8220;革命式&#8221;地得到经验。</font></p>
<img src ="http://www.blogjava.net/CrazyJava/aggbug/130207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CrazyJava/" target="_blank">CrazyJava</a> 2007-07-14 00:49 <a href="http://www.blogjava.net/CrazyJava/articles/130207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>