WF 自定义活动开发常见问题(进入第二个流程状态,数据传递失败的解决方法)...

这篇博文主要讲一下博主在开发自定义活动时候遇到的问题以及相应的解决方法,首先我们看工作流图:

在创建工作流的时候(也就是上图中第一个State)我们可以使用如下代码:
///   <summary>
        
///  建立工作流
        
///   </summary>
        
///   <param name="workflowID"></param>
        
///   <param name="startParameter"></param>
        
///   <returns> Guid </returns>
         public  Guid NewWorkflow( string  workflowID, TmTpProject startParameter)
        {
            Dictionary
< string object >  inputParameters  =   new  Dictionary < string object > ();
            inputParameters.Add(
" ProjectData " , startParameter);

            
// 启动一个新的工作流
            WorkflowInstance workflowInstance  =  wfRuntime.CreateWorkflow( typeof (TcShare.Workflow.ProjMgrWorkflow), inputParameters);
            workflowInstance.Start();

             return  workflowInstance.InstanceId;
        }
这段代码会初始化工作流实例,持久化当前工作流,并返回当前工作流实例的Guid。
随后我们进行第二个流程状态,进行操作,例如我们执行一下代码:
         public   void  ProjCheckApprove(TmTpCheck model)
        {
            WorkflowInstance instance 
=  wfRuntime.GetWorkflow(model.guid);
            
// WorkflowInstance instance = GetWorkflowByID(model.guid);
            ProjWorkflowService wfService  =  wfRuntime.GetService < ProjWorkflowService > ();
            wfService.RaiseProjectApprove(model);
        }
做一个审核通过操作,传进来一个数据实体,并且确保已经配置好自定义活动中的数据属性,如图:

注意:在一个EventDrivenActivity中加入一个自定义活动,必须在之前放入一个handleExternalEventActivity!
做好此步骤,程序可能会出现几个错误:
1.自定义活动属性为Null,然后报错;

原因是因为该handleExternalEventActivity没有执行Invoked,也没有赋值给工作流内部的数据实体(关于这个问题大家可以浏览” WF GetRuntimeValue 错误的解决方法123“)
一定要做以下参考代码:
public   sealed   partial   class  ProjMgrWorkflow : StateMachineWorkflowActivity
    {
        
#region  Public Data 公共数据实体

        
private  TmTpProject internalProjectData;
        
public  TmTpProject ProjectData
        {
            
get  {  return  internalProjectData; }
            
set  { internalProjectData  =  value; }
        }

        
private  TmTpCheck internalCheckData;
        
public  TmTpCheck ProjectCheckData
        {
            
get  {  return  internalCheckData; }
            
set  { internalCheckData  =  value; }
        }

        
private  TmPpPhase internalPhaseData;
        
public  TmPpPhase ProjectPhaseData
        {
            
get  {  return  internalPhaseData; }
            
set  { internalPhaseData  =  value; }
        }

        
#endregion

        
public  ProjMgrWorkflow()
        {
            InitializeComponent();
        }

        
///   <summary>
        
///  审核项目通过
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  handleCheckApproveExternalEventActivity_Invoked( object  sender, ExternalDataEventArgs e)
        {
            tm_tp_checkEventArgs checkEventArgs 
=  (tm_tp_checkEventArgs)e;
            internalCheckData  =   new  TmTpCheck();
            internalCheckData 
=  checkEventArgs.tm_tp_checkDataProperty;
        }
    }
这段代码的意思是把传进来的数据实体赋值给工作流的内部数据实体,内部数据实体其实就是绑定给了自定义活动的属性,这样子,自定义活动的属性就不会报错说Null啦。

如果大家也遇到同样的问题,但没有看明白该博文的话,可以联系我,进行交流沟通。

ps.博主刚刚开始接触wwf,博文里难免会出现一些表达上和认识上的偏差,希望各位能够予以指出和批评。谢谢。

转载于:https://www.cnblogs.com/Fred_Xu/archive/2009/10/16/wf-Custom-Activity-DependencyProperty-Error.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值