zoukankan      html  css  js  c++  java
  • WF4小试牛刀之用外部方法替代事件方法

    最近公司要求将WF3开发的系统升级到WF4上,顺便做成一个审批类的项目,以后就用她来应付公司其他项目的审批模块。前一段时间有幸参加了VS10新特性的简单培训。想直接通过工具升级到WF4的朋友,估计梦想要破灭了。据了解WF3和WF4是两个不同的产品。寡人不信邪,后来装上VS10打开项目结果发现之前的类库都没了,代码红色警告一大片。无奈之下开始学习WF4的用法。想跟牛人学习WF的猛击这里;经过一段山寨式的学习, 终于要上手了。用过3的难友应该深有体会,4的编写方式是改动最大的。老是思想紊乱,想在Invoked里面写点什么的。真愧当年没学WF之前先学个乾坤大挪移什么的,这时候自废武功,从新吸收WF4,岂不美哉。扯远了,讲讲跟标题相关的东东吧:)

    WF4不支持xaml后台cs文件。也就是说不支持在流程文件中编写业务逻辑代码。WF4的设计思想就是业务与代码完全分离(想写也没门,绕个道还是可以滴,O(∩_∩)O~)。我们之前写的审批前、审批中、审批后事件要怎么处理呢?给微软的哥们发信,回复也肯定了xaml文件不能配合cs文件一起使用。要么写xmal文件将三个事件独立成三个自定义活动,组合起来使用;要么写纯代码的workflow。本来一个自定义活动解决的问题,反而复杂成了三个活动,影响性能不说,还不好看(我们的客户可是要看流程图的)。用纯代码的workflow,那还不如将就WF3呢。两种方式皆不可,幸亏寡人还知道C#有个反射的玩意。废话少说,直接呈上Code 。


            
    /// <summary>
            
    /// 调用外部审批前方法
            
    /// </summary>
            
    /// <param name="context"></param>
            
    /// <param name="agrs"></param>
            public void CallExternalApprovingMethod(System.Activities.NativeActivityContext context, ApprovingEventArgs agrs)
            {
                
    string sApprovingMethod = context.GetValue(this.ApprovingMethod);
                Type approvingClass 
    = context.GetValue(this.ApprovingClass);
                
    // 类名和方法名称非空
                if (approvingClass != null&&!string.IsNullOrEmpty(sApprovingMethod))
                {
                    System.Reflection.MethodInfo method 
    = approvingClass.GetMethod(sApprovingMethod);
                    
    if (method != null)
                    {
                        
    // 方法参数
                        object[] oParams = new object[] { this, agrs };
                        
    // 执行方法
                        method.Invoke(null, oParams);
                    }
                }
            }

            
    /// <summary>
            
    /// 调用外部审批中方法
            
    /// </summary>
            
    /// <param name="context"></param>
            
    /// <param name="agrs"></param>
            public void CallExternalApproveMethod(System.Activities.NativeActivityContext context, ApproveEventArgs agrs)
            {
                
    string sApproveMethod = context.GetValue(this.ApproveMethod);
                Type approveClass 
    = context.GetValue(this.ApproveClass);
                
    // 类名和方法名称非空
                if (approveClass != null && !string.IsNullOrEmpty(sApproveMethod))
                {
                    System.Reflection.MethodInfo method 
    = approveClass.GetMethod(sApproveMethod);
                    
    if (method != null)
                    {
                        
    // 方法参数
                        object[] oParams = new object[] { this, agrs };
                        
    // 执行方法
                        method.Invoke(null, oParams);
                    }
                }
            }

            
    /// <summary>
            
    /// 调用外部审批后方法
            
    /// </summary>
            
    /// <param name="context"></param>
            
    /// <param name="agrs"></param>
            public void CallExternalApprovedMethod(System.Activities.NativeActivityContext context, ApprovedEventArgs agrs)
            {
                
    string sApprovedMethod = context.GetValue(this.ApprovedMethod);
                Type approvedClass 
    = context.GetValue(this.ApprovedClass);
                
    // 类名和方法名称非空
                if (approvedClass != null && !string.IsNullOrEmpty(sApprovedMethod))
                {
                    System.Reflection.MethodInfo method 
    = approvedClass.GetMethod(sApprovedMethod);
                    
    if (method != null)
                    {
                        
    // 方法参数
                        object[] oParams = new object[] { this, agrs };
                        
    // 执行方法
                        method.Invoke(null, oParams);
                    }
                }
            }


     流程设计器上只需要通过设置调用的类名和方法名称即可。



  • 相关阅读:
    CF Hello 2020 E.New Year and Castle Construction
    HTML 简介
    グランドエスケープ
    CF 1244 C
    N皇后解法以及位运算优化
    CF
    动态规划TG.lv(1) (洛谷提高历练地)
    搜索Ex (洛谷提高历练地)
    数字图像处理——图像增强
    数字图像处理——图像的几何变换
  • 原文地址:https://www.cnblogs.com/yizhuqing/p/WF_ExternalMethodReplaceEventMethod.html
Copyright © 2011-2022 走看看