WF4.0 Beta1之旅(6):自定义活动

简介:

一:程序集,命名空间,活动变化

WF4并非是在原有WF3.x上的改进,而是全新的开发有新的命名空间,程序集,原WF3的部分会继续保留这主要是为了兼容,下面的表格告诉你具体的变化:

1.程序集的变化
WF3.x程序集 WF4程序集
System.Workflow.Activities.dll System.Activities.dll
System.Workflow.ComponentModel.dll System.Activities.dll
System.WorkflowServices.dll System.ServiceModel.Activities.dll
2.名空间的变化
WF3.x命名空间 WF4命名空间
System.Workflow.Activities System.Activities.Statements
System.Workflow.ComponentModel System.Activities
System.WorkflowServices System.ServiceModel.Activities

3.活动的变化

WF3.x活动 WF4活动
CallExternalMethodActivity Send
CancellationHandlerActivity CancellationScope
CodeActivity

CodeActivity/NativeActivity

CompensateActivity Compensate
CompensatableSequenceActivity CompensableActivity
ConditionedActivityGroup 可通过其他方式实现
DelayActivity Delay
EventHandlingScopeActivity 暂无
FaultHandlersActivity TryCatch
HandleExternalEventActivity Receive
IfElseActivity If
InvokeWebServiceActivity Send
InvokeWorkflowActivity 暂无
ListenActivity Pick
ParallelActivity Parallel
PolicyActivity 暂无
ReplicatorActivity ForEach, ParallelForEach
SendActivity Send
ReceiveActivity Receive
SequenceActivity, SequentialWorkflowActivity Sequence
StateMachineWorkflowActivity 暂无
SuspendActivity
SynchronizationScopeActivity
TerminateActivity
ThrowActivity Throw
TransactionScopeActivity TransactionScope
CompensatableTransactionScopeActivity TransactionScope + CompensableActivity
WebServiceFaultActivity 整合为工作流服务
WebServiceInputActivity 整合为工作流服务
WebServiceOutputActivity 整合为工作流服务
WhileActivity While

 

二:自定义活动

1.活动基类继承关系:

2.WorkflowElement 是所有活动的基类,Activity,CodeActivity,DynamicActivity,NativeActivity活动均继承于该类,DynamicActivity是Sealed不能用于
自定义活动。

3.可以使用设计器方式来可视化的设计自定义活动,如下图:

4.使用代码的方式创建自定义活动,我们需要继承自CodeActivity和NativeActivity活动,这两个活动的区别是他们的Execute方法所带的上下文环境不同,
CodeActivity为CodeActivityContext,它只是一个简化版的上下文环境,对Runtime没有完全的访问权限,而NativeActivity的上下文环境
ActivityExecutionContext,ActivityExecutionContext支持scheduling,取消子活动的执行,持久化的支持,书签的支持等等对runtime有完全的访问权限。

5.CodeActivity和NativeActivity都有泛型版的,一般我们在创建需要返回值的活动时使用泛型版本,泛型版本的已经有一个OutArgument<TResult>的变量,
这个我们可以通过反编译WorkflowElement<TResult>看出,如下:

[TypeConverter(typeof(ValueExpressionConverter)), ValueSerializer(typeof(ValueExpressionValueSerializer))]
public abstract class WorkflowElement<TResult> : WorkflowElement, IActivityWithResult
{    
    // Fields
    private OutArgument<TResult> result;
    
    // Methods
    internal WorkflowElement();
    internal void ExecuteWithTryGetValue(ActivityContext context);
    public static WorkflowElement<TResult> FromValue(TResult constValue);
    public static WorkflowElement<TResult> FromVariable(Variable variable);
    public static WorkflowElement<TResult> FromVariable(Variable<TResult> variable);
    internal IList<RuntimeArgument> GetValueExpressionArguments();
    public static implicit operator WorkflowElement<TResult>(Variable<TResult> variable);
    public static implicit operator WorkflowElement<TResult>(TResult constValue);
    public static implicit operator WorkflowElement<TResult>(Variable variable);
    internal virtual bool TryGetValue(LocationEnvironment environment, out TResult value);
    
    // Properties
    [DefaultValue((string) null)]
    public OutArgument<TResult> Result { get; set; }
    Type IActivityWithResult.ExpressionType { get; }
    OutArgument IActivityWithResult.Result { get; set; }
}

6.与WF3.x中开发自定义活动不同的是在WF3中我们使用依赖属性来绑定数据,在WF4中我们使用In参数或Out参数及变量代替。另外在WF3.x中我们重写
Execute方法时需要返回ActivityExecutionState,WF4中不需要返回值,因为WF4的Runtime会自动判断,透明了。

相关文章:

WF4.0 Beta1之旅(1):基本介绍
WF4.0 Beta1之旅(2):异常处理
WF4.0 Beta1之旅(3):全新的FlowChart
WF4.0 Beta1之旅(4):Bookmark的使用
WF4.0 Beta1之旅(5):规则引擎的变化


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/07/23/CustomeActivity.html,如需转载请自行联系原作者

相关文章
|
Windows
解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。
.NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。
2601 0
|
弹性计算 运维 自然语言处理
开发者评测|操作系统智能助手OS Copilot
OS Copilot 是阿里云针对Linux操作系统推出的一款智能助手,它利用大模型技术提供自然语言问答、辅助命令执行和系统运维调优等功能,旨在提高Alibaba Cloud Linux的使用效率。OS Copilot在新人上手时并不简单,文档指引不够清晰,存在一些步骤无法顺利执行的问题,比如环境配置和命令执行。此外,产品目前仅支持Alibaba Cloud Linux,限制了其应用范围。虽然OS Copilot在一些基本功能上表现尚可,如解答问题和编写简单脚本,但在处理复杂任务或自动化运维时显得不足。总体而言,OS Copilot对新手和阿里云环境有一定的帮助,但功能和使用体验仍有改进空间。
|
弹性计算 分布式计算 DataWorks
MaxCompute操作报错合集之运行pyodps报错超时,该如何排查
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
260 6
|
消息中间件 Java 测试技术
Java中的软件架构重构与升级策略
Java中的软件架构重构与升级策略
|
存储 编解码 Python
Python GDAL基于经、纬度提取大量遥感影像中相同位置处像元的数值
【2月更文挑战第8天】本文介绍基于Python语言中的gdal模块,对2景不同的遥感影像加以对应位置像素值匹配的方法——即基于一景遥感影像的每一个像元,提取另一景遥感影像中,与之空间位置相同的像元的像素值的方法~
425 1
Python GDAL基于经、纬度提取大量遥感影像中相同位置处像元的数值
|
定位技术 数据处理
ptp 时钟同步
ptp 时钟同步
633 0
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
162 2
|
SQL Java 数据库连接
Spring 模板技术JdbcTemplate
Spring 模板技术JdbcTemplate
93 0
Spring 模板技术JdbcTemplate