工作流创作模式
WF中有三种工作流创作模式:
仅限代码:纯使用代码的方式,比如我们创建一个Workflow1.会产生Workflow1.cs和Workflow1.Desiger.cs两个文件。后者是自动生成的。前者是我们
实现逻辑和设计工作流的地方。如果有规则的话,会产生一个序列化的.rules文件。当项目生成的时候,该.rules文件会作为程序集的嵌入式资源。这种
方式在运行时只能通过动态更新来更改.
代码分离:.xoml格式,这种方式的工作流序列化后保存在一个以.xoml为扩展名的文件中,它的代码保存在.xoml.cs中。这种模式在生成的时候会先由
工作流编译器从.xoml文件生成临时的C#类,在和.xoml.cs一起编译。
无代码:只有一个.xoml文件。这种模式在VS模板中是不支持的,在这种模式下只能使用已经存在的工作流类型和成员。请看下图:
从上图中我们可以很清楚的该模式的特点,这种模式有很大的灵活性,可以通过宿主程序将工作流标记文件加载到工作流运行时引擎。不需要重新编
译整个工作流。我们下面来说明如何使用该种方式。
1.首先我们自定义一个工作流基类提供工作流中需要的属性和方法,代码如下:
using System; using System.Workflow.Activities; namespace CaryWFLib { public class CaryBaseWorkflow : SequentialWorkflowActivity { public int Number { get; set; } public void Condition(object sender, ConditionalEventArgs e) { e.Result = (Number > 0); } } }
2.然后我们实现一个自定义活动CaryPrintActivity完成逻辑部分,主要功能输出Message,代码如下:
namespace CaryWFLib { public partial class CaryPrintActivity: Activity { public static DependencyProperty MessageProperty = System.Workflow.ComponentModel.DependencyProperty.Register( "Message", typeof(String), typeof(CaryPrintActivity)); [Description("A string message to write")] [Category("Pro Workflow")] [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public String Message { get { return ((String)(base.GetValue(CaryPrintActivity.MessageProperty))); } set { base.SetValue(CaryPrintActivity.MessageProperty, value); } } public CaryPrintActivity() { InitializeComponent(); } protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (Message != null) { Console.WriteLine(Message); } return base.Execute(executionContext); } } }
3.然后我们来实现无代码的工作流部分,代码如下:
<?xml version="1.0" encoding="utf-8" ?> <ns0:CaryBaseWorkflow x:Name="CaryNoCodeWorkflow" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow" xmlns:ns0="clr-namespace:CaryWFLib;Assembly=CaryWFLib"> <IfElseActivity x:Name="ifElseActivity1"> <IfElseBranchActivity x:Name="ifElseBranchActivity1"> <IfElseBranchActivity.Condition> <CodeCondition Condition="{ActivityBind Name=CaryNoCodeWorkflow,Path=Condition}" /> </IfElseBranchActivity.Condition> <ns0:CaryPrintActivity Message="您输入的数字大于0" x:Name="caryPrintActivity1" /> </IfElseBranchActivity> <IfElseBranchActivity x:Name="ifElseBranchActivity2"> <ns0:CaryPrintActivity Message="您输入的数字小于等于0" x:Name="caryPrintActivity2" /> </IfElseBranchActivity> </IfElseActivity> </ns0:CaryBaseWorkflow>
注意
3.1.根节点为ns0:CaryBaseWorkflow,和活动条件的绑定部分。
3.2.无代码的工作流创作模式下不能包含X:Class属性。
3.3.如果规则为声明性规则即.rules的形式,上面的条件部分应该为:
<RuleConditionReferenceConditionName="Condition" />
3.4.需要将该工作流文件属性的生成操作设置为无。
4.宿主部分:
namespace NoCodeWorkflow { class Program { static void Main(string[] args) { using (WorkflowRuntime workflowRuntime = new WorkflowRuntime()) { AutoResetEvent waitHandle = new AutoResetEvent(false); workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
{ waitHandle.Set(); }; workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; Dictionary<String, object> paras = new Dictionary<string, object>(); paras.Add("Number", 2); try { //XmlReader reader = XmlReader.Create("..\\..\\CaryNoCodeWorkflow.xoml"); XmlReader reader = XmlReader.Create("..\\..\\CaryNoCodeRulesWorkflow.xoml"); XmlReader readerRule = XmlReader.Create("..\\..\\CaryNoCodeRulesWorkflow.rules"); //WorkflowInstance instance = workflowRuntime.CreateWorkflow(reader, null, paras); WorkflowInstance instance = workflowRuntime.CreateWorkflow(reader, readerRule, paras); instance.Start(); } catch (WorkflowValidationFailedException ex) { foreach (ValidationError error in ex.Errors) { Console.WriteLine(error.ErrorText); } } catch (Exception ex) { Console.WriteLine(ex.Message); } waitHandle.WaitOne(); } } } }
在宿主程序中,我们使用workflowRuntime.CreateWorkflow的另一种重载。最后结果如下:
发表评论
-
平淡的2007
2007-12-24 08:04 813早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1410今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 887[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 633[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 781[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1141[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 918当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 834Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 841在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 692我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1176MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 701本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 828本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 754WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1054由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 792[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 686[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 729[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1098一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 943首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
5. **批量处理**:对于需要处理大量纹理的工作流,ArmorLab支持批处理模式,可以快速生成或修改多个纹理,大大提高生产力。 6. **兼容性**: ArmorLab生成的纹理兼容多种格式,如.png、.tiff等,确保它们能在各种...
它基于Java技术栈,提供了一套全面的功能,包括内容创作、版本控制、工作流管理、多语言支持等。标题提到的是OpenCms的7.5.3版本,这是一个相对较老的版本,但在某些情况下可能仍被使用,比如为了维护旧项目或研究...
** Tinymce 编辑器详解 ** ...了解并熟练运用 Tinymce,无论是开发 Web 应用还是进行内容创作,都能极大地提高工作效率和用户体验。通过社区共享的精神,Tinymce 不断进化,持续为开发者提供更好的工具和服务。
3. **MVC模式**:理解模型-视图-控制器设计模式,如何将业务逻辑、数据显示和用户交互分离,提高代码可维护性。 4. **Web容器**:如Tomcat或Jetty,它们提供运行Java EE应用的环境,管理Servlet和JSP的生命周期。 ...
- **写作创作**:将编写代码看作是写作创作过程,注重表达清晰度和逻辑结构。 #### 四、上游先决条件的测量 **1. 确定软件类型** - 在开始编码之前,明确项目的目标、规模和预期用户群体。 - 这有助于制定更为...
坚持学习WF(2):WF创作模式和设计时工具 坚持学习WF(3):WF框架概览 2.3两篇主要全面的阐述了WF框架和Visual Studio对开发WF的一些设计时的工具。 坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) ...
坚持学习WF(2):WF创作模式和设计时工具 坚持学习WF(3):WF框架概览 2.3两篇主要全面的阐述了WF框架和Visual Studio对开发WF的一些设计时的工具。 坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) ...
Python-GuitarScaleChart的工作原理是通过算法生成音阶模式,并以图形化的方式展示出来。开发者可能使用了Python的图形库,如matplotlib或tkinter,来创建交互式的图表。用户可以选择不同的音阶、模式和调性,程序会...
打开".a7p"文件,我们可以看到Authorware的工作流图,其中每个图标对应着不同的功能模块。 4. 主要图标解析: - "Initialize"图标:用于初始化游戏状态,如设置分数、游戏难度、彩珠位置等。 - "User Interaction...
3. **工作流支持**:Orchard MVC内置了工作流引擎,可以用于实现复杂的业务逻辑,如内容审批流程、用户权限管理等。 4. **内容管理系统**:作为CMS,Orchard MVC提供了丰富的内容管理功能,包括内容类型定义、内容...
对于频繁需要取色的用户,这样的个性化设置能大大提高工作流的效率。 在操作上,TakeColor取色器保持了极简的设计风格。界面直观,易于上手,无论是初学者还是经验丰富的专业人员都能快速适应。而且,作为一个独立...
总的来说,源代码是程序员创作软件的心脏,包含了程序的逻辑、结构和控制流。在这个案例中,我们看到了如何使用MFC来构建一个简单的Windows GUI应用程序,并通过源代码理解其内部工作原理。这种编程方式对于学习...
在给定的压缩包文件中,可以看到一些可能的项目源码,如"jbpmFlow.rar"可能涉及到工作流管理系统,使用了Business Process Execution Language (BPEL) 或者Java Business Process Management (jBPM) 技术。...
05华为云开发工作流实验mp4 06JsON数据格式mp4 07SON实验mp4 08XM数据格式m 09XML实验mp4 10YAML数据格式mp4 11YAML实验mp4 12模型化编程理论mp4 13 NetConf编程实验mp4 14 Telemetry技术介绍mp4 15 Telemetry与gRPC...
开发者可以通过阅读和分析这些源代码,了解AVS编码的内部工作机制,包括熵编码的H.264类似结构、运动估计和补偿策略、帧间和帧内预测模式等。此外,源代码也可能包含错误处理、内存管理以及与硬件加速接口的集成等...
标题中的“漂亮的简单的超文本编辑器”暗示我们讨论的是一款设计简洁、易用的文本编辑软件,主要用于...同时,我们也会涉及自定义编辑器的可能性,包括自定义功能、集成特定工作流等,以满足不同开发者的个性化需求。
总的来说,Typora是一款高效、易用且功能强大的笔记工具,无论你是初学者还是经验丰富的Markdown用户,都能在其中找到适合自己的工作流。它将Markdown的简洁性和富文本的呈现完美结合,为内容创作者提供了一种全新的...
总的来说,spacedesk是一个极具创新性和实用性的工具,它打破了传统桌面环境的局限,将移动设备巧妙地融入到多屏工作流中,让工作和创作变得更加灵活和高效。无论您是在家中还是办公室,只要有合适的设备,就能轻松...
对于从事相关领域工作的专业人士而言,掌握这些知识点不仅能帮助他们更好地完成工作,还有助于开拓新的业务方向。例如,开发者可以通过制作并出售高质量的视频教程或付费观看模板来增加收入;网站管理员则可以通过...