<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://900way.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2f900way.spaces.live.com%2fcategory%2fworkflow%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>在路上...: workflow</title><description /><link>http://900way.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catworkflow</link><language>en-US</language><pubDate>Tue, 23 Sep 2008 08:50:26 GMT</pubDate><lastBuildDate>Tue, 23 Sep 2008 08:50:26 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://900way.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>6279604829903914469</live:id><live:alias>900way</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>WorkflowInterface提交节点BUG修改</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!153.entry</link><description>&lt;div&gt;在WorkflowInterface.java提交节点的方法中，第544行,修改为&lt;/div&gt;
&lt;div&gt;if(taskStatus != null &amp;amp;&amp;amp; !taskStatus.equalsIgnoreCase(&amp;quot;CAL_COMPLETED&amp;quot;)){&lt;/div&gt;
&lt;div&gt;原因是,在查询上面所有节点返回的记录包括可能未实例化的节点ID，这些未实例化的节点的状态是null.&lt;/div&gt;
&lt;div&gt;这是在测试互斥流程时,出现的新问题.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+WorkflowInterface%e6%8f%90%e4%ba%a4%e8%8a%82%e7%82%b9BUG%e4%bf%ae%e6%94%b9&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!153.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!153.entry</guid><pubDate>Mon, 13 Mar 2006 07:26:24 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!153/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!153.entry#comment</wfw:comment><dcterms:modified>2006-03-13T07:26:24Z</dcterms:modified></item><item><title>流程流转方式的选择：隐式选择和显式选择</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!148.entry</link><description>&lt;div&gt;&lt;font size=3&gt;流转的条件从用户提交的数据中获得。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;多个流程控制数据存储在页面中,哪一个是用户希望选用的流转条件呢？&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;流转条件的选择方式有两种：隐式选择和显式选择。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;什么叫隐式选择呢？就是在用户点击提交按钮，触发提交事件的时候，根据页面的数据填写情况或者其他的条件判断，确定流转的条件值，一并提交。或者通过不同的按钮存储不同的流转条件，用户通过触发不同的按钮选择不同的流转条件。这些条件的选择用户是觉察不到自己参与的。这种流转条件的提交放置在用户按钮触发事件中。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;什么叫显式选择呢？就是在用户触发按钮的提交事件后，弹出一个选择流程节点的窗口，让用户选择下一个节点；用户选择了一个节点，相应的去往那个节点的流转条件也就被选择并被提交。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;这个弹出式窗口的流转节点信息的生成有两种方式。第一，根据流程的定义，把流转表达式变量和流转条件的值，做成一个固定的页面，提供给用户。第二，把流转条件和表达式的值存储在数据库，他们是在流程倒入数据库的时候分离出来的。用户选择流转条件的弹出窗口中的信息，自动从数据库中获得，并跟随流程设计中条件的变化而变化，无需人工维护选择流转条件的窗口信息。&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+%e6%b5%81%e7%a8%8b%e6%b5%81%e8%bd%ac%e6%96%b9%e5%bc%8f%e7%9a%84%e9%80%89%e6%8b%a9%ef%bc%9a%e9%9a%90%e5%bc%8f%e9%80%89%e6%8b%a9%e5%92%8c%e6%98%be%e5%bc%8f%e9%80%89%e6%8b%a9&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!148.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!148.entry</guid><pubDate>Sun, 26 Feb 2006 13:42:41 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!148/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!148.entry#comment</wfw:comment><dcterms:modified>2006-02-26T13:42:41Z</dcterms:modified></item><item><title>工作流表单和引擎流转之间的数据联系</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!147.entry</link><description>&lt;div&gt;&lt;font size=3&gt;页面是用户和系统进行交互的载体，用户主要通过页面的按钮(提交数据)请求服务，我把这叫做&amp;quot;按钮驱动&amp;quot;。系统通过用户点击按钮，驱动系统运转。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;页面的数据可以分为两类：业务数据和流程控制数据。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;流程控制数据完全是为了流程控制而设定的、用户不可见的页面元素或者变量。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;业务数据纪录业务相关的信息。有时候，业务数据也可以参与流程的控制。比如，借款申请的流程中，借款金额大于5000元人民币的申请，部门经理批准后要上报总裁审批。这里5000既是业务数据，也参与了流程的控制。当然，也可以单独采用专用的流程控制变量来代替业务数据控制流程的流转。当然，在用户任意可定制的电子表单中和用户需求频繁发生变化的情况下，不宜采用业务数据参与流程的控制。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;从(用户界面)客户端提交数据，服务器接受并处理，到服务器端返回处理的结果，到(用户界面)客户端，这一来一往，可以描述如下：&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;在用户点击按钮，触发提交数据的事件，在页面提交数据的时候，业务数据和流程控制数据是一起提交的。服务端接到请求，首先统一存储全部数据。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;数据存储完毕后，可以认为从客户端到服务器端的请求完成，这是一来。后面的处理是服务器端处理业务和流程逻辑，完毕后把结果返回到客户端，这算一往。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;服务器端的逻辑也要分为两种：业务逻辑和流程控制逻辑。&lt;/font&gt;&lt;font size=3&gt;一来一往中间的统一存储数据，使在服务器端处理控制逻辑的时候不受页面表单的内容数据和流程控制数据分类的限制。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;流程控制数据与业务无关，用户不可见。无论用户的页面(电子表单)如何变化，都不会触及流程控制数据。服务器端控制流程也只是用到流程控制数据，这样用户表单的变化和流程控制就无关了。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;用户修改了电子表单的内容和数据，只有业务逻辑受到影响(不完全是这样的，这里暂且认为业务逻辑受到影响)，控制逻辑不受影响，只要把控制逻辑和业务逻辑分开设计。那么当用户页面的电子表单做修改的时候，对流程是没有影响的。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font size=3&gt;那么什么改变了，对流程有影响呢？下次再说这个问题。&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+%e5%b7%a5%e4%bd%9c%e6%b5%81%e8%a1%a8%e5%8d%95%e5%92%8c%e5%bc%95%e6%93%8e%e6%b5%81%e8%bd%ac%e4%b9%8b%e9%97%b4%e7%9a%84%e6%95%b0%e6%8d%ae%e8%81%94%e7%b3%bb&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!147.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!147.entry</guid><pubDate>Thu, 23 Feb 2006 14:19:23 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!147/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!147.entry#comment</wfw:comment><dcterms:modified>2006-02-23T14:19:23Z</dcterms:modified></item><item><title>工作流与办公自动化的定义</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!138.entry</link><description>&lt;div&gt;
&lt;table cellspacing=0 cellpadding=0 width="95%" align=center border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=middle&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;table cellspacing=0 cellpadding=0 width="95%" align=center border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top align=left&gt;
&lt;p&gt;&lt;br&gt;工作流：
&lt;p&gt;    根据 WfMC 的定义，工作流（Workflow）就是自动运作的业务过程部分或整体，表现为参与者对文件、信息或任务按照规程采取行动，并令其在参与者之间传递。简单地说，工作流就是一系列相互衔接、自动进行的业务活动或任务。
&lt;p&gt;    工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控，达到提高生产组织水平和工作效率的目的。工作流技术为企业更好地实现经营目标提供了先进的手段。
&lt;p&gt;    1993年，国际工作流管理联盟（Workflow Management Coalition，WfMC）的成立标志着工作流技术开始进入相对成熟的阶段。为了实现不同工作流产品之间的互操作，WfMC在工作流管理系统的相关术语、体系结构及应用编程接口等方面制定了一系列标准。工作流管理联盟给出的工作流定义是：工作流是指整个或部分经营过程在计算机支持下的全自动或半自动化。在实际情况中可以更广泛地把凡是由计算机软件系统（工作流管理系统）控制其执行的过程都称为工作流。
&lt;p&gt;    一个工作流包括一组活动及它们的相互顺序关系，还包括过程及活动的启动和终止条件，以及对每个活动的描述。工作流管理系统指运行在一个或多个工作流引擎上用于定义、实现和管理工作流运行的一套软件系统，它与工作流执行者（人、应用）交互，推进工作流实例的执行，并监控工作流的运行状态。
&lt;p&gt;一、工作流管理：&lt;br&gt;    通常，工作流管理系统指运行在一个或多个称为工作流机的软件上的用于定义、实现和管理工作流运行的一套软件系统，它和工作流执行者（人、应用）交互，推进工作流实例的执行，并监控工作流的运行状态。在这里需要强调指出的是工作流管理系统不是企业的业务系统。在很大程度上，工作流管理系统为企业的业务系统运行提供一个软件支撑环境，非常类似于在单个计算机上的操作系统。只不过工作流管理系统支撑的范围比较大、环境比较复杂而已，所以也有人称工作流管理系统是业务操作系统（BOS － Business Operating System）。在工作流管理系统的支撑下，通过集成具体的业务应用软件和操作人员的界面操作，才能够良好地完成对企业经营过程运行的支持。所以，工作流管理系统在一个企业或部门的经营过程中的应用过程是一个业务应用软件系统的集成与实施过程。
&lt;p&gt;二、工作流管理系统：&lt;br&gt;    工作流管理系统可以用来定义与执行不同覆盖范围（单个工作者、部门、全企业、企业间）、不同时间跨度（分钟、小时、天、月）的经营过程。这完全取决于实际应用背景的需求。按照经营过程以及组成活动的复杂程度的不同，工作流管理系统可以采取许多种实施方式，在不同的实施方式中，所应用的信息技术、通信技术和支撑系统结构会有很大的差别。工作流管理系统的实际运行环境可以是在一个工作组内部或者在全企业的所有业务部门。
&lt;p&gt;三、业务过程：&lt;br&gt;    业务过程（business process）就是活动的集合，这些活动均关联于特定的托付事项（commitment），为过程的产出增值。相对于“工作流”，业务过程是一个更一般化的统称，而工作流这个词，则已经不能仅从字面含义或原理上去理解，它已经被赋予了更深一层的特定含义——专指基于信息技术规划、运作、管理的业务过程。
&lt;p&gt;四、自动与协调:&lt;br&gt;    “自动”（automate）是工作流的一个特征，但这主要是指它自动进行的特征，而不是说没有人的参与。工作流实际上是一个人-电脑协调的混合过程，在一个实际的工作流中，通常总有些步骤是人完成的。协调是工作流管理的一个目标或者特征，这包括了人与人、人与电脑，电脑（软件）之间等多种层面的含义。
&lt;p&gt;五、监察与控制:&lt;br&gt;    监察（Monitoring）与控制（Contorl）是工作流系统的重要功能与特征。这不仅包括对正在发生的业务过程（工作流），还包括它的定义或改变（比如BPR的过程）。这是工作流系统带给我们的明显好处之一。
&lt;p&gt;六、标准化:&lt;br&gt;    作流的概念被明确提出并得到重视的同时，人们就认识到了“标准化”在其中的重要性，有关工作流的标准开发和推广，基本是与“工作流”的开发和推广同步进行的。在这方面目前的权威性机构，是“工作流管理联盟”（Workflow Management Coalition, WfMC）。它成立于1993年8月，目前已拥有 130 余个成员，成员包括工作流产品的供应者、应用者，有关大学和研究机构和个人，是一个国际性的非赢利组织。在最近的投资成员（Funding members）清单中，可以看到诸如 Baan, HP, IBM, Microsoft, Oracle, Peplesoft, SAP AG, Xerox 等机构。
&lt;p&gt;七、工作流与重规划:&lt;br&gt;    从逻辑上，对工作流的关注和研究可以看作是对业务过程重规划（BPR）的一种深化。BPR的观点，要求我们将眼光投向实际业务进行的过程，但这个过程应当是什么样的，怎样分析、构造？工作流就是一个具体的、操作性的答案，它可以令我们从神秘的、难以预测和控制的“头脑风暴式”的“艺术的”业务过程创造，变成解析的、技术的、可控制和预测的工程化过程，如此，才真正体现出 re-engineering 中 engineering 的意义。&lt;br&gt;工作流与 BPR 的概念，已经被几乎所有的研究者联系在一起研究和应用。在这个领域有一个非常活跃的组织，即国际工作流与重规划协会（ Workflow And Reengineering International Association, WARIA）。
&lt;p&gt;八、工作流与企业工程:&lt;br&gt;    无论从理论、方法上，还是对象、内容上，我们都有理由将“工作流”看作是企业工程的一部分。实际上，已有的关于工作流体系的描述，本身就是一个通用的业务模型框架。仅仅囿于工作流是不够的，必须对整个体系的目标及所有相关要素综合考虑——这正是企业工程。
&lt;p&gt;九、工作流与IT应用体系:&lt;br&gt;    与以往已经被采用的企业 IT 应用体系，例如 MRPII 或 ERP 相比，WFMS是一个相当重要的里程碑。（ERP的概念并不确定，我这里仅指其基本或较早期的含义而言）。从用户的角度，WFMS带来（或将要带来）的变化是极其强烈的，甚至可以形容为一种用户“梦想”的实现。
&lt;p&gt;　　 在一些老的“模块化”的产品中，系统的设计是通常是基于任务分割的，作业项目之间是分裂的。面向对象的技术，并不能直接解决这个的问题，相反，往往使系统变得更加混乱和琐碎。从操作上，典型地，我们必须不断地在层次结构的功能表（比如下拉菜单）或对象之间“进进退退”，或者在“神出鬼没”的对象以及相关菜单中捉迷藏。&lt;br&gt;　　 工作流管理系统是一个真正的“人-机”系统，用户是系统中的基本角色，是直接的任务分派对象，他或她可以直接看到电脑针对自己列出的“任务清单”，跟踪每一项任务的状态，或继续一项任务，而不必从一个模块退出，进入另一个模块，搜索相应任务的线索。前者是面向功能或对象的，而后者是直接面向用户的。这样，用户的任务分派和任务的完成状态，可以被最大程度地电脑化和受到控制。&lt;br&gt;　　 现在的典型工作流产品是客户-服务软件。而日益增长的重要途径是通过万维网界面，它可以令客户或远程的职员更好地参与。工作流的定义经常是借助于图形化工具，依照业务过程实例的情况定义相应工作的安排
&lt;p&gt;OA(办公自动化)：                  引自肖淑男 2001-2-20
&lt;p&gt;    通常，OA 就是办公自动化，英文Office Automation的缩写。通过流程或特定环节与日常事务联系在一起，使公文在流转、审批、发布等方面提高效率，实现办公管理规范化和信息规范化，降低企业运行成本的一套系统的统称。
&lt;p&gt;    多年来，OA尚无一个确切的定义，人们对OA的看法和理解各有不同。笔者认为：OA本身就不是一个有确定界定的概念，它是一个过程、一种境界。它随技术的发展而发展，随人们办公方式和习惯以及管理思想的变化而变化。在技术发展过程中的每一个阶段，人们给OA赋予了不同的内容和新的想象，技术与管理的进步给OA打下了每一步发展的历史烙印。同时，不同行业、不同层次的人对OA的看法和理解也各有不同。也许正是OA这种变化和发展的特点使之成为30多年来常新不衰的话题。&lt;br&gt;现在有一种较普遍的偏见：认为OA仅仅是诸如公文流转、收发文管理、档案管理、会议安排、文献检索、电子表格、电子邮件等等这些非结构化数据的处理和交换过程，面向的用户群也只是机关办公室或企业的职能部门、文秘部门。其实，今天看来，OA应有更丰富的内容和层面，更广泛的用户群。以下是笔者对OA在功能上以及所涉及的技术范畴的肤浅理解，愿与同行商榷。 &lt;br&gt;     
&lt;p&gt;    功能方面：广义面言，OA应该是一个企业除了生产控制之外的一切信息处理与管理的集合。它面向不同层次的使用者，便有不同的功能表现： 
&lt;p&gt;    对于企业高层领导而言，OA是决策支持系统（DSS）。OA运用科学的数学模型，结合企业内部／外部的信息为条件，为企业领导提供决策参考和依据； 
&lt;p&gt;    对于中层管理者而言：OA是信息管理系统（IMS），OA利用业务各环节提供的基础“数据”，提炼出有用的管理“信息”，把握业务进程，降低经营风险，提高经营效率； 
&lt;p&gt;    对于普通员工而言：OA是事务／业务处理系统。OA为办公室人员提供良好的办公手段和环境，使之准确、高效，愉快地工作。 
&lt;p&gt;     技术范畴：OA是计算机技术在办公业务中的合理应用。计算机技术是OA的前提。如果脱离计算机技术面阔谈OA，无异于痴人说梦。没有计算机技术，OA便成无源之水、无本之木。计算机对信息的存储与处理能力极大地改变了人们的办公方式，提高了工作效率。如：要建立决策支持系统，则需要数据仓库 、OLAP等技术；要建立信息管理系统，则要有数据库、程序设计语言等技术；要建立事务／业务处理系统，则离不开数据库、设计良好的人机界面和工作流控制、OLTP等技术。 
&lt;p&gt;    OA是利用通信技术来实现人与机器、机器与机器及人与人的交流。通信技术是OA的基础。现代办公室不再是孤军奋战，而是一个团队的协同工作，团队中成员之间的协调、合作离不开通信技术；现代办公室也不再是闭门造车，企业需要与外界广泛的信息交流，这更离不开通信技术。没有通信技术的支持，OA便成空中楼阁。 
&lt;p&gt;     OA是科学的管理思想在先进的技术手段下的物化。科学的管理思想是实现OA的核心。计算机技术和通信技术仅仅是为实现OA打下了基础，提供了可能。要真正实现OA，还需物化人类思维中科学管理的内容。正如仅有优质的画笔、画板、颜料而没有达.芬奇，就不会有蒙娜尼莎的微笑一样。不体现人类管理智慧，就不会有真正的OA，如果有，也只是技术的堆砌和摆设。 
&lt;p&gt;    由此而知，OA是计算机技术、通信技术与科学的管理思想完美结合的一种境界和理想。我们一直在为实现OA而努力，但我们的成果仅仅是在某些环节、某些方面、部分地实现了OA的功能，与真正的OA尚有差距，差距的根本在于应用系统对管理思想的实现方面。&lt;br&gt;&lt;br&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+%e5%b7%a5%e4%bd%9c%e6%b5%81%e4%b8%8e%e5%8a%9e%e5%85%ac%e8%87%aa%e5%8a%a8%e5%8c%96%e7%9a%84%e5%ae%9a%e4%b9%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!138.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!138.entry</guid><pubDate>Sat, 18 Feb 2006 14:32:57 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!138/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!138.entry#comment</wfw:comment><dcterms:modified>2006-02-18T14:32:57Z</dcterms:modified></item><item><title>目前平台初始化产生错误的原因</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!118.entry</link><description>&lt;div&gt;
&lt;h2&gt;目前平台初始化产生的错误，有时候会导致平台无法继续使用，只能不断的重新启动。现在问题描述如下：我想在后面的重构过程中不会出现这种问题。&lt;/h2&gt;
&lt;p&gt;===============================
&lt;h2&gt;ofbiz2.1的两个涉及线程安全的bug：实体引擎丢失字段和UtilCache.get空指针异常- -&lt;/h2&gt;
&lt;p&gt;                                       
&lt;p&gt;
&lt;div&gt;Ofbiz2.1有两个bug，都涉及到线程安全性，小并发的时候不容易发现，大并发下有时候会出现，并发数越高出现的频度就比较高，尤其对于实体引擎的那个bug，在系统初始化的时候如果遭遇大并发，会有一定频度的出现。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1。entity engine的ModelEntity.getField方法存在线程安全隐患，会造成 XXXX is not a field of XXX的异常，以下是原有代码片断：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    public ModelField getField(String fieldName) {&lt;br&gt;        if (fieldName == null) return null;&lt;br&gt;&lt;/font&gt;&lt;font color="#cc3333"&gt;        if (fieldsMap == null) {&lt;br&gt;            fieldsMap = new HashMap(fields.size());&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#cc3333"&gt;            for (int i = 0; i &amp;lt; fields.size(); i++) {&lt;br&gt;                ModelField field = (ModelField) fields.get(i);&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;&lt;font color="#cc3333"&gt;                fieldsMap.put(field.name, field);&lt;br&gt;            }&lt;br&gt;&lt;/font&gt;        }&lt;br&gt;        return (ModelField) fieldsMap.get(fieldName);&lt;br&gt;    }&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;由于getField方法没有同步（会造成性能下降），因此红色标标注的那段代码存在线程安全问题，必须进行同步。在大并发下如果多个调用这个方法，最先调用的线程没有执行完循环的情况下，后续的线程通过最后的语句return的时候得到的就是Null（fieldsMap已经被第一个线程赋值了，后续线程不会进入红色标准的代码区域）。&lt;/div&gt;
&lt;div&gt;修改后的代码如下：&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    public ModelField getField(String fieldName) {&lt;br&gt;        if (fieldName == null) return null;&lt;br&gt;        if (fieldsMap == null) {&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;             createFields();&lt;br&gt;        }&lt;br&gt;        return (ModelField) fieldsMap.get(fieldName);&lt;br&gt;    }&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    public synchronized void createFields()&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    {&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;             fieldsMap = new HashMap(fields.size());&lt;br&gt; &lt;br&gt;             for (int i = 0; i &amp;lt; fields.size(); i++) {&lt;br&gt;                 ModelField field = (ModelField) fields.get(i);&lt;br&gt; &lt;br&gt;                 fieldsMap.put(field.name, field);&lt;br&gt;             }&lt;br&gt;    }&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;这个Bug在3.0中已经被修正。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2。UtilCache.get方法同样存在线程安全隐患，会造成LinkedList.remove或者LinedList.addFirst的空值针异常，不注意还会以为是LinkedList的bug。以下是原代码片断：&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    public Object get(Object key) {&lt;br&gt;        if (key == null) {&lt;br&gt;            missCount++;&lt;br&gt;            return null;&lt;br&gt;        }&lt;br&gt;        UtilCache.CacheLine line = (UtilCache.CacheLine) cacheLineTable.get(key);&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;        if (hasExpired(line)) {&lt;br&gt;            // note that print.info in debug.properties cannot be checked through UtilProperties here, it would cause infinite recursion...&lt;br&gt;            // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element has expired with key &amp;quot; + key);&lt;br&gt;            remove(key);&lt;br&gt;            line = null;&lt;br&gt;        }&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;        if (line == null) {&lt;br&gt;            // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element not found with key &amp;quot; + key);&lt;br&gt;            missCount++;&lt;br&gt;            return null;&lt;br&gt;        }&lt;br&gt;        // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element found with key &amp;quot; + key);&lt;br&gt;        hitCount++;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;&lt;font color="#cc3333"&gt;        if (maxSize &amp;gt; 0) {&lt;br&gt;            keyLRUList.remove(key);&lt;br&gt;            keyLRUList.addFirst(key);&lt;br&gt;        }&lt;br&gt;&lt;/font&gt;        return line.getValue();&lt;br&gt;    }&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;红色标准的部分是有问题的代码，修改后的代码如下：&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;    public Object get(Object key) {&lt;br&gt;        if (key == null) {&lt;br&gt;            missCount++;&lt;br&gt;            return null;&lt;br&gt;        }&lt;br&gt;        UtilCache.CacheLine line = (UtilCache.CacheLine) cacheLineTable.get(key);&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;        if (hasExpired(line)) {&lt;br&gt;            // note that print.info in debug.properties cannot be checked through UtilProperties here, it would cause infinite recursion...&lt;br&gt;            // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element has expired with key &amp;quot; + key);&lt;br&gt;            remove(key);&lt;br&gt;            line = null;&lt;br&gt;        }&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;        if (line == null) {&lt;br&gt;            // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element not found with key &amp;quot; + key);&lt;br&gt;            missCount++;&lt;br&gt;            return null;&lt;br&gt;        }&lt;br&gt;        // if (Debug.infoOn()) Debug.logInfo(&amp;quot;Element found with key &amp;quot; + key);&lt;br&gt;        hitCount++;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;        if (maxSize &amp;gt; 0) {&lt;br&gt;            synchronized ( this)&lt;br&gt;            {&lt;br&gt;                 keyLRUList.remove(key);&lt;br&gt;                 keyLRUList.addFirst(key);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        return line.getValue();&lt;br&gt;    }&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0066ff"&gt;&lt;br&gt;&lt;/font&gt;这个BUG在3.0种也修正了。&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+%e7%9b%ae%e5%89%8d%e5%b9%b3%e5%8f%b0%e5%88%9d%e5%a7%8b%e5%8c%96%e4%ba%a7%e7%94%9f%e9%94%99%e8%af%af%e7%9a%84%e5%8e%9f%e5%9b%a0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!118.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!118.entry</guid><pubDate>Fri, 02 Dec 2005 14:18:47 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!118/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!118.entry#comment</wfw:comment><dcterms:modified>2005-12-02T14:18:47Z</dcterms:modified></item><item><title>规范中接口2功能列表</title><link>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!111.entry</link><description>&lt;div&gt;WAPI Process Control Functions  &lt;/div&gt;
&lt;div&gt;===================&lt;/div&gt;
&lt;div&gt;WMFetchProcessDefinition            获取过程定义  &lt;br&gt;WMFetchProcessDefinitionState             获取过程定义状态  &lt;br&gt;WMChangeProcessDefinitionState            改变过程定义状态  &lt;br&gt;WMCreateProcessInstance 创建过程实例  &lt;br&gt;WMStartProcess  开始过程  &lt;br&gt;WMTerminateProcessInstance 终止过程实例  &lt;br&gt;WMFetchProcessInstanceState 获取过程实例状态  &lt;br&gt;WMChangeProcessInstanceState 改变过程实例状态  &lt;br&gt;WMFetchProcessInstanceAttribute 获取过程实例属性  &lt;br&gt;WMGetProcessInstanceAttributeValue 获取过程实例属性值  &lt;br&gt;WMAssignProcessInstanceAttribute 分配过程实例属性  &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;WAPI Activity Control Functions  &lt;br&gt;===================&lt;/div&gt;
&lt;div&gt;WMFetchActivityInstanceState 获取活动实例状态  &lt;br&gt;WMChangeActivityInstanceState 改变活动实例状态  &lt;br&gt;WMFetchActivityInstanceAttribute 获取活动实例属性&lt;br&gt;WMGetActivityInstanceAttributeValue 获取活动实例属性值&lt;br&gt;WMAssignActivityInstanceAttribute 分配活动实例属性&lt;br&gt; &lt;br&gt;WAPI Process Status Functions&lt;/div&gt;
&lt;div&gt;===================&lt;br&gt;WMGetProcessInstance 获取过程实例&lt;br&gt;WMFetchProcessInstance&lt;/div&gt;
&lt;div&gt; &lt;br&gt;&lt;/div&gt;
&lt;div&gt;WAPI Activity Status Functions&lt;br&gt;===================&lt;/div&gt;
&lt;div&gt;WMFetchActivityInstance 获取活动实例&lt;br&gt;WMGetActivityInstance &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;WAPI Worklist Functions&lt;br&gt;===============&lt;/div&gt;
&lt;div&gt;WMGetWorkItem 获取工作项&lt;br&gt;WMGetWorkItemList 获取工作项列表&lt;br&gt;WMCompleteWorkItem 完成工作项&lt;br&gt;WMFetchWorkitemState 获取工作项状态&lt;br&gt;WMChangeWorkitemState 改变工作项状态&lt;br&gt;WMReassignWorkItem 重新分配工作项  &lt;br&gt;WMFetchWorkItemAttribute 获取工作项属性  &lt;br&gt;WMGetWorkItemAttributeValue 获取工作项属性值  &lt;br&gt;WMAssignWorkItemAttribute 分配工作项属性  &lt;/div&gt;
&lt;div&gt;&lt;br&gt; &lt;/div&gt;
&lt;div&gt;WAPI Administration Functions  &lt;br&gt;===================&lt;/div&gt;
&lt;div&gt;WMChangeProcessInstancesState 改变过程实例的状态  &lt;br&gt;WMChangeActivityInstancesState 改变活动实例的状态  &lt;br&gt;WMTerminateProcessInstances 终止过程实例  &lt;br&gt;WMAssignProcessInstancesAttribute 分配过程实例属性  &lt;br&gt;WMAssignActivityInstancesAttribute 分配活动实例属性  &lt;br&gt;WMAbortProcessInstances 取消一组过程实例  &lt;br&gt;WMAbortProcessInstance 取消过程实例 &lt;br&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6279604829903914469&amp;page=RSS%3a+%e8%a7%84%e8%8c%83%e4%b8%ad%e6%8e%a5%e5%8f%a32%e5%8a%9f%e8%83%bd%e5%88%97%e8%a1%a8&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=900way.spaces.live.com&amp;amp;GT1=900way"&gt;</description><comments>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!111.entry#comment</comments><guid isPermaLink="true">http://900way.spaces.live.com/Blog/cns!5725A352704005E5!111.entry</guid><pubDate>Mon, 21 Nov 2005 03:48:48 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://900way.spaces.live.com/blog/cns!5725A352704005E5!111/comments/feed.rss</wfw:commentRss><wfw:comment>http://900way.spaces.live.com/Blog/cns!5725A352704005E5!111.entry#comment</wfw:comment><dcterms:modified>2005-11-21T03:48:48Z</dcterms:modified></item></channel></rss>