先看一下基本流程的草图
WF 表决的例子

说一下用WF的实现思路
1.设计[表决人发表意见]的Activity,这是一个通知,回复的过程,所以用一个组CallExternalMethod与HandleExternalEvent实现通知与等待回复
2.由于参与人数是不特定的,但所有参与人的参与流程是一样的,所在使用一个ReplicatorActivity容器创建[表决人发表意见]的Activity多个复本
3.表决是并发的,所以ReplicatorActivity容器应设为并发
4.由于存在多个[表决人发表意见]的Activity的HandleExternalEvent同时等待,这样新需要使用CorrelationToken关联CallExternalMethod与HandleExternalEvent
5.由于参与人数不确定,ReplicatorActivit的InitialChildData集合需要在启动流程时由用户定义户后传入

 

数据项类
WF 表决的例子    public class DataItem

allExternalMethod与HandleExternalEvent绑定类
使用
System.Workflow.Activities.CorrelationParameter
System.Workflow.Activities.CorrelationInitializer
System.Workflow.Activities.CorrelationAlias
为CallExternalMethod与HandleExternalEvent实现关联

WF 表决的例子//接口
WF 表决的例子
    [System.Workflow.Activities.ExternalDataExchange]
WF 表决的例子    [System.Workflow.Activities.CorrelationParameter(
"PartakeName")]
WF 表决的例子    
public interface IExternalEvent

自定义投票Activity

WF 表决的例子

工作流设计
WF 表决的例子



引警

WF 表决的例子


代码下载  
    https://files.cnblogs.com/foundation/WorkflowLibrary3.rar

补充一下
以上例子是为了演示ReplicatorActivity的使用,以及使用CorrelationToken关联CallExternalMethod与HandleExternalEvent。
在实际应用中[表决人发表意见]的Activity可以做如下设计
WF 表决的例子

如果参与人没有在指定的事间内进行表决,系统将按超时处理,这样可以避免某个用户不表决,使整个流程一直处于挂起状态。在实例应用中,delay通常不直接用作业务结点,而是独立的实现一个时间引擎,这样处理工作日、节假日、申请延期处理等方面比效灵活

还有,如果可以不需要所有的参与人都完成表决流程才继续向下运行,可以加入规则判断,当同意或不同意的达到一定票数后新直接显示结果,当然这要看实际的业务是否有这种要求

添加上述功能比效简单,这里就不提供代码了
测试通过后,将引擎与客户端分别封装,
引擎可以选择Win服务,COM+,IIS的Application作为宿主
客户端可以选择WinForm、WEB
当然还要选择一种通信方式,WebService、Remoting、WCF、TCP都可以
以上的各种组合的例子都写过,这里也就不再提供了

相关文章:

  • 2021-05-27
  • 2021-12-30
  • 2022-12-23
  • 2022-02-25
  • 2021-08-30
  • 2021-04-06
猜你喜欢
  • 2022-12-23
  • 2021-12-11
  • 2021-12-23
  • 2022-01-22
  • 2022-01-05
  • 2021-10-22
  • 2021-10-05
相关资源
相似解决方案