private static Guid CreateAndRun(IDictionary<string, object> data, Activity activity) { SqlWorkflowInstanceStore instanceStore = new SqlWorkflowInstanceStore(ConnectString); WorkflowApplication application = new WorkflowApplication(activity, data); application.InstanceStore = instanceStore; application.PersistableIdle = (e) => { return PersistableIdleAction.Unload; }; application.Persist(); Guid id = application.Id; application.Run(); return id; }
/// <summary> /// 创建并启动一个工作流,在申请时候触发 /// </summary> /// <param name="meeting">申请时所填表单的数据</param> /// <returns>返回一个Guid</returns> public static Guid CreateAndRun(Model.Meeting meeting, Dictionary<int, int> d_EquipmentCount,Dictionary<string,string> MeetingUserNameAndEmail,Model.MeetingRoom MeetingRoomIDAndName) { SqlWorkflowInstanceStore instanceStore = new SqlWorkflowInstanceStore(connectionString); InstanceView view = instanceStore.Execute(instanceStore.CreateInstanceHandle(), new CreateWorkflowOwnerCommand(),TimeSpan.FromDays(30)); instanceStore.DefaultInstanceOwner = view.InstanceOwner; IDictionary<string, object> input = new Dictionary<string, object>(); input.Add("Request",meeting); input.Add("EquipmentCount",d_EquipmentCount); input.Add("MeetingUserEmailFrom", MeetingUserNameAndEmail); input.Add("MeetingRoomIDAndName", MeetingRoomIDAndName); WorkflowApplication application = new WorkflowApplication(new MeetingApply(),input); application.InstanceStore = instanceStore; application.PersistableIdle = (e) => { instanceUnloaded.Set(); return PersistableIdleAction.Unload; }; application.Unloaded = (e) => { instanceUnloaded.Set(); }; application.OnUnhandledException = (ex) => { return UnhandledExceptionAction.Terminate; }; Guid id = application.Id; application.Persist(); application.Run(); instanceUnloaded.WaitOne(); return id; }
static void StartAndUnloadInstance() { WorkflowApplication application = new WorkflowApplication(activity); application.InstanceStore = instanceStore; //returning IdleAction.Unload instructs the WorkflowApplication to persists application state and remove it from memory application.PersistableIdle = (e) => { return PersistableIdleAction.Unload; }; application.Unloaded = (e) => { instanceUnloaded.Set(); }; //This call is not required //Calling persist here captures the application durably before it has been started application.Persist(); id = application.Id; application.Run(); instanceUnloaded.WaitOne(); }