/// <summary> /// 流程实例持久化 /// </summary> /// <param name="Process"></param> public static void Create(ProcessInstance Process) { //var _IBPMProcessTaskIDMapService = UnityContainerHelper.GetServer<IBPMProcessTaskIDMapService>(); //var _IBPMProcessInstanceService = UnityContainerHelper.GetServer<IBPMProcessInstanceService>(); //var _IBPMTaskInstanceService = UnityContainerHelper.GetServer<IBPMTaskInstanceService>(); var _IBPMProcessTaskIDMapService = new BPMProcessTaskIDMapService(); var _IBPMProcessInstanceService = new BPMProcessInstanceService(); var _IBPMTaskInstanceService = new BPMTaskInstanceService(); _IBPMProcessInstanceService.Add(new BPMProcessInstanceEntity() { ID = new Guid(Process.ID), CreateUser = Process.CreateUser, Name = Process.Name, Status = (int)Process.Status, Version = Process.Version, StartDate = Process.StartDate, }); foreach (var item in Process.ModelInstanceIDMaps) { _IBPMProcessTaskIDMapService.Add(new BPMProcessTaskIDMapEntity() { ProcessID = new Guid(Process.ID), TaskID = new Guid(item.Value), TaskKey = item.Key }); } foreach (var item in Process.Tasks) { var task = new BPMTaskInstanceInfo() { ID = new Guid(item.Key), ProcessID = new Guid(Process.ID), Name = item.Value.Name, Status = (int)item.Value.Status, Type = (int)item.Value.Type, UserID = item.Value.UserID, SourceID = item.Value.SourceID }; if (item.Value.From != null) { task.Source = new Guid(item.Value.From); } if (item.Value.To != null) { task.Target = new Guid(item.Value.To); } _IBPMTaskInstanceService.Add(task); } }
/// <summary> /// 恢复流程实例 /// </summary> /// <param name="TaskID"></param> /// <returns></returns> public static ProcessInstance BackUpInstance(string TaskID) { //var _IBPMProcessTaskIDMapService = UnityContainerHelper.GetServer<IBPMProcessTaskIDMapService>(); //var _IBPMProcessInstanceService = UnityContainerHelper.GetServer<IBPMProcessInstanceService>(); //var _IBPMTaskInstanceService = UnityContainerHelper.GetServer<IBPMTaskInstanceService>(); var _IBPMProcessTaskIDMapService = new BPMProcessTaskIDMapService(); var _IBPMProcessInstanceService = new BPMProcessInstanceService(); var _IBPMTaskInstanceService = new BPMTaskInstanceService(); var task = _IBPMTaskInstanceService.Get(new Guid(TaskID)); var tasks = _IBPMTaskInstanceService.GetList(t => t.ProcessID == task.ProcessID); var process = _IBPMProcessInstanceService.Get(task.ProcessID); var idMaps = _IBPMProcessTaskIDMapService.GetList(m => m.ProcessID == task.ProcessID); // 获取流程模板 var def = ProcessModelCache.Instance[process.Name]; // 获取流程的监听者 var _Ob = UnityContainerHelper.GetServer <IObservation>(def.ProcessOb.Name); // 生成流程实例 var pi = new ProcessInstance() { ID = task.ProcessID.ToString(), Name = def.Name, StartDate = process.StartDate, Version = process.Version }; // 编译脚本代码 if (!string.IsNullOrEmpty(def.ConditionCode)) { pi.Compiled = ConditionExpression.Evaluator(def.ConditionCode, def.ID); } // 流程资源 def.Resources.ForEach(r => { var prs = new ProcessResouce() { Key = r.ID, Users = new Dictionary <string, string>() }; r.Users.ForEach(u => { prs.Users.Add(u.ID, u.Name); }); pi.ProcessResouces.Add(r.ID, prs); }); pi.ModelInstanceIDMaps = new Dictionary <string, string>(); idMaps.ForEach(m => { pi.ModelInstanceIDMaps.Add(m.TaskKey, m.TaskID.ToString()); }); pi.OB = _Ob; // 生成流程脚本实例 pi.BackUpTasks(def, tasks); return(pi); }