这篇博文主要讲一下博主在开发自定义活动时候遇到的问题以及相应的解决方法,首先我们看工作流图:
在创建工作流的时候(也就是上图中第一个State)我们可以使用如下代码:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
///
/// 建立工作流
///
///
///
/// Guid
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。
随后我们进行第二个流程状态,进行操作,例如我们执行一下代码:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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,然后报错;
一定要做以下参考代码:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
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();
}
///
/// 审核项目通过
///
///
///
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啦。
如果大家也遇到同样的问题,但没有看明白该博文的话,可以联系我,进行交流沟通。
原文地址:http://www.cnblogs.com/Fred_Xu/archive/2009/10/16/1584443.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-616729/
,如需转载,请注明出处,否则将追究法律责任。