wf工作流java_WF Workflow 状态机工作流 开发

article/2025/8/14 21:26:36

概述

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

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

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

在线诊断的业务流程图

b15514b32aaea9880d4b4dbb6f7822c8.png

现在来看WF 状态设计图

c1f51c7f8577a91550b4e139c1bfd436.png

new workflow的序例图如下

a20dc806006ac192b35b0ead42fc7205.png

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重启时,得不到正确的状态.

参考文献

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

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


http://chatgpt.dhexx.cn/article/oqoEIU3Q.shtml

相关文章

Mendix 9.6 - Workflow(工作流)基础设计

一 概述 Workflow(工作流)是Mendix 9版本中新增的一种可视化语言功能模块,我们可以用它来构建可扩展的流程。此外它还与其他可视化语言完全集成,例如微流编辑器和页面编辑器。 在公司我们往往需要填写许多表单,包括行政、人事、IT等方面的&a…

workflow工作流(三):画流程图工具对比

一、总结 我所用过能画工作流的工具有2个:1.eclipse插件,2.flowable官方网页版,结论是eclipse插件好用,后者要上传下载,还容易丢数据 注意事项:eclipse插件画出来的bpmn文件的schama是activiti&#xff0…

Bladex Workflow工作流引擎开发进阶-版本v1.2.2

Bladex Workflow工作流引擎开发进阶 1 Bladex Workflow简介2 Flowable简介3 workflow部署和配置-参考文档《BladeX插件 - Blade-flow使用帮助文档 》4 配置任务监听4.1 问题:监听类注入不了service 5 配置事件监听6 复杂表单-配置外部表单(不建议配置超大…

workflow工作流(二):34张表

1.常用的表 2.总共34张表 Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: RE表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则&…

SAP Workflow 工作流开发步骤总结

一、配置 SWU3 设置管理员 二、新建业务对象 查看我们需要增强的业务对象,比如我们项目上用的是BUS2000114,一般我们工作流的触发 是用单据状态的改变来触发,这就需要我们增强业务对象 使用SWO1 新建一个业务对象 继承上面的标准对象 注意…

小小研究一下工作流WorkFlow

修房子 在小牧老家农村,小时候总是看到村里有人在修房子。每次看到有人修房子的时候,他就会爬到房子面前的沙粒堆上去,翻找随着沙子一起被挖出来的贝壳。虽然也不知道拿来干嘛,不过总觉得收集贝壳很好玩。 小牧也喜欢看他们修房子。修房子的时候,专业的修房师傅会指导工…

微软 workflow 工作流总结

1.状态机工作流 (1)状态机工作流从state1 流转到 state2 到stateN (2) state中有执行状态和退出状态 (3) 在进入下一个步骤(state1 到 state2)前,首先会判断进入下一个状态的条件,下面我把它叫做判断模块 (4)在判断模块中,有三个生命周期:Trigger,Condition,Action (5)判断模…

WorkFlow工作流

工作流 一、什么是工作流 历史发展: 工作流的理论起源于70年代中期办公的自动化领域。90年代。工作流技术的研究与开发进一步发展。1993年8月,成立第一个工作流技术标准话的工业组织WFMC(工作流管理联盟)。现在,工作…

工作流(Workflow)基本介绍

工作流简介 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标&a…

Eclipse下配置主题颜色

对于长期做开发的哥们来说,过于明亮的背景色会导致视觉疲劳,从而致使效率各种下降、困意各种来袭。为了有效阻止这种可怕的事情发生,我们需要改变背景色! OK,这篇博客主要讲解如何设置eclipse软件的背景色:…

修改eclipse的主题颜色

很多小伙伴的eclipse都是以白色为主,看到别人的暗色的eclipse感觉很炫酷,这里就教大家一下如何改主题颜色 1.点击顶部导航栏help,找到Eclipse Marketplace 2.在弹出的Eclipse Marketplace窗口中,在search中搜索color theme&…

eclipse设置 “暗黑色” 主题

经典模式的 eclipse 都是白底黑字,比较刺眼,长时间写代码,让人感觉眼睛疲劳,所以尝试换一个暗黑色主题背景,可以有效减缓眼睛疲劳,而且暗黑色主题给人感觉就很酷炫,有木有! 1、打开…

Eclipse背景主题设置

这方面的内容是很简单,而且网上也相当多的教程。但我觉得,自己写一下,既可以加持自己写博客的心态,也给需要的人分享一下。 确认一下自己的Eclispse版本, 如果是最新版本的Eclipse Luna,可以略过第一步,如果是旧的版本需要下载一个插件,并将其放在eclipse目录下的plugi…

Eclipse在线安装color-theme主题

添加入口: Eclipse --> Help --> Install New Software --> addName: color-theme Location: http://eclipse-color-theme.github.com/update全选 NEXT 接受协议 选择 Install anyway Restart Now 重启 Window --> Preference --> General --> Appe…

为Eclipse安装主题插件(Color Theme)

由于正常eclipse界面配色是白底黑字,长时间工作容易眼睛疲劳,才想着去装这个Eclipse Color Theme 插件,安装过程中遇到了一些问题。 正常安装的话直接 Help -> marketplace -> search 框下输入 color theme 就可以搜索到目标插件&am…

如何把Eclipse修改为黑色主题

转载自:http://bbs.itheima.com/forum.php?modviewthread&tid119345&extrapage%3d1%26filter%3dtypeid%26typeid%3d390?lt3448 原帖名:如何把Eclipse修改为黑色主题?求配色方案! 因为主力问题已解决,经过修…

eclipse黑色主题黑色背景

现在本人用eclipse的版本信息:Eclipse for PHP Developers ----Version: Mars.1 Release (4.5.1),可以在菜单栏--help---about eclipse里查看 因为写代码到很晚,所以想换个黑色主题以以及黑色背景。 所以写一写这个设置。 自己先参照了别人…

(转)设置漂亮的Eclipse主题(Theme)风格

原地址:http://blog.csdn.net/zhouchangshi/article/details/37901519 童鞋们, eclipse主题太丑?想设置护眼的主题? 看看这些主题: 请移驾: Eclipse Color Themes http://www.eclipsecolorthemes.org/ 怎么…

idea安装eclipse风格主题

前言 最近开始学习使用idea,用惯了eclipse风格,IntelliJ IDEA 想换个eclipse主题,百度了一圈发现大部分教程去的下载地址都打不开,原来idea里面就可以搜索安装。。。。 一、打开idea 路径:file->setting-Plugins 二、在中间…

Eclipse主题设置

主题下载地址:http://www.eclipsecolorthemes.org/?q 这个是我自己的配置文件 , 看着舒服的童鞋也可以用,下载地址:http://download.csdn.net/download/rely_on_yourself/10137995 先展示下效果图: 设置步骤: 先将Eclipse的整个背景主题定好 将下载好的配置文件导入Ecl…