zoukankan      html  css  js  c++  java
  • 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):规则引擎的变化

  • 相关阅读:
    【STM32F429开发板用户手册】第46章 STM32F429的DMA2D应用之刷色块,位图和Alpha混合
    【STM32F429开发板用户手册】第45章 STM32F429的图形加速器DMA2D的基础知识和HAL库API
    【STM32F429开发板用户手册】第44章 STM32F429的LTDC应用之LCD电阻触摸和电容触摸
    【STM32F429开发板用户手册】第43章 STM32F429的LTDC应用之汉字小字库和全字库制作
    【STM32F429开发板用户手册】第42章 STM32F429的LTDC应用之点阵字体和字符编码(重要)
    【STM32F429开发板用户手册】第41章 STM32F429的LTDC应用之LCD汉字显示和2D图形显示
    【STM32F429开发板用户手册】第40章 STM32F429的LCD控制器LTDC基础知识和HAL库API
    【STM32F429开发板用户手册】第39章 STM32F429的FMC总线应用之SDRAM
    【STM32F429开发板用户手册】第38章 STM32F429的FMC总线应用之是32路高速IO扩展
    MDK,IAR,GCC生成库文件的方法(2020-08-04)
  • 原文地址:https://www.cnblogs.com/carysun/p/CustomeActivity.html
Copyright © 2011-2022 走看看