随心所欲

做个幸福的人
posts - 152, comments - 1472, trackbacks - 28, articles - 0
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理
微软推出的工作流引擎:Windows Workflow Foudation,简单介绍一下

这是原文:

https://msdn.microsoft.com/windowsvista/building/workflow/default.aspx?pull=/library/en-us/dnlong/html/WWFGetStart.asp


这是下载地址

http://www.microsoft.com/downloads/details.aspx?familyid=7096d039-2638-4f63-8654-d2e5d98fa417&displaylang=en

这个开发环境需要安装在vs2005里面。


可以选择你的workflow引擎的Host


他处理的主要有两类工作流:顺序工作流(Sequential Workflow )和状态机工作流(State Machine Workflow ):

A sequential workflow is ideal for operations expressed by a pipeline of steps that execute one after the next until the last activity completes. Sequential workflows, however, are not purely sequential in their execution. They can still receive external events or start parallel tasks, in which case the exact sequence of execution can vary somewhat.

A state machine workflow is made up of a set of states, transitions, and actions. One state is denoted as a start state, and then, based on an event, a transition can be made to another state. The state machine workflow can have a final state that determines the end of the workflow.


有可视化的设计界面,就像设计一个aspx页面一样,把各个活动(activities )当成控件向里拖放。每个工作项就像一个控件,那工作流则一个窗体,可以直接写代码,比如MessageBox.Show.
To continue with the Windows Forms analogy, a workflow is like a form, whereas activities are like controls.
这个窗体也可以保存成xml格式的,但是.cs文件还是那样子。这是他实际做的

     this.Activities.Add(this.code1);
      this.DynamicUpdateCondition = null;
      this.ID = "Workflow1";
      FirstName.Direction = System.Workflow.ComponentModel.ParameterDirection.In;
      FirstName.Name = "FirstName";
      FirstName.Type = typeof(string);


可以设置端点调试工作流。

传递数据:有两种方式Param 和 event  。可以自己设置需要的Param (就是一些共有的属性而以)
数据的提供和处理还是Host要做的,比如,要出低一些参数进来,还一个把Host上的时间联系到workflow上。下边是一个窗体(Host)的一个按钮的事件处理代码

            Dictionary parameters = new Dictionary();
            parameters.Add("FirstName", txtFirstName.Text);
            parameters.Add("LastName", txtLastName.Text);

            // Start the workflow
            Guid instanceID = Guid.NewGuid();
            _wr.StartWorkflow(workflowType, instanceID, parameters);


流程处理上,功能很强大,可以设计诸如 IfElse,while,WaitForData,Suspend,Listen,Delay,EventDriven 等30多种。


开发一个Activity:
public partial class SendMailActivity : System.Workflow.ComponentModel.Activity
{
   public SendMailActivity()
   {
      InitializeComponent();
   }

   protected override Status Execute(ActivityExecutionContext context)
   {
       :
   }
}



状态机工作流比较麻烦,这是初始化一个状态机工作流:

private void StartWorkflowRuntime()
{
   // Create a new Workflow Runtime for this application
   _runtime = new WorkflowRuntime();

   // Register event handlers for the WorkflowRuntime object
   _runtime.WorkflowTerminated += new
          EventHandler(WorkflowRuntime_WorkflowTerminated);
   _runtime.WorkflowCompleted += new
          EventHandler(WorkflowRuntime_WorkflowCompleted);

    // Create a new instance of the StateMachineTrackingService class 
    _stateMachineTrackingService = new StateMachineTrackingService(_runtime);

    // Start the workflow runtime
    _runtime.StartRuntime();

    // Add a new instance of the OrderService to the runtime
    _orderService = new OrderService();
    _runtime.AddService(_orderService);
}
在.net2.0里面EventHandler其实做了功能上的扩充

这是其中一步的处理

private Guid StartOrderWorkflow(string orderID)
{
   // Create a new GUID for the WorkflowInstanceId
   Guid instanceID = Guid.NewGuid();

   // Load the OrderWorkflows assembly
   Assembly asm = Assembly.Load("OrderWorkflows");

   // Get a type reference to the OrderWorkflows.Workflow1 class
   Type workflowType = asm.GetType("OrderWorkflows.Workflow1");

   // Start a new instance of the state machine with state tracking support
   StateMachineInstance stateMachine = 
          _stateMachineTrackingService.RegisterInstance(workflowType, instanceID);
   stateMachine.StateChanged += new 
          EventHandler(StateMachine_StateChanged);
   stateMachine.StartWorkflow();
   _stateMachineInstances.Add(instanceID.ToString(), stateMachine);

   // Return the workflow GUID 
   return instanceID;
}











可以和微软其他的产品集成,比如biztalk,office之类的
相对其他的工作流引擎,比如osworkflow,微软的这一个算是功能强大的了


































Feedback

#1楼   回复  引用    

2005-09-16 11:56 by neuhawk[未注册用户]
免费吗?

#2楼[楼主]   回复  引用  查看    

2005-09-16 12:02 by 随心所欲      
to neuhawk
免费

我是从里面找到了不少需要的东西的。我本是想自己设计一个简单的引擎先用着,由一些细节还没想好怎么处理或者不确认一些想法。现在想通了很多问题。

#3楼[楼主]   回复  引用  查看    

2005-09-16 12:04 by 随心所欲      
这里还有一个网址:
https://msdn.microsoft.com/windowsvista/building/workflow/?_r=1">https://msdn.microsoft.com/windowsvista/building/workflow/?_r=1
一个开发的blog:
http://blogs.msdn.com/scottwoo/">http://blogs.msdn.com/scottwoo/

#4楼   回复  引用    

2005-09-16 12:13 by neuhawk[未注册用户]
好象.net 2.0才支持,而且要最新的操作系统?
前段时间搞oswrokflow,虽然简单,但自己要做的东西太多了!

#5楼[楼主]   回复  引用  查看    

2005-09-16 12:32 by 随心所欲      
需要2.0才支持
不需要最新的操作系统,winXP就能跑起来。
oswrokflow有点简单,甚至简陋,不堪重用,我正在筹划自己做一个。
微软划分的这两种工作引擎的思路很好,我现在要适当加入状态机工作流的处理。

#6楼   回复  引用    

2005-09-16 13:50 by chengyayu[未注册用户]
现在在.NET下做workflow的好像不多哦,不知道有谁有兴趣写写这方面的。

#7楼   回复  引用  查看    

2005-09-16 14:17 by Vincent Trent      
工作流这东西还挺有用的,能有个好的话开发项目时又可以省不少工作。

#8楼[楼主]   回复  引用  查看    

2005-09-16 14:39 by 随心所欲      
to chengyayu :
我就正在写啊,呵呵。还有是谁有兴趣,大家一起来啊

to Vincent Trent :
开发项目省时间是一部分,以后维护系统,面对升级和应对用户业务流程的修改什么的,都很有帮助。一句话,好处大大的。

#9楼   回复  引用    

2005-09-16 14:59 by idior[未注册用户]
http://idior.cnblogs.com/archive/2005/09/15/237609.html

#10楼   回复  引用  查看    

2005-09-16 15:40 by Vincent Trent      
有点兴趣,不过对这方面倒没什么研究,对c#还是很熟的。如果能考虑做成开源的或者对编译库使用上免费倒也不错。

#11楼[楼主]   回复  引用  查看    

2005-09-17 10:46 by 随心所欲      
to: Vincent Trent
有兴趣的话继续交流。人多的话开一个QQ群。

#12楼   回复  引用  查看    

2005-09-17 19:39 by 蛙蛙池塘      
不太懂工作流的应用。

#13楼   回复  引用    

2005-09-18 11:24 by chengyayu[未注册用户]
开个QQ群好了,现在项目里正在用workflow,但我对它的认识不够,大家交流交流最好拉

#14楼   回复  引用  查看    

2005-09-20 10:04 by Dragonpro      
开个群吧,这个东东很有用的,感谢ing。。。

#15楼   回复  引用  查看    

2005-09-20 15:42 by Boler Guo      
关注中……

我们现在就在永DotNet做工作流~

#16楼   回复  引用    

2005-10-13 15:08 by sz2080[未注册用户]
我在用jjx移植到 .net上的osworkflow,觉得困难重重。

想试一下MS的工作流,但它下载要正版的windows,不知道我这种D版用户能不能试一下

MSN: sz2080@hotmail.com

#17楼   回复  引用    

2005-10-24 17:19 by ChinaKokMan[未注册用户]
微软太差了,这个工作流还要Vista推出的时候才出正版,而且要在Vista中使用。看看Java发展太快了,WebLogic 8.1 就已经集成了WorkFlow开发, Eclipse也有很多Plug-in可以开发Workflow。 难怪金蝶要从.NET转用Java - Eclipse。我现在对.Net 愈来愈没有信心了。

#18楼   回复  引用    

2006-06-19 20:55 by flyingbugs[未注册用户]
ChinaKokMan:不知道就不要乱说话。

#19楼   回复  引用    

2006-06-29 13:20 by xinying.zhang[未注册用户]
请有兴趣的朋友们加我,我们可以一起探讨一下workflow的问题.我以前用过国内开发的协同工作流,还有shark工作流,都是基于java 平台上做的.微软的东西多年不用了,请大家多指教,msn:zhangxinying3@hotmail.com, Email: davis0908@gmail.com

#20楼[楼主]   回复  引用  查看    

2006-06-30 18:20 by 随心所欲      
@xinying.zhang
园子上有个workflow的组,你可以进去看看。

我用过osworkflow。

#21楼[楼主]   回复  引用  查看    

2006-06-30 18:21 by 随心所欲      
@ChinaKokMan
不一定在vista上应用。
Eclipse,恕我直言,看起来好像是个半成品。

#22楼[楼主]   回复  引用  查看    

2006-06-30 18:23 by 随心所欲      
@sz2080
没有盗版。

我也在用jjx移植到 .net上的osworkflow,并且包装了一下,很不错啊。/

#23楼   回复  引用    

2006-08-17 17:34 by liuyu[未注册用户]
我在用wwf做sps2007的开发, 有兴趣的可以加我qq:25686413

#24楼   回复  引用    

2007-01-05 16:03 by 菜鸟[匿名][未注册用户]
学了微软的工作流半个月了,还没又找到一点头绪,不知如何下手,不知何时能够作出一条完整流程出来,任务不知怎样产生,执行人如何挂接,微软的工作流到底行不行阿,还有时序的如何暂停,状态机到底是个什么动动,状态机能不能并发输出阿.....

#25楼[楼主]   回复  引用  查看    

2007-01-06 09:47 by 随心所欲      
@菜鸟[匿名]
状态机没有问题,可以并发输出。
微软的工作流还是不错的,适用于中小型企业应用(虽然现在的版本还比较羞涩)。
你可以参见我其他关于wff的一些文章,或许对你有些帮助。

#26楼   回复  引用    

2007-01-28 17:54 by cnedn[未注册用户]
请加入 cnedn.wf@hotmail.com MSN群吧!
WorkFlow Foundation 专业群

#27楼   回复  引用  查看    

2007-07-11 12:45 by freeliver54      
3Q Mark!



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 238248




相关文章:

相关链接:

Google