﻿<?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-delvin-文章分类-工作流</title><link>http://www.blogjava.net/devin/category/43164.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 16 Jul 2010 07:57:11 GMT</lastBuildDate><pubDate>Fri, 16 Jul 2010 07:57:11 GMT</pubDate><ttl>60</ttl><item><title>任务概念模型-工作流之二 （未完）</title><link>http://www.blogjava.net/devin/articles/326284.html</link><dc:creator>delvin</dc:creator><author>delvin</author><pubDate>Fri, 16 Jul 2010 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/devin/articles/326284.html</guid><wfw:comment>http://www.blogjava.net/devin/comments/326284.html</wfw:comment><comments>http://www.blogjava.net/devin/articles/326284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/devin/comments/commentRss/326284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/devin/services/trackbacks/326284.html</trackback:ping><description><![CDATA[<br />
1.目的和意义<br />
<br />
在实现工作流系统过程中，我们发现工作流系统中如何自动产生任务，如何分派，如何完成，如何和其他任务集成是一个复杂的问题。<br />
<br />
要想能解决这些复杂的问题，没有一个完整的概念模型，在开发过程中就会出现需要的功能彼此冲突，顾得了这个就顾不了那个，程序员就会处于顾此失彼的状态。而这些问题的解决需要在逻辑层面，也就是概念层面，而不能延迟到实现层面，及编码层面。<br />
<br />
有了任务概念模型，我们从模型就可以判断它的处理能力和功能。<br />
<br />
2.任务模型需要考虑的层面<br />
<br />
从<a title="现实任务分析" href="http://www.blogjava.net/devin/articles/306405.html" target="_blank">现实任务分析-工作流系统之一</a> 这篇文章中，我们可以发现，即使一个简单的流程涉及的任务也是很复杂的，需要考虑的方面非常多。我们只有对这些层面进行深入的分析才能设计出一个较好的任务概念模型。<br />
下面我们具体分析任务涉及的各个方面，并提出在模型中如何表达。大体分为：<br />
&nbsp;<br />
&nbsp;任务产生<br />
&nbsp;任务传递<br />
&nbsp;任务状态<br />
任务关系&nbsp; <br />
2.1 任务产生<br />
在现实中任务的产生非常复杂。自己可以给自己创建任务，比如，我想去看刚上映的电影，我就给自己周么设定一个任务，去买电影票。还有些任务是从其他人那儿分派来的，有些任务是有其他任务分拆来的。若在软件系统中，有些任务是本软件系统产生（自动或手工），有些任务是有其他系统产生的。在工作流系统中，经常就遇到工作流系统本身产生的任务和从其他系统创建的任务问题，而客户希望在他的任务列表都一样的显示出来，并能处理。<br />
&nbsp;通过上面简单的描述，我们应该能感觉到任务产生的复杂性。为了对任务产生进行抽象，我们引入两个概念，任务来源和任务产生方式。<br />
任务来源用来表达任务是从哪里来的，比如来自工作流系统，来自张三，来自行政部。任务来源不限于就是人。在现实中，我们经常遇到某个部门的人给你下达任务，这个任务虽然是那个具体的人给你下达的，但实际上应该属于那个部门下达的，即使没有他，其他人在那个岗位也会下达，那个人只是一个代理人，毕竟部门不能说话。<br />
任务产生方式表达任务是怎么产生的，这个已经有点考虑到软件系统了。在现实中，没有什么手工和自动产生任务的区分。这种区分是把任务处理引入软件系统以后的事。 
  <img src ="http://www.blogjava.net/devin/aggbug/326284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/devin/" target="_blank">delvin</a> 2010-07-16 11:47 <a href="http://www.blogjava.net/devin/articles/326284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>现实任务分析-工作流之一</title><link>http://www.blogjava.net/devin/articles/306405.html</link><dc:creator>delvin</dc:creator><author>delvin</author><pubDate>Wed, 14 Jul 2010 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/devin/articles/306405.html</guid><wfw:comment>http://www.blogjava.net/devin/comments/306405.html</wfw:comment><comments>http://www.blogjava.net/devin/articles/306405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/devin/comments/commentRss/306405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/devin/services/trackbacks/306405.html</trackback:ping><description><![CDATA[按:从2004年到2006年,本人一直在一家公司参与开发支持XPDL规范的工作流管理系统。由于各方面的原因，产品最终没有向市场发布，只是内部使用。2006年底，团队解散，团队成员都相继离开公司。从2007年到现在，就没有怎么做过工作的东西，但以前困扰的问题，还时时在折磨着我。为此我准备抽时间把以前对工作流的一点思考写下来或重新整理下。<br />
<br />
1.前言<br />
1.1 为什么需要分析现实任务执行<br />
&nbsp; 1）规范对国内的人工参与的流程关注不够<br />
在分析XPDL和其他规范时，发现这些规范大多数都是关注于国外的情况，就是比较关注流程自动化，对国内经常要求的那种人工干预和自由流等场景不大关注。你可以说国内客户把工作流用偏了，假若你站在国外的情况，但我们也可以这样来看，国内的这样情况，是不是工作流新发展的一个动力，是工作流从不成熟到成熟的一个阶段。总之，关注客户的需求，比规范本身重要，不管是国外客户或是国内客户，客户需求是技术法中的永恒动力。<br />
&nbsp; 2）对工作流类任务和其他任务认识不清<br />
1.2 目的<br />
&nbsp;&nbsp; 设法分析现实任务类型和执行情况，为设计任务模型做理论准备。<br />
<br />
2.内容<br />
&nbsp;<span style="font-family: 宋体">现实中任务执行情况非常复杂</span>,<span style="font-family: 宋体">我们有必要对现实的复杂情况进行分析，在分析的基础上抽象成几种基本情况</span><span style="font-family: 宋体">，其他的复杂情况可有这些基本情况组合而成。最好能拿出一个面向对象的任务执行模型（最好用</span>UML<span style="font-family: 宋体">表达）为我们的工作流工作项处理作准备。在实现时再分析一下那些现实的处理情况可以支持</span>,<span style="font-family: 宋体">那些情况不能支持</span>,<span style="font-family: 宋体">对不能支持的情况要说明情况</span>(<span style="font-family: 宋体">现实分析不清</span>, <span style="font-family: 宋体">工作项处理模型不能表达现实情况</span>,<span style="font-family: 宋体">模型能表达但没时间</span>, <span style="font-family: 宋体">其他原因</span>)<span style="font-family: 宋体">。</span>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">为分析现实情况</span>,<span style="font-family: 宋体">让我们用</span>case<span style="font-family: 宋体">的方式来分析，重点关注任务执行情况。为了分析的真实性，我重点分析了一个真实的转正流程（注：考虑了隐私，我隐去具体公司的名字和人名），下表是转正流程的图示表示，该图可能没有表示此流程的所有内容，若分析需要我可能加一点东西来满足现实的需要，我们尽量严格遵循现实流程的运行情况，不考虑权限控制等实现问题，侧重控制流程的运转和任务产生，分派等）：</span></p>
<p style="line-height: 150%" class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 'Times New Roman', 'serif'; font-size: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span>&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/devin/zhuanzheng2.gif" width="606" height="391" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图</span> 1 XX<span style="font-family: 宋体">公司员工转正申请</span></p>
<p style="line-height: 150%" class="MsoNormal"><br />
1 <span style="font-family: 宋体">直接完成任务</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">定义：任务接受者完成任务。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX转正流程）张三在XX公司实习了三个月，文秘发送转正资料给张三（文秘发送转正资料就相当于启动一个转正流程实例，现实中并没有流程实例创建的概念，都是隐含的），此时该转正流程走到填写转正申请，张三有了一个任务，填写转正申请；张三在规定时间内填写转正申请，完成该任务，流程到达初审活动。</span></p>
<p style="line-height: 150%" class="MsoNormal">2 <span style="font-family: 宋体">暂停某项任务</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">暂停某项任务又分几种情况（可能不全）</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">情况</span>1 <span style="font-family: 宋体">：</span><span style="font-family: 宋体">暂停某项任务，不限定时间，在该任务未超时的情况下，可以随时继续。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到复审这一步，部门经理有一项任务，复审张三的转正申请，但部门经理因有事要出差（多长时间不能确定），只能暂停复审任务，等到有时间再复审。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">情况二：</span><span style="font-family: 宋体">暂停某项任务一段时间</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到复审这一步，部门经理有一项任务，复审张三的转正申请，但宋刚因有事要出差（时间为一个星期），只能暂停复审任务一个星期，等过了一个星期，复审继续。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">情况三</span><span style="font-family: 宋体">：暂停某项任务，具体时间不知道，但重新开始的条件知道</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到答辩这一步，答辩委员会成员（部室主任，部门经理，文秘）和答辩人吴红军都有一项任务，参加答辩会，但是部门经理有事要出差，不能参加，所有人的任务都处于暂停，部门经理的情况属于情况一，其他人的任务继续的条件是部门经理回来，他的任务重新开始。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">此处有一个问题（对参加答辩会的产生的任务看法问题）：</span><span style="font-family: 宋体">把参加答辩会是看作一个任务，有多人协作完成，还是看作多个任务，还是既看作一个任务，也看作多个任务。现实情况好象有一个隐含视角问题，从公司的角度（</span>top-level ,<span style="font-family: 宋体">不限于是公司）来看答辩会是一个任务，很可能郭安艳代表公司在公司日程上有一条答辩会条目（相当于待办任务），从个人来说，每人都有一个任务，现实中，他们很可能每人都在自己的待办事宜内记录一条参加答辩会的条目（相当于待办工作项）。</span></p>
<p style="line-height: 150%" class="MsoNormal">3 <span style="font-family: 宋体">拒绝某项任务（不考虑原因）</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（精论软件转正流程）吴红军转正流程走到答辩这一步，答辩委员会成员（部室主任，部门经理，文秘）和答辩人张三都有一项任务，参加答辩会，因为部室主任正在准备电力</span>ppt<span style="font-family: 宋体">，不想参加，他就发消息给部门经理不想参加（实质上就是拒绝此任务），部门经理就召集其他的人开答辩会（此处又涉及对拒绝任务的处理）。</span></p>
<p style="line-height: 150%" class="MsoNormal">4 <span style="font-family: 宋体">终止（取消，结束）某项任务</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到答辩这一步，答辩委员会成员（部室主任，部门经理，文秘）和答辩人张三都有一项任务，参加答辩会，因为不知道什么原因，张三突然离开公司（假设情况），以上任务只能终止，实际上整个流程只能终止（此处涉及到一个任务结束对活动和流程的影响，但不在此处祥解）。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体"><span style="color: red"><span style="font-family: 宋体">注</span></span>：在现实世界，终止，结束和取消的含义差不多，我们在现实生活中可以经常不加区分的使用这些词，不过在软件世界这些词需要区别对待，具体区别有待在软件产品分析中定义，主要是精确区分对资源的销毁和回收情况。</span></p>
<p style="line-height: 150%" class="MsoNormal">5 <span style="font-family: 宋体">指派/分派某项任务</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">指派任务的情况本身也非常复杂，以下把暂时能想到的情况列一下：</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">情况一：把自己的任务指派给他人</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到答辩这一步，答辩委员会成员（部室主任，部门经理，文秘）和张三都有一项任务，参加答辩会，因为部室主任正在准备一个竞标书</span><span style="font-family: 宋体">，不想参加，他就指派另外一个人（被委托人）代表他参加答辩会，这样部室主任的任务就变成了被委托人的任务。<br />
分析：此处假定任务能被重新指派给他人。在现实中，有些任务可以重新指派给他人，但有些任务就不可以，比如涉及某些需要签署法律效应的文件就不可以。在现实世界，一般也没有详细定义那些可以，那些不可以，人们基本随机或按某种隐性规则处理。但若要在软件领域处理此类情况，就需要精确定义，而要精确定义之前，就需要分析现实情况，并进行抽象建模。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">情况二：部门领导（主管等等）把本部门的任务指派给具体的员工。</span></p>
<p style="line-height: 150%" class="MsoNormal"><span style="font-family: 宋体">例子：（XX公司转正流程）张三转正流程走到答辩这一步，部门经理指派答辩委员1和答辩委员2参加答辩会。</span></p>
<p><span style="font-family: 宋体">以上只是对现实中各种可能情况的描述（注：不够全面，仅侧重于参与者</span>[<span style="font-family: 宋体">执行者</span>]<span style="font-family: 宋体">是人的情况），并不是合理的抽象，（暂时不知道如何抽象好）不知你有什么看法？</span></p>
<br />
<br />
<br />
<br />
<br />
   <img src ="http://www.blogjava.net/devin/aggbug/306405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/devin/" target="_blank">delvin</a> 2010-07-14 16:48 <a href="http://www.blogjava.net/devin/articles/306405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>