WF 自定义活动开发常见问题(进入第二个流程状态,数据传递失败的解决方法)
2009-10-16 12:50
996 查看
这篇博文主要讲一下博主在开发自定义活动时候遇到的问题以及相应的解决方法,首先我们看工作流图:
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-custom-activity.jpg)
在创建工作流的时候(也就是上图中第一个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);
}
做一个审核通过操作,传进来一个数据实体,并且确保已经配置好自定义活动中的数据属性,如图:
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-GetRuntimeValue-Error.jpg)
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-GetRuntimeValue-Error2.jpg)
注意:在一个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,博文里难免会出现一些表达上和认识上的偏差,希望各位能够予以指出和批评。谢谢。
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-custom-activity.jpg)
在创建工作流的时候(也就是上图中第一个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);
}
做一个审核通过操作,传进来一个数据实体,并且确保已经配置好自定义活动中的数据属性,如图:
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-GetRuntimeValue-Error.jpg)
![](http://images.cnblogs.com/cnblogs_com/fred_xu/wf-GetRuntimeValue-Error2.jpg)
注意:在一个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,博文里难免会出现一些表达上和认识上的偏差,希望各位能够予以指出和批评。谢谢。
相关文章推荐
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
- 嵌入式项目开发调试流程,常见问题,解决方法
- NC57开发常用取值/赋值常用方法及常见问题解决办法
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (-)启动创建好的DBExpress工程时候报错了!
- SVN提交数据(Commit)失败问题(MKACTIVITY ... 403 Forbidden)解决方法
- SVN提交数据(Commit)失败问题(MKACTIVITY ... 403 Forbidden)解决方法
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- asp.net 开发常见问题及解决方法(一)
- Android开发环境搭建和常见问题的解决方法
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
- ViewController调用顺序问题,解决ViewController之间传递数据失败的问题
- vue项目中做编辑功能传递数据时遇到问题的解决方法
- ArcGIS Engine 10 开发常见问题的解决方法
- 使用MinGW开发Win32应用程序常见问题的解决方法
- 微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
- 1.1 linux下mpi开发环境搭建流程及过程中出现的一些问题解决方法。
- WinCE6.0流驱动开发的两种方法及驱动加载失败问题解决
- VS2005+ACCESS2003开发中遇到的“标准表达式中数据类型不匹配”问题解决方法