在XPDL规范中,一个人工参与的活动有以下特性:活动任务的多实例(根据活动上指定的参与者,分配活动任务,活动任务我们称为工作项),工作项的分配策略(ALL所有参与者分配和Radom随机挑选分配,当然还有更多的资源模式,因为是是demo就不实现了),活动的完成策略(ALL所有工作项完成活动才完成和ANY任意工作项完成即完成),工作项执行模式(并行和串行)。
开始我的描述,下图是封好的组合活动,整个组合活动暴露的属性有:参与者(是个集合,可以自己定义组织模型接口,用户、岗位、用户组、组织等)、分配策略、完成策略、执行模式、预警规则等。

我们一一来看组合活动中的每个活动的作用:
1、FindParticipant活动传入参与者列表和分配策略,经过对策略的不同处理(动态的参与者需要从上下文中获取),返回最终确定的参与者。
2、ApprovalReplicator活动是ReplicatorActivity,这个是实现活动任务多实例的关键。将计算获得的参与者列表作为ReplicatorActivity的InitData,参与者列表的数量会决定整个ReplicatorActivity块的执行次数,每次会起单独的线程(通过观察ActivityExecutionContext的ID与父活动的不一样得知,异步线程的Context都是自己管理的),每个线程的初始数据即为具体的一个参与者。根据工作项执行模式是并行的还是串行的来设置ReplicatorActivity的ExecutionType属性。ReplicatorActivity的四个事件都很有用,为了初始数据和支持策略的实现,这里不赘述。再多说一句,WF设计器好像对IList类型的属性支持不好,实现中我都是手写代码绑定的这类参数,应该是个Bug。
3、SingleApproval是封的组件活动,因为ReplicatorActivity里只能包含一个活动,所以必须封一下。
4、CreateWorkItem根据线程拥有的参与者,在数据库中创建工作项。工作项概念在WF中没有,估计WF就不是为人工活动设计的。我们就将其设计为业务数据,可以在数据库部署上与WF默认提供的数据库分离。
5、LintenForApproval+WaitComplete配合实现流程对用户完成工作项的等待。这里要注意的关键点是CorrelationToken的运用,目的是分清楚来自与宿主程序的完成工作项的事件到底要发给哪个线程。WF的这个设计还是与Biztalk一致的,需要有创建CorrelationToken的活动(本例中是CreateWorkItem),后续的活动(本例中是WaitComplete)标记为Follow这个CorrelationToken。CorrelationToken的OwnerActivityName的设置也是很关键的点,这种多线程的场景中,如果这个属性设置为SingleApproval就坏事了,这样每个线程的CorrelationToken还是区分不出来,这里的技巧是设为/Parent,由运行时指定为父活动,WF引擎是支持的。还有一点要提的是,需要使用CorrelationToken的这种活动引用的用户接口必须加上CorrelationParameter特性,这个Lab中都有,不赘述了。
6、UserSolve活动就是根据用户完成工作项的执行情况(宿主程序在事件参数中传入用户执行结果)。
7、DelayActivity根据传入的预警信息生成等待的时间,DefaultSolve即完成预警信息中指定的动作。
8、还差一点就是完成策略还没有提到,这个是通过ReplicatorActivity的UntilCondition来实现的,只要这个条件计算的结果是true,那么整个ReplicatorActivity就结束,而丢弃其他未完成的线程,每个线程的结束都会触发这个条件计算的执行。剩下的策略规则就不难实现了,根据不同的场景堆代码吧。

以上的组合活动来实现人工活动的要点有:
1、处理好ReplicatorActivity活动
2、Listen活动+HandlerExternalEvent活动的配合,CorrelationToken的设置
完成这个demo后还觉得这样实现太过于啰嗦,真想用代码直接写个HumanActivity。对于上面的两个关键点的用代码实现的设想:
1、ReplicatorActivity,我们用代码根据参与者列表起几个Thread的问题。
2、Listen活动+HandlerExternalEvent活动,用WF的消息队列+书签的方式就可以搞定了,这个有疑问请看我前一篇博文。CorrelationToken我们写代码想这么搞怎么搞,哈哈!

转载于:https://www.cnblogs.com/ipointer/archive/2008/07/17/1245397.html

Windows Workflow Foundation中实现人工活动的demo,按照XPDL规范的实现相关推荐

  1. Windows Workflow Foundation(1)- Windows Workflow Foundation 概述

    Windows Workflow Foundation(第一章)- Windows Workflow Foundation 概述 工作流概述 活动(Activity)是工作流的基本单元,用于描述实际进 ...

  2. Microsoft Windows Workflow Foundation 入门:开发人员演练

    有关向 Windows 平台添加工作流支持的初步知识 Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流 ...

  3. Windows workflow foundation入门

    Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案.作为即将问世的 Microsoft WinF ...

  4. Windows Workflow Foundation 2 规则引擎简介

    转载于:MSDN http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/intWF_FndRlsEng.mspx?mfr=tr ...

  5. Microsoft Windows Workflow Foundation

    Dino Esposito Solid Quality Learning 适用于: Microsoft Windows Workflow Foundation Microsoft Windows Vi ...

  6. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例(转)

    和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以 ...

  7. 你还记得windows workflow foundation吗

    很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...

  8. Windows Workflow Foundation(WWF)介绍

    Windows Workflow Foundation:支持基于工作流的应用程序 工作流是一个简单思路:按照特定顺序执行的一系列步骤.您甚至可以认为每个应用程序都在执行工作流,因为每个应用程序都执行某 ...

  9. Windows Workflow Foundation之旅(六)——框架组成、工作流创作模式

    Windows Workflow Foundation之旅(六)--框架组成<?xml:namespace prefix = o ns = "urn:schemas-microsoft ...

  10. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例

    今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以英文的占多数,所以,在学习起来似乎比较吃力,不过相信我能坚持下来,顺便提高点英语阅读能力,不过本人英文水 ...

最新文章

  1. Kali Linux修改桌面默认图标
  2. POJ_3268_Sliver Cow Party结题报告
  3. 利用xml+xsl给客户机添加超级管理帐户!
  4. ret2dlresolve归纳
  5. mysql主从配置错误_mysql主从配置常见错误处理
  6. OpenCV-特征提取与检测(02、Shi-Tomasi角点检测)
  7. 下载mysql驱动jar包教程
  8. Arcgis操作系列一:shp矢量数据的面积计算
  9. java中intern_Java中的intern()方法是什么?
  10. MySQL服务器的超级管理员名称是_mysql服务器忘记了超级管理员root密码
  11. N76E003 驱动 UC1705并口屏(8080)
  12. 解决(“settings.DATABASES is improperly configured. “django.core.exceptions.Im
  13. 【数学史】大富翁的概率
  14. MySQL pt工具应用
  15. Redis的五种基础数据结构和三种高级数据结构
  16. 『Python核心技术与实战』pandas.DataFrame()函数介绍
  17. 水星WM150U无线网卡开机掉驱动的解决方法
  18. 【Python】windows下Eclipse中安装集成webpy框架
  19. SSL数字证书之CA根证书、CA中间证书和SSL证书
  20. 关于游戏介绍的HTML网页设计 HTML5期末考核大作业 HTML静态游戏网页作业 web前端开发技术 web课程设计 网页规划与设计

热门文章

  1. Kali linux 基础常用指令详解
  2. 使用pytest 出现collected 0 items解决
  3. 数据可视化④:大学生就业可视化呈现
  4. jquery提示sucess
  5. flac转mp3的方法
  6. 卢卡斯Lucas定理
  7. 手机用html电视,手机怎么连接电视
  8. springboot前后端分离图片上传接口
  9. centos7 下载百度网盘中文件的方法
  10. arduino期末考试题