﻿<?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>博客园-蓝色的天空，朵朵的白云</title><link>http://www.cnblogs.com/llxxbb/</link><description>一个理想翱翔的地方</description><language>zh-cn</language><lastBuildDate>Mon, 13 Oct 2008 10:19:31 GMT</lastBuildDate><pubDate>Mon, 13 Oct 2008 10:19:31 GMT</pubDate><ttl>60</ttl><item><title>平台架构--用户系统</title><link>http://www.cnblogs.com/llxxbb/archive/2008/04/21/Platform_UserSystem.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Mon, 21 Apr 2008 02:19:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/04/21/Platform_UserSystem.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1163434.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/04/21/Platform_UserSystem.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1163434.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1163434.html</trackback:ping><description><![CDATA[摘要: 为什么要做用户系统 <br>几乎每个应用都会用到用户系统。如果能够进行通用化，自然是一种很快意的事了。然而到目前为止我还没有找到一个让我满意的类似的东西。不是说它们不够好，而在于它们不能满足管理和部署上的可伸缩性、灵活性及与现有应用的可集成性上，所以只好自己做了一个。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2008/04/21/Platform_UserSystem.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/1163434.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42969/" target="_blank">[新闻]MySpace推自助广告平台MyAds</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>平台架构——体系结构</title><link>http://www.cnblogs.com/llxxbb/archive/2008/03/24/Platform_1.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Mon, 24 Mar 2008 01:12:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/03/24/Platform_1.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1119131.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/03/24/Platform_1.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1119131.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1119131.html</trackback:ping><description><![CDATA[摘要:     在”项目à产品à平台我的编程人生“中大体说明了一下我在一个什么样的需求环境下要搭建一个平台，及要建成一个什么样的平台之后，本文将着重讲一下这个平台的体系结构，及设计要点。有下面的内容：<br>l  设计要点<br><br>Ø  应用与Web Service(简称WS)分离。<br><br>Ø  数据库与WS分离<br><br>Ø  应用集成<br><br>l  结构说明<br><br>Ø  简化的应用调用接口<br><br>Ø  重点模块说明<br><br>Ø  心血的结晶<br><br>l  接下来的文章<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2008/03/24/Platform_1.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/1119131.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42960/" target="_blank">[新闻]Facebook创始人:信息共享或存摩尔定律</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>”博客园博客程序架构设计图初稿”----改版慎重！</title><link>http://www.cnblogs.com/llxxbb/archive/2008/03/21/1115980.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Fri, 21 Mar 2008 03:08:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/03/21/1115980.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1115980.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/03/21/1115980.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1115980.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1115980.html</trackback:ping><description><![CDATA[&nbsp; <span style="font-family: 宋体">对于</span>dudu<span style="font-family: 宋体">的</span>&#8221;<span style="font-size: 10pt; font-family: 'Verdana','sans-serif'"><a href="http://www.cnblogs.com/dudu/archive/2008/03/20/1114330.html"><span style="font-family: 宋体">博客园博客程序架构设计图初稿</span></a>&#8221;</span><span style="font-size: 10pt; font-family: 宋体">我</span><span style="font-family: 宋体">有一些想法，之所以不跟在该文章后面评论，主要是因为我感觉十分重要，还望</span>dudu<span style="font-family: 宋体">体谅。有下面几方面的内容：</span>
<p><span style="font-family: 宋体">用户体验及内容服务是最重要的，</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">做为博客园的用户，最想知道和最关心的是改版后与改版前有什么使用上的不同，增加了那些新内容。如果这次改版对用户来讲没有什么新的体验，只是就目前的架构进行一下重新整理，我还是建议不要这么做。在决定改版之前发一正式的文以征集一下用户对使用博客园的一些想法，这可以为新版本注入新的思路。</span></p>
<p><span style="font-family: 宋体">设计的可对比性</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">新版本的</span>`<span style="font-family: 宋体">草图是看到了，然而有想茫然，因为不知道老版本的架构是什么样的，没有对比性，所以不知道哪些是改进的，那些是已经有的；现在哪些地方是不合理的，以及要改成什么样的。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">博客园这么大一个滩子，工作量是巨大的，我想一次改成是非常困难的事情，需要有一个迭代的计划才行。哪些先改，哪些后改，根据用户的需要来一个优先级排列。</span></p>
<p><span style="font-family: 宋体">新旧版本的衔接性</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">有几个方面的衔接：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">用户体验上的衔接。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">原有架构和新架构的衔接性。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">在新版本未出来之前，新功能的添加是否和新架构同步进行？</span></p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">这些都是要认真考虑的问题</span>.</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">看</span>dudu<span style="font-family: 宋体">的想法大有推倒重来的意思。这种气度令人佩服。既然公布设计草图旨在听取大家的意见，最好再把上面提到的问题让大家一起来讨论一下。说心理话我可不想在等了好久之后看到一个很&#8220;陌生&#8221;的新版博客园。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">祝博客园走好！</span></p>
<img src ="http://www.cnblogs.com/llxxbb/aggbug/1115980.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42959/" target="_blank">[新闻]微软承认Vista用户账户控制功能有问题</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>“项目产品平台”我的编程人生</title><link>http://www.cnblogs.com/llxxbb/archive/2008/03/18/MyProgramRoad.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Tue, 18 Mar 2008 01:47:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/03/18/MyProgramRoad.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1110983.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/03/18/MyProgramRoad.html#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1110983.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1110983.html</trackback:ping><description><![CDATA[摘要:         如果您认为这篇文章主要讲“我”的人生经历，那就错了，我很少写感慨之类的文章。没有哗众取宠的意思，只是想说我是如何走上架构这条路的，以及架构的心得，并讲述我目前正在结构的内容。也为以后的文章做一个铺垫。<br><br>         主要讲下面的几件事情：<br><br>项目à产品à平台的经过<br><br>架构心得<br><br>现在的架构内容<br><br>架构的完美性<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2008/03/18/MyProgramRoad.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/1110983.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42958/" target="_blank">[新闻]资本寒冬侵袭中国视频网站 营销春天或不远</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>业务工作流平台设计(九)</title><link>http://www.cnblogs.com/llxxbb/archive/2007/06/25/BusinnessProcessPlatform9.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Mon, 25 Jun 2007 02:14:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/06/25/BusinnessProcessPlatform9.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/794574.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/06/25/BusinnessProcessPlatform9.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/794574.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/794574.html</trackback:ping><description><![CDATA[<h3 style="page-break-after: auto;"><span style="font-family: 宋体;">自定义审核活动</span></h3>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">前面已经讲了许多有关自定义活动在设计上需要注意的一些事项，但对于自定义审核活动来讲，我们的设计还要有许多工作要进行。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">为了简化用户的流程上的设计将流程的一些算法封装到自定义活动中可以大大增加自定义活动的使用的方便性。其直接的效果是从数十个活动减少到三四个，当然这只是针对电台文稿审核来讲的。而且基本上从根本上杜绝了</span><span lang="EN-US">IFELSE</span><span style="font-family: 宋体;">、</span><span lang="EN-US">WHILE</span><span style="font-family: 宋体;">等活动的使用，这可将用户<span style="color: red;">条件编辑</span>的复杂度降为</span><span lang="EN-US">0</span><span style="font-family: 宋体;">！这种设计所带来的另一个好处就是外界应用和工作流交互的灵活性。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">可能看过本系列文章中的第一篇的都还有些印象，那里面描述了新闻文稿审核的一些用户需求，如果不太清楚，大家不妨回头看一下，这里不多讲。</span></p>
<h4><span style="font-family: 宋体;">审核活动的两种计算模式：</span></h4>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">人员数量要求。某一条件必须要有一定人员数量的参与要求。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">权重值和要求。当某一条件的参与人员的权重值之和要达到某一数值。</span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-family: 宋体;">两种模式中只能在一个活动实例中选择一种模式进行使用，</span></p>
<h4><span style="font-family: 宋体;">每种计算模式又都有下面三种类型的载体。</span></h4>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">角色：可指定多个角色，</span> <span style="font-family: 宋体;">且如果在权重值和模式下角色中的每个人的权重值应来源于角色的权重值。或在人员数量要求模式下可以指定总的人员数量要求及每个角色的人员数量要求。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">人员：可指定参与的人员列表，可有人员数量要求或权重值要求。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">用户组：和角色的要求类似</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">每种计算模式中只能使用一种载体，</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">在现实情况下这些已经足够了。其它许多复杂的情况都可以分解为多个简单的活动实例来处理；这样在程序逻辑和业务管理上都是相对简单和高效的。</span></p>
<h4><span style="font-family: 宋体;">自定义审核活动有三个条件：</span></h4>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">通过条件：满足该条件后，活动便可顺利执行完成。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">回退条件：满足该条件后，该过程处理起来有一点复杂，下面会讲。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">不通过条件：满足该条件后，则立即结束</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例的运行，并从数据库中进行清除。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">有人担心这三个条件会在运行时，同时满足。情况有可能是这样的，这主要是因为处理过程中没有锁定和保持状态的一致性所引起的。这个锁定不是简单的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例加载时的锁定，而是用于活动处理的数据收集同</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例的联合锁定及状态持久化。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">关于用户数据的收集同实例的运行进行分离并放在同一事务中保持状态的一致性及运用锁定机制和尽量减少锁定时间等话题请参阅前面的文章。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="color: red;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">但是还是会有糟糕的事情发生，那就是所有的条件都不可能满足！这不是程序逻辑的功能所引起的问题，而是业务逻辑的问题。这种问题是程序无法去控制的。举个例子：如在设计时要求的人员数量大于实际的人员数量就会发生这种问题。</span></p>
<h4><span style="font-family: 宋体;">有关用户系统中的数据</span></h4>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">首先我不喜欢这里所谈的问题，它涉及到自定义审核活动的通用性。自定义审核活动在设计时需要指定上面所讲的一系列属性。对于计算模式和三个条件设置来讲是比较简单的，问题出在载体上。&#8220;用户、用户组、角色&#8221;这些数据的存储与提取会因具体应用而有所不同；包括运行时审核数据的提取都是一个紧耦合的问题。如果要进行松耦合，这里必须要进行相应的映射和转换处理才可以。这会对部署和二次开发带来额外的要求！</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">但这是值得的，为此我们需要强制定义数据的形态（：）类型）以接收标准的数据（相对于自定义审核活动来讲）。而由应用来做数据的提取与转换。需要说明的是，仅&#8220;用户、用户组、角色&#8221;的定义还是不够的，在运行时我们还需要把用户的审核信息也必须加以定义才可以。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h4><span style="font-family: 宋体;">对实例进行监视及警告</span></h4>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">我们不能要求用户所设计的业务逻辑是没有问题的，我们也无法去阻止这种错误的发生，但我们应该有一个监视机制来提醒用户那些</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例已经好久没有处理了。可以用</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">自带的</span><span lang="EN-US">Track&amp;Trace</span><span style="font-family: 宋体;">来实现记录</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例运行的细节。但个人认为那样会产生很多的无用数据，而且要进行清理维护操作。其实有一种更简捷的方法来找出这些停滞了的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例：用户审核数据。这些数据包括用户信息，用户的审核意见及所对应的</span><span style="color: red;" lang="EN-US">WF</span><span style="font-family: 宋体; color: red;">设计</span><span style="color: red;" lang="EN-US">ID</span><span style="font-family: 宋体; color: red;">和自定义审核活动</span><span style="color: red;" lang="EN-US">ID</span><span style="font-family: 宋体; color: red;">（需要单独的表来维系</span><span style="color: red;" lang="EN-US">WF</span><span style="font-family: 宋体; color: red;">设计</span><span style="color: red;" lang="EN-US">ID</span><span style="font-family: 宋体; color: red;">和自定义审核活动</span><span style="color: red;" lang="EN-US">ID</span><span style="font-family: 宋体; color: red;">与审核数据的关系）</span><span style="font-family: 宋体;">。利用这些数据做一个查询窗口就可以找到&#8220;死掉&#8221;的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例。并给用户提供一个真正杀死</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例的机会。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<h4><span lang="EN-US">Level</span><span style="font-family: 宋体;">变量</span></h4>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">这是自定义审核活动的一个公共变量，这个变量具有重要意义，<span style="color: red;">它是实现回退处理、再提交、跨审的关键点</span>。如何利用</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">变量去实现这些功能先放一下。为了便于后面的理解，先讲一下</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">的规则。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">每一个自定义审核活动都有一个</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">变量。且在设计时，进行指定。</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">的值必须是一个整数值。后一个活动实例的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值必须是前一个活动</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值与</span><span lang="EN-US">1</span><span style="font-family: 宋体;">的和。我们必须在</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">设计时进行这种</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值的验证，否则上一段所提到的要实现的功能将无法正常工作！</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">在自定义审核活动之外我们还需要维系一个关系表，这个表包含下面的主要信息：</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例</span><span lang="EN-US">ID</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">下一个自定义审核活动的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值，会将该值传递给</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例中的</span><span lang="EN-US">CurrentLevel</span><span style="font-family: 宋体;">变量。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">工件</span><span lang="EN-US">ID</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体; color: red;">记住，</span><span style="color: red;" lang="EN-US">WF</span><span style="font-family: 宋体; color: red;">设计图里面没有</span><span style="color: red;" lang="EN-US">IFELSE</span><span style="font-family: 宋体; color: red;">、</span><span style="color: red;" lang="EN-US">WHILE</span><span style="font-family: 宋体; color: red;">和其它非自定义审核活动</span><span style="font-family: 宋体;">。有了这张表会方便提取针对某一用户所需要运行的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例列表。</span></p>
<h4><span style="font-family: 宋体;">回退处理与再提交</span></h4>
<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">WF</span><span style="font-family: 宋体;">自定义审核活动实例在运行过程中如果发现满足了回退条件，则活动会创建一个新的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例并将</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">的值减</span><span lang="EN-US">1</span><span style="font-family: 宋体;">赋给新的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例并结束清除当前</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例。不过这里有一个前提条件：只有所在的活动位于第二层或以上，才可以有回退的功能。这样处理后，前一级已经审核处理过的人员就又可以再次进行审核操作了。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">这里有以下几个设计要点：</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">回退会<span style="color: red;">创建新的</span></span><span style="color: red;" lang="EN-US">WF</span><span style="font-family: 宋体; color: red;">实例</span><span style="font-family: 宋体;">。这可能是大家都没有想到的事情，其实这就是利用</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">属性来简化这种</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">设计时的工作精髓所在。从而使设计者不去关心如何在设计界面上&#8220;画出&#8221;各层之间的复杂的流转关系；而只是关心有几层，并在每层上设计相关的属性便可以了。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">用户的审核数据必须区分不同</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例，而不是用稿件进行区分。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-family: 宋体;">一个稿件可以有多个</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例与之关联</span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: 21pt;"><span style="font-family: 宋体;">有人可能存在疑虑，一个</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例被分成多次运行会造成数据的切割现象，其实这个问题可以这样来理解。我们用</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">的目的是用它的流程&#8220;控制&#8221;而不是去注重&#8220;数据的连续&#8221;，数据的连续性其实已经由用户审核数据实现了，所以可以不必关心跨多个</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例的问题。</span></p>
<h4><span style="font-family: 宋体;">跨审的实现</span></h4>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">跨审的实现也是借助于</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">属性值来工作的。只要所对应的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值高的用户就可以提调比当前自定义审核活动</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值低的</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例来运行。只是在运行时将其</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">的值设置成该用户所对应的活动的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值便可以了。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">自定义审核活动有这么一个逻辑处理：如果当前</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">实例的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值大于当前活动的</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值则该活动直接运行完毕，以过渡到下一个活动中去；直到</span><span lang="EN-US">Level</span><span style="font-family: 宋体;">值相等时再进行审核的业务操作。</span></p>
<h4><span style="font-family: 宋体;">自定义审核活动与外界数据的交换</span></h4>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Level</span><span style="font-family: 宋体;">是如何被改变的，这可能是大家关心的问题。在这里我们有多种方案可进行选择。</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10pt; font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-size: 10pt; font-family: 宋体;">静态成员的访问：我们可以把要交换的数据放到一个静态成员变量中。</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10pt; font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">AddService</span><span style="font-size: 10pt; font-family: 宋体;">：</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">WFRunTime</span><span style="font-size: 10pt; font-family: 宋体;">（对不起，我简写了）和</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Host</span><span style="font-size: 10pt; font-family: 宋体;">是运行在两个不同的线程中的。但</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">WFRunTime</span><span style="font-size: 10pt; font-family: 宋体;">有一个</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">AddService</span><span style="font-size: 10pt; font-family: 宋体;">的函数可以把</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">Host</span><span style="font-size: 10pt; font-family: 宋体;">中的任何东西加入到</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">WF</span><span style="font-size: 10pt; font-family: 宋体;">所在环境中去。这样</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">WF</span><span style="font-size: 10pt; font-family: 宋体;">实例可以通过</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">GetService</span><span style="font-size: 10pt; font-family: 宋体;">来得到该对象。</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10pt; font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="font-size: 10pt; font-family: 宋体;">创建实例时指定参数：这个方法只能在创建时进行参数的传递，但对于多次加载的</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US">WF</span><span style="font-size: 10pt; font-family: 宋体;">实例是无法重新指定这些参数的。</span><span style="font-size: 10pt; font-family: &quot;verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-size: 10pt; font-family: wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span lang="EN-US">communication services interfaces</span><span style="font-family: 宋体;">：这是</span><span lang="EN-US">WF SDK</span><span style="font-family: 宋体;">里面的东西。主要用于事件和方法，所以最好不要用。</span><span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: 21pt;"><span style="font-size: 10pt; font-family: 宋体;">对于</span><span style="font-size: 10pt;" lang="EN-US">Level</span><span style="font-size: 10pt; font-family: 宋体;">来讲回退里可用指定的</span><span style="font-size: 10pt;" lang="EN-US">Level</span><span style="font-size: 10pt; font-family: 宋体;">来创建新的</span><span style="font-size: 10pt;" lang="EN-US">WF</span><span style="font-size: 10pt; font-family: 宋体;">实例；对于跨审和其它情况来讲，则在实例运行前利用第一、二两点的任何一种方法对其实例的</span><span style="font-size: 10pt;" lang="EN-US">Level</span><span style="font-size: 10pt; font-family: 宋体;">进行赋值，然后再运行。</span><span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></p>
<h4><span style="font-family: 宋体;">其它问题</span></h4>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">就现在的情况来看，用户在设计时不需要复杂的设计就可以定制一个&#8220;复杂&#8221;的审核处理流程。包括逐级递审，回退、跨审等。但这都是人为干预的审核，对于自动审核来讲还是不完善的。自动审核（不是智能审核稿件内容）是指在一定时间内如果没有人为给出审核意见，则自动递交到下一个审核层次上去。这样我们就会相中</span><span lang="EN-US">Delay</span><span style="font-family: 宋体;">活动。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">如果用</span><span lang="EN-US">Delay</span><span style="font-family: 宋体;">就会用到</span><span lang="EN-US">Listen</span><span style="font-family: 宋体;">。这会带来一个新的问题！我们的自定义活动必须要有接受外界触发的能力才可以将</span><span lang="EN-US">Delay</span><span style="font-family: 宋体;">和我们的审核活动放到</span><span lang="EN-US">Listen</span><span style="font-family: 宋体;">中去。如何做？真是两难的选择！我们如果扩展了</span><span lang="EN-US"><a href="ms-help://MS.MSSDK.1033/MS.NETFX30SDK.1033/cpref36/html/T_System_Workflow_ComponentModel_IActivityEventListener%601.htm"><span style="color: windowtext; text-decoration: none;">IActivityEventListener</span></a></span><span style="font-family: 宋体;">接口，那么我们的审核活动的使用模式便会进行改变！！我不做结论，但<span style="color: red;">很想听一下读者的意见</span>。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">写到这里，该结束了。回头看看不觉有些惭愧，平台的东西太少，模板的东西太多。本来还想写一下</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">与工件的维护框架，</span><span lang="EN-US">WF</span><span style="font-family: 宋体;">设计管理框架。现在看来相对简单，就不写了。如果有什么问题，只要不是基础性的问题，我还是很愿意和大家一起讨论的。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">完&#8230;&#8230;。</span></p><img src ="http://www.cnblogs.com/llxxbb/aggbug/794574.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42957/" target="_blank">[新闻]金融风暴波及全球创业板 中国概念股难独善其身</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>业务工作流平台设计(八)</title><link>http://www.cnblogs.com/llxxbb/archive/2007/06/11/BusinnessProcessPlatform8.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Mon, 11 Jun 2007 01:17:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/06/11/BusinnessProcessPlatform8.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/778748.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/06/11/BusinnessProcessPlatform8.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/778748.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/778748.html</trackback:ping><description><![CDATA[摘要: 自定义活动(五)<br>中止活动的运行<br><br>无论用停止、放弃、中止或中断等之类的这些词都不能很直接地表达我这里所表达的意思！这是目前为止我遇到的封装业务逻辑到自定义活动的最大障碍；因为就自定义审核活动来讲，用户所设计的工作流中每一个活动可能被多次执行。例如需要多个人参与同一个层次的审核，当条件不满足是便“停止”运行，然后等待下一个用户来输入用于计算的基础数据，并重新执行该逻辑，直到条件满足该活动执行完毕并过渡到下一个活动为止。需要特别说明一下，这里的自定义活动的逻辑包含了基础数据的读取，条件的判断及是否往下执行、原地等待还是回退的处理，而不是用一大堆WF预置的活动来支持，全部功能都封装于一个活动之内；另外这里不对回退进行说明，有关回退的内容请看后续的文章。<br><br>在WF的SDK中有一个很关键的术语“persistence point”，它决定了下次加载时WF实例开始运行的点。我将用这个词语来解释一些问题，让我们来看一下它在我们“中断”工作流中所产生的影响！<br>……<br>至此同一个活动可重复执行的问题得到了解决。至此自定义活动的话题也将结束。下面将针&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2007/06/11/BusinnessProcessPlatform8.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/778748.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42956/" target="_blank">[新闻]携程范敏：CEO从接发传真做起</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>业务工作流平台设计(七)</title><link>http://www.cnblogs.com/llxxbb/archive/2007/06/05/BusinnessProcessPlatform7.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Tue, 05 Jun 2007 00:59:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/06/05/BusinnessProcessPlatform7.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/771504.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/06/05/BusinnessProcessPlatform7.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/771504.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/771504.html</trackback:ping><description><![CDATA[<br>
<h3 style="PAGE-BREAK-AFTER: auto"><span style="FONT-FAMILY: 宋体">自定义活动</span><span lang=EN-US>(</span><span style="FONT-FAMILY: 宋体">四</span><span lang=EN-US>)</span></h3>
<h4 style="PAGE-BREAK-AFTER: auto"><span style="FONT-FAMILY: 宋体">保持状态的一致性及完整性</span></h4>
<p class=MsoNormal style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">上一节讲过，要完成一个审核活动所要处理的数据有下面的内容</span></p>
<p class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span lang=EN-US style="FONT-FAMILY: wingdings"><span>l</span></span><span style="FONT-FAMILY: 宋体">工件进行编辑并进行保存</span></p>
<p class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span lang=EN-US style="FONT-FAMILY: wingdings"><span>l</span></span><span style="FONT-FAMILY: 宋体">记录工件的审核情况</span></p>
<p class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span lang=EN-US style="FONT-FAMILY: wingdings"><span>l</span></span><span style="FONT-FAMILY: 宋体">运行完后保存</span><span lang=EN-US>WF</span><span style="FONT-FAMILY: 宋体">实例的状态</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">通过上面我们可以看到在工作流活动运行之外我们还进行了一些数据的操作，就自定义审核活动来讲，在</span><span lang=EN-US><a href="http://www.cnblogs.com/llxxbb/archive/2007/01/22/WWFApply2.html"><strong><span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Verdana','sans-serif'">WWF</span></strong><strong><span lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 宋体"><span lang=EN-US>的一些技术细节与应用体会（二）</span></span></strong></a></span><span style="FONT-FAMILY: 宋体">中我提到过活动执行的完整性及一些实现方法，在这里是用不上的，因为我们的部分数据在工作流之外进行了处理。我们必须在工作流运行环境之外提供一个将数据的收集、工件的编辑及活动运行后</span><span lang=EN-US>WF</span><span style="FONT-FAMILY: 宋体">实例的持久化放在同一事务中。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">另在开发自定义审核活动时我们需要指定</span><span lang=EN-US>PersistOnClose</span><span style="FONT-FAMILY: 宋体">属性。否则这个状态将不会被记录。这个属性非常关键！我们只希望在活动运行完成时自动进行持久化以便使工作流过渡到下一个活动中去。但将条件不满足时，放弃运行（不是中止！）。这对数据的状态一致性也非常重要。</span> <br>&nbsp;&nbsp;&nbsp; 待续&#8230;&#8230;<br></p>
<img src ="http://www.cnblogs.com/llxxbb/aggbug/771504.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42955/" target="_blank">[新闻]2008年10月13日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>看” 关于技术人员创业的讨论”有感</title><link>http://www.cnblogs.com/llxxbb/archive/2007/06/01/Pioneer.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Fri, 01 Jun 2007 00:35:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/06/01/Pioneer.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/767139.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/06/01/Pioneer.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/767139.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/767139.html</trackback:ping><description><![CDATA[摘要:     dudu的“关于技术人员创业的讨论”的帖子已经有些时日了，早就有一些想法，直到今天才写下此文。也不知大家的热潮过去了没有。不是故作文章，只是这些年来，自己也处在这样的尴尬局面，很是不舒服，所以写下此文，以舒心情。<br>    技术人员的局限性已经提了很多，就不提了，这与他们（也指我自己）的思维方式有关。但还是有许多人创业成功了。有人说机遇也罢，有人说能力也罢，我感觉要想成就一帆事业，天时、地利、人和、自身的努力对于技术人员来讲缺一不可。<br>    设想一下，我们即要有商业的头脑，又要有技术天分。这样的人不多？有人说了，我就是，我不反对，确实有这样的人，但他们如果进行了创业，我想还是转型的多：）。那么这里引申出一个问题？现在想创业的技术人员在创业后是否还会坚持做技术？坚持多长时间？如果答案是否定的，那么就是以技术为跳板进行创业。这样这个讨论“技术人员创业”的意义也就不大了，因为他具有商业经营的素质！<br>……<br>    总之，对于创业来讲，关键的问题是在环境允许的情况下自己是否具有了创业的素质，技术或许有些局限，或许是一个有利的跳板，在我看来是后者。就说这些吧&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2007/06/01/Pioneer.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/767139.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42954/" target="_blank">[新闻]Google Android手机大受欢迎,已经订出150万台</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>业务工作流平台设计(六)</title><link>http://www.cnblogs.com/llxxbb/archive/2007/05/29/BusinnessProcessPlatform6.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Tue, 29 May 2007 01:00:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/05/29/BusinnessProcessPlatform6.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/763411.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/05/29/BusinnessProcessPlatform6.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/763411.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/763411.html</trackback:ping><description><![CDATA[摘要: 自定义活动(三)<br>锁定处理<br>在前面的文章我已经讲过，把用户数据的收集同工作流实例中分离出来。数据的存储也就很可能地进行了分离。这种数据的分离会要求我们去做更多的工作：<br>l  维护工件（如稿件，任务等要在工作流中进行加工的东西）与工作流实例的关系。我们用WF自带的SqlWorkflowPersistenceService来完成工作流实例的存储。那么工件、工件与WF实例的关系及相关的处理情况应交给应用系统来维护。有关这方面的内容请看后面的“工作流的工件维护框架”。<br>l  保持工件与WF实例的状态一致性。这部分的解决请后后面的有关“状态一致性”的话题。<br>l  独占式处理。这是本节的重点内容。<br>独占式处理，其实处理过程很简单，就是在处理时对数据加把锁，就象进厕所把门锁上一样：）。这里不讲怎样去加锁，而是讲对哪些数据进行加锁以及何时进行加锁。&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2007/05/29/BusinnessProcessPlatform6.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/763411.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42953/" target="_blank">[新闻]13个大文件邮件传送服务</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>业务工作流平台设计(五)</title><link>http://www.cnblogs.com/llxxbb/archive/2007/05/25/BusinnessProcessPlatform5.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Fri, 25 May 2007 01:16:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2007/05/25/BusinnessProcessPlatform5.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/759300.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2007/05/25/BusinnessProcessPlatform5.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/759300.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/759300.html</trackback:ping><description><![CDATA[摘要: 数据交换<br>要想使自定义活动能够通用，那么活动所需要的数据来源也必须遵循一定的规范才可以，然而这很难做到。那自定义审核活动来讲，它可能需要在三个方面的数据（实际还要多）：<br>l  用户设计工作流时指定用于审核的人员列表，指定那些人可参与这个审核活动。这里有一个技术点，就是如何实现自定义属性编辑器，这里不多讲。<br>l  工作流实例运行时获得当前用户信息，根据当前用户自定义审核活动可以判断此人是否可以执行此活动，即此人是否在用户列表中存在。如果不可以则中断活动的运行。有关如何中断活动的运行请看后面的文章。<br>l   活动执行时所需要的数据。业务工作流平台设计(四)中的“尽可能减少占有时间 ”中讲到将用户数据的收集从工作流中分离出来，以节省占有时间，同时也应将数据同工作流进行分离。工作流不负责这些数据的存储和查询，但自定义审核工作流会应用这些数据进行处理以决定该活动是否运行到下一步去；或是继续等待其它用户的审核；或是退回（可经修改再次提交审核）；或是不被采用（不能再次提交审核）。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2007/05/25/BusinnessProcessPlatform5.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/759300.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42952/" target="_blank">[新闻]微型博客Twitter取消IM服务 称其ROI差</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>