这个例子在我们的项目中已经实际应用,所以我想叫做实例应该没什么问题。这是一个经典的设备申请审批流程,大家很多时候已经用其他的办法实现过了。本实例包括三个工程:EquipmentApply(设备申请exe)、EquipmentApprove(设备审批exe)、EquipmentApplyWorkflowLib(申请审批流程库dll)。首先新建Windows应用程序项目EquipmentApply,界面如图所示:
添加Windows应用程序项目EquipmentApprove,界面如图所示:
添加Workflow中的Sequential Workflow Library项目EquipmentApplyWorkflowLib,建立流程图:
该流程包括三个外部方法Activities(CreateApply、ApproveApply、EscalateApply)和两个外部事件Activities(EquipmentApprove、ApplyEscalated),一个ListenActivity用于等待外部事件来重新唤起流程。这里头有几个关键的技术点:
(1) 怎么传递流程参数?启动流程实例时把参数装载到Dictionary中作为CreateWorkflow方法的参数传递:
// Fill the Parameters collection for this instance of the workflow
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("CreatedBy", txtCreatedBy.Text);
parameters.Add("EquipmentName", txtName.Text);
parameters.Add("Numbers",StrToInt(txtNumbers.Text));
parameters.Add("Moneys", StrToFloat(txtMoneys.Text));
parameters.Add("Desc", txtDesc.Text);
// Get the type of the workflow
Type type = typeof(EquipmentApplyWorkflowLib.EquipmentApplyWorkflow);
// Start the workflow instance
WorkflowInstance inst = theWorkflowRuntime.CreateWorkflow(type, parameters);
inst.Start();
获取参数是在流程文件中建立相同名称的属性,流程中就可以得到这些参数:
#region 属性
private string m_EquipmentName = "";
public string EquipmentName