概述

工作流是对业务流程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤。然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程。

我们知道,WF包含两种类型的工作流:顺序工作流和状态机工作流。顺序工作流提供了一系列有组织的步骤,一般情况下,步骤是逐一执行的。可能有的步骤需要等待某些事件的发生才可以继续执行,但通常情况下顺序工作流一般用于无需人工干预的操作。

状态机工作流提供了一系列的状态。工作流从初始状态开始,到终止状态结束。两个状态之间定义行为进行过渡。通常情况下,状态机工作流对事件作出反应,事件的发生将会使状态发生改变。

在线诊断的业务流程图

现在来看WF 状态设计图

new workflow的序例图如下

WF workflow 传值方式 public sealed partial class CTDiagnosis : StateMachineWorkflowActivity

{

private WorkFlowActivityEntity internalMyActivityData;

public WorkFlowActivityEntity MyActivityDataProperty

{

get { return internalMyActivityData; }

set { internalMyActivityData = value; }

}

public CTDiagnosis()

{

InitializeComponent();

}

private void handleManagerSendBackEvent_Invoked(object sender, ExternalDataEventArgs e)

{

LocalEventArgs localEventArgs = (LocalEventArgs)e;

internalMyActivityData.GotoCondition = localEventArgs.WorkFlowActivityEntityProperty.GotoCondition;

}

}

获取workflow处理器

///

/// 获取workflow处理器

///

public static WorkflowRuntime CurrentWorkflowRuntime

{

get

{

if (workflowRuntime == null)

{

workflowRuntime = new WorkflowRuntime();

//加载通讯服务

ExternalDataExchangeService dataService = new ExternalDataExchangeService();

workflowRuntime.AddService(dataService);

localService = new LocalService.LocalService();

dataService.AddService(localService);

//加载持久化服务

string connStr = System.Configuration.ConfigurationManager.AppSettings["WF.PersistenceDB.ConnectionString"].ToString();

SqlWorkflowPersistenceService WorkflowPersistenceService =

new SqlWorkflowPersistenceService(connStr);

//bool unloadOnIdle = false;

//TimeSpan instanceOwnershipDuration = new TimeSpan(0, 0, 3);

//TimeSpan loadingInterval = new TimeSpan(0, 0, 1);

//SqlWorkflowPersistenceService WorkflowPersistenceService =

// new SqlWorkflowPersistenceService(connStr, unloadOnIdle, instanceOwnershipDuration, loadingInterval);

//NameValueCollection parms = new NameValueCollection();

//parms.Add("UnloadOnIdle", "true");

//parms.Add("ConnectionString", connStr);

//SqlWorkflowPersistenceService WorkflowPersistenceService =

// new SqlWorkflowPersistenceService(parms);

workflowRuntime.AddService(WorkflowPersistenceService);

//相应流程事件

workflowRuntime.WorkflowIdled += OnWorkflowIdled;

workflowRuntime.WorkflowStarted += OnWorkflowStarted;

workflowRuntime.WorkflowTerminated += OnWorkflowTerminated;

workflowRuntime.WorkflowCompleted += OnWorkflowCompleted;

加载跟踪服务

//SqlTrackingService sqlTrackingService = new SqlTrackingService(DBAccess.connectionString);

//sqlTrackingService.IsTransactional = false;

//workflowRuntime.AddService(sqlTrackingService);

workflowRuntime.StartRuntime();

}

return workflowRuntime;

}

}

Runtime 服务

WorkflowRuntime类仅仅提供了执行工作流的基本功能,之前我们提到的一些重要功能(比如跟踪工作流)则可以通过WorkflowRuntime提供的扩展性机制-AddService方法来实现.

AddService允许我们向Runtime中添加可用的服务.这些服务可以是我们为特定领域编写的自定义服务,也可以是WF中内置的服务.

调度服务 Scheduling Services

调度服务用来控制Runtime执行工作流所需要的线程.

DefaultWorkflowSchedulerService会创建新的线程来执行工作流.因为工作流和宿主应用程序的线程是分开的,所以工作流是异步执行的并且不会阻止任何应用程序的线程.我们还可以配置允许同时执行的工作流最大数量.

当宿主应用程序可以转让线程给工作流Runtime时可以使用另外一个调度服务-ManualWorkflowSchedulerService.对服务器端应用程序(比如ASP.NET Web应用程序和Web Service)而言,把线程转让给Runtime非常有用.服务器端应用程序通常的做法是为每个客户端请求的服务创建线程.而宿主应用程序把线程”借给”WF Runtime的意义在于可以让Runtime在每个请求的线程上同步地执行工作流,而不是为每个请求创建两个线程.

和Windows Worklow的所有服务一样,如果内置的服务不能满足你的需求,你可以定义你自己的调度服务.

事务服务 Transaction Services

事务服务允许Runtime保持位于工作流内部和持久存储器(durable store)中的状态的一致性.默认的事务服务是DefaultWorkflowTransactionService类的实例.正在运行的工作流进程中的活动和此服务共享相同的进程和相同的事务上下文.

WF依靠.NET中的System.Transactions名称空间来实现事务机制. Transactions类提供一个轻量级的, auto-enlisting并且可提升的事务.事务像本地事务一样启动,然后Runtime可以根据需要把它提升为重量级的分布式事务.

持久化服务 Persistence Services

持久化服务负责把工作流状态保存到持久储存器.SqlWorkflowPersistenceService会把工作流状态保存到SQL Server数据库.长时间运行的工作流需要持久化服务,因为我们不能让处理订货单的工作流在内存里驻留30天直到客户支付才从内存中卸载.相反,Runtime应该保持工作流的状态到持久存储器中,并且把工作流实例从内存中卸载.在这30天中,Runtime可以重新加载工作流实例并恢复运行.当持久化服务启用时,WF Runtime会自动保持工作流空闲或者暂停等状态.

SqlWorkflowPersistenceService支持SQL Server 2000以及更高版本(还包括免费的MSDE和Express版).当然,我们还需要一个数据库架构来让持久化服务知道如何去保存工作流状态,这部分内容将在后面的章节详述.

跟踪服务 Tracking Services

当调度服务选择了工作流运行的线程之后,跟踪服务就会负责监视并记录工作流的执行信息.跟踪服务使用Tracking Profile来通知Runtime它需要的工作流信息的类型.跟踪服务还可以打开跟踪频道(Tracking Channel)来接收事件和数据.WF包含一个SqlTrackingService类,这个类可以将跟踪数据存储到SQL Server数据库.跟踪服务将使用事务服务来确保工作流的跟踪数据与被跟踪工作流的状态一致.默认Runtime不会启动跟踪服务,但我们可以用编程的方式添加跟踪服务(或使用应用程序配置文件配置跟踪服务).

获取workFlow的模板

///

/// 获取workFlow的模板

///

///

///

private Type GetWorkFlowType(string workFlowName)

{

Type wfType = null;

if (workFlowName.Equals("Diagnosis", StringComparison.OrdinalIgnoreCase))

wfType = typeof(CTDiagnosis);

return wfType;

}

获取workflow 的实例ID

///

/// 获取workflow 的实例ID

///

///

///

///

public Guid NewWorkflow(string workflowName, object startParameter)

{

Dictionary inputParameters = new Dictionary();

inputParameters.Add("MyActivityDataProperty", startParameter);

//启动一个新的工作流

WorkflowInstance workflowInstance = CurrentWorkflowRuntime.CreateWorkflow(GetWorkFlowType(workflowName), inputParameters);

workflowInstance.Start();

//重新从持久化数据库中加载工作流,这是必须的,否则GetLoadedWorkflows无法获得新加入的流程。

CurrentWorkflowRuntime.GetWorkflow(workflowInstance.InstanceId);

//ReloadWorkflow();

return workflowInstance.InstanceId;

}

获取workflow的状态

///

/// 获取workflow的状态

///

///

///

public string GetInstanceStateByInstanceId(Guid instanceId)

{

string strStatus = "";

StateMachineWorkflowInstance smwi = new StateMachineWorkflowInstance(WorkflowMgr.CurrentWorkflowRuntime, instanceId);

strStatus = smwi.CurrentStateName;

return strStatus;

}

总结

状态机工作流的持久化很重要,要不workflow重启时,得不到正确的状态.

参考文献

欢迎各位参与讨论,如果觉得对你有帮助,请点击推荐下,万分谢谢.

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

wf工作流java_WF Workflow 状态机工作流 开发相关推荐

  1. 工作流(Workflow) -- 工作流简介

    工作流(Workflow) – 工作流简介 数据库 Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE ...

  2. SharePoint 工作流解决方案(一):顺序工作流和状态机工作流

    SharePoint 的工作流是基于 Workflow Foundation 的,我们就先谈谈 WF,只有对 WF 有正确的认识,才能找到 SharePoint 工作流的解决方案. Workflow ...

  3. SharePoint 状态机工作流解决方案(一):为什么要用状态机

    以前一直是作 Windows Workflow Foundation 的工作流平台,对 WF 比较熟悉,开发的工作流平台满足了公司实施的各种项目的工作流应用的需求. 最近作了一个 SharePoint ...

  4. 状态机工作流,顺序工作流和Flowchart

    什么是工作流,工作流可以说是对业务处理过程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤.然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程. WF工作流包含两种类型 ...

  5. java 状态机工作流_7.4.14 状态机工作流(1)

    7.4.14  状态机工作流(1) 本节来了解SharePoint中的状态机工作流.状态机工作流主要跟以下几个活动有关. State:表示一个审批状态.内部可以放置StateInitializatio ...

  6. NET4.0.X中的状态机工作流

    NET4.0.X中的状态机工作流 今天整理文档时发现了这篇忘记发布的文章,是关于NET 4.0.1的, NET 4.0.2都已发布一段时间了 以下NET版本提供WF4.0的状态机工作流在VS2010中 ...

  7. 工作流(Workflow)简介

    当今社会分工越来越细,在一个单位内部也越来越强调专业化,大部分工作都需要多个部门和员工合作完成.一个制度良好的单位往往对各种工作的工作流程以文件的形式固定下来,即使是管理不太正规的单位也有约定俗成的工 ...

  8. java workflow jbpm_工作流(workflow)定义和jBPM

    工作流(workflow)定义 工作流(Workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算.根据 WfMC 的定义 ...

  9. 德玛西亚之WorkFlow(一)工作流介绍

    德玛西亚之WorkFlow(一)工作流介绍 1 什么是工作流 工作流(WorkFlow),就是将一项多人或者多任务的工作按照固定的顺序进行逐项操作,直至此工作结束.举个简单的例子:多个人协同做饭,首先 ...

最新文章

  1. Springboot集成nacos实现服务发现和配置中心
  2. 询问任意区间的min,max,gcd,lcm,sum,xor,or,and
  3. 【工具】 原版完美激活 Flash builder 4.7 【非破解激活】
  4. 12. Magento 后台top栏开发
  5. 面试官:如何设计出骚气的秒杀系统?
  6. 图数据库_多款业界流行图数据库对比
  7. 痞子衡嵌入式:如果你正在量产i.MX RT产品,不妨试试这款神器RT-Flash
  8. 中学生怎样学计算机编程6,中学生学电脑编程有什么好处
  9. clouder manager卸载
  10. 【数据库04】中级开发需要掌握哪些SQL进阶玩法
  11. KONG网关和KONGA界面的入门使用,快速上手
  12. 【观点】“马云:金融是要为外行人服务,这个观点其实并不新鲜
  13. 交互设计实用指南系列11-减少记忆负担
  14. 手机浏览器 ajax错误,在IE浏览器中出现Ajax错误“undefined”
  15. iCMS的spider_rule.admincp.php存在报错SQL注入
  16. 名编辑电子杂志大师教程 | 名编辑电子杂志大师软件简介
  17. 组策略(一):打开组策路编辑器
  18. SDFormatter资源(免费)
  19. 精选:全球51家最具特色超实用网站合集
  20. 解读分布式防火墙之――产品篇(转)

热门文章

  1. python内置函数系列之set(一)(持续更新)
  2. journalctl -xe命令什么意思
  3. 三菱FX3U-485ADP-MB与英威腾GD变频器通讯程序
  4. Android Studio基础单选按钮RadioButton
  5. 铺砖 动态规划 DP
  6. php思维导图xmind文档,思维导图XMind特色功能介绍
  7. 基于云开发的微信小程序实战教程(二)
  8. 关于win7不识别maxon驱动器的解决办法
  9. Office系列及WPS等常用办公软件学习教程
  10. java正则验证大陆以及港澳台手机号码