/// <summary> /// 保存工作流实例 /// </summary> /// <param name="instance"></param> protected override StateMachineWorkflowInstance SaveWorkflowInstance(StateMachineWorkflowInstance instance) { foreach (Activity activity in instance.ExecutedActivities) { AddApprovalActivity(activity); } NHStateMachineInstance nHInstance = dao.GetById(instance.Id, false); ConvertNHFromInstance(instance, nHInstance); dao.Save(nHInstance); return(instance); }
/// <summary> /// 插入一条新的工作流 /// </summary> /// <param name="instance"></param> protected override StateMachineWorkflowInstance InsertWorkflowInstance(StateMachineWorkflowInstance instance) { foreach (Activity activity in instance.ExecutedActivities) { AddApprovalActivity(activity); } NHStateMachineInstance nHInstance = new NHStateMachineInstance(); nHInstance.Id = instance.Id; ConvertNHFromInstance(instance, nHInstance); dao.Save(nHInstance); return(instance); }
/// <summary> /// 将NHStateMachineInstance对象反序列化为状态机工作流对象 /// </summary> /// <param name="instance">The instance.</param> /// <param name="isAttachMore">是否需要加载其他信息:该实例所有执行动作的实例</param> /// <returns></returns> private StateMachineWorkflowInstance ConvertNHToInstance(NHStateMachineInstance instance, bool isAttachMore) { StateMachineWorkflowInstance newInstance = new StateMachineWorkflowInstance(); newInstance.WorkflowName = instance.WorkflowName; newInstance.EaId = instance.EaId; newInstance.Id = instance.Id; if (!string.IsNullOrEmpty(instance.ParentId)) { newInstance.ParentId = new Guid(instance.ParentId); } newInstance.PersistTime = instance.PersistTime; newInstance.Properties.Add("UnitCode", instance.CreaterUnit); newInstance.Properties.Add("CreaterUserId", instance.CreaterUserId); newInstance.StateName = instance.StateName; if (!string.IsNullOrEmpty(instance.Children)) { string[] childrenId = instance.Children.Split(';'); List <Guid> childrenIds = new List <Guid>(); for (int i = 0; i < childrenId.Length; i++) { Guid childId = new Guid(childrenId[i]); childrenIds.Add(childId); } newInstance.ChildrenId = childrenIds; } if (!string.IsNullOrEmpty(instance.StateRecord)) { string[] stateNames = instance.StateRecord.Split(';'); newInstance.StateRecordNames = new List <string>(stateNames); } if (isAttachMore) { if (!string.IsNullOrEmpty(instance.ExecuteActivitiesIds)) { string[] ids = instance.ExecuteActivitiesIds.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); List <long> allIds = new List <long>(); for (int i = 0; i < ids.Length; i++) { long activityId; if (long.TryParse(ids[i], out activityId)) { allIds.Add(activityId); } } newInstance.ExecutedActivities.AddRange(GetApprovalActivitys(allIds.ToArray())); } } return(newInstance); }
/// <summary> /// 获取某实例 /// </summary> /// <param name="id">实例Id</param> /// <param name="isAttachMore">是否装载更多信息</param> /// <returns></returns> protected override StateMachineWorkflowInstance GetWorkflowInstance(Guid id, bool isAttachMore) { List <NHStateMachineInstance> instanceList = dao.GetInstanceById(id); if (instanceList == null || instanceList.Count == 0) { throw new ApplicationException(string.Format("\"{0}\" entity cannot found!", id)); } else { NHStateMachineInstance nHInstance = instanceList[0]; return(ConvertNHToInstance(nHInstance, isAttachMore)); } }
/// <summary> /// 将状态机工作流实例序列化转换为NHStateMachineInstance /// </summary> /// <param name="instance">The instance.</param> /// <param name="nHInstance">The n H instance.</param> private void ConvertNHFromInstance(StateMachineWorkflowInstance instance, NHStateMachineInstance nHInstance) { nHInstance.EaId = instance.EaId; if (instance.ParentId != Guid.Empty) { nHInstance.ParentId = instance.ParentId.ToString(); } nHInstance.WorkflowName = instance.WorkflowName; nHInstance.StateName = instance.StateName; nHInstance.CreaterUserId = instance.Properties["CreaterUserId"]; nHInstance.CreaterUnit = instance.Properties["UnitCode"]; nHInstance.PersistTime = instance.PersistTime; nHInstance.TypeName = typeof(StateMachineWorkflowInstance).Name; if (instance.ChildrenId != null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < instance.ChildrenId.Count; i++) { if (i != 0) { sb.Append(";"); } sb.Append(instance.ChildrenId[i].ToString()); } nHInstance.Children = sb.ToString(); } else { nHInstance.Children = string.Empty; } if (instance.ExecutedActivities != null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < instance.ExecutedActivities.Count; i++) { if (i != 0) { sb.Append(";"); } sb.Append(instance.ExecutedActivities[i].Id.ToString()); } nHInstance.ExecuteActivitiesIds = sb.ToString(); } else { nHInstance.ExecuteActivitiesIds = string.Empty; } if (instance.StateRecordNames != null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < instance.StateRecordNames.Count; i++) { if (i != 0) { sb.Append(";"); } sb.Append(instance.StateRecordNames[i]); } nHInstance.StateRecord = sb.ToString(); } else { nHInstance.StateRecord = string.Empty; } }