public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (ai.ToTransitionInstances.Count != 1) { throw new ApplicationException(string.Format("连接线实例不正确,AI:{0}", ai.ActivityInstanceId)); } SysTransitionInstance instance = ai.ToTransitionInstances.First <SysTransitionInstance>(); SysActivityInstance preActivityInstance = instance.PreActivityInstance; if (preActivityInstance == null) { throw new ApplicationException(string.Format("获得上一个活动实例失败,ID:{0}", instance.PostActivityInstanceId)); } if (preActivityInstance.Activity == null) { throw new ApplicationException(string.Format("获得上一个活动定义失败,ID:{0}", preActivityInstance.ActivityId)); } List <int> list = (from p in preActivityInstance.WorkItems select p.OwnerId.Value).Distinct <int>().ToList <int>(); List <IUser> source = new List <IUser>(); foreach (int num in list) { IUser userById = base._orgProxy.GetUserById(num); if (userById != null) { source.Add(userById); } } return(source.ToList <IUser>()); }
public void AddTransitionInstance(SysTransitionInstance ti, SysActivityInstance preAI, SysActivityInstance postAI) { this._context.Insert(ti); ti.PreActivityInstance = preAI; ti.PostActivityInstance = postAI; preAI.FromTransitionInstances.Add(ti); postAI.ToTransitionInstances.Add(ti); ti.Transition = preAI.ProcessInstance.Process.Transitions.FirstOrDefault <SysTransition>(i => i.TransitionId == ti.TransitionId); }
private void CreateTransitionInstance(SysActivityInstance postAi, SysTransition tran) { SysTransitionInstance ti = new SysTransitionInstance { ProcessInstanceId = new int?(base.PI.ProcessInstanceId), PreActivityInstanceId = new int?(this.AI.ActivityInstanceId), PostActivityInstanceId = new int?(postAi.ActivityInstanceId), TransitionId = new long?(tran.TransitionId), TransitionInstanceId = base.Manager.GetNextIdentity() }; base.PICacheFactory.AddTransitionInstance(ti, this.AI, postAi); }
private void GetUserIdList(SysActivityInstance ai, List <int> result) { SysTransitionInstance instance = ai.ToTransitionInstances.FirstOrDefault <SysTransitionInstance>(); if (instance != null) { SysActivityInstance preActivityInstance = instance.PreActivityInstance; List <int> collection = (from i in preActivityInstance.WorkItems select i.OwnerId.Value).ToList <int>(); result.AddRange(collection); this.GetUserIdList(preActivityInstance, result); } }
private void CopyActivityInstanceData() { List <SysTransitionInstance> list = this.AI.ToTransitionInstances.ToList <SysTransitionInstance>(); if (list.Count == 0) { throw new ApplicationException("没有进入此活动的转换实例"); } SysTransitionInstance instance = list[0]; SysEntity activityEntity = instance.PreActivityInstance.Activity.Process.ActivityEntity; EntityData data = new EntityCache(base.Manager).GetObject(activityEntity, instance.PreActivityInstanceId.Value); if (data != null) { string keyFieldName = activityEntity.GetKeyFieldName(); data[keyFieldName] = this.AI.ActivityInstanceId; string activityTypeField = "ActivityType"; if (activityEntity.Fields.ToList <SysField>().FirstOrDefault <SysField>(i => (i.FieldName == activityTypeField)) != null) { data[activityTypeField] = this.AI.Activity.ActivityType; } base.Manager.Insert(data); } }
private void LoadActivityInstance(SysActivityInstance ai, SysProcessInstance pi, SysProcess p) { ai.ProcessInstance = pi; ai.Activity = p.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == ai.ActivityId); string condition = string.Format("ActivityInstanceId = {0}", ai.ActivityInstanceId); ai.WorkItems = this._context.Where <SysWorkItem>(condition, new DbParameter[0]); ai.ApproveGroups = this._context.Where <SysWorkItemApproveGroup>(condition, new DbParameter[0]); ai.FromTransitionInstances = this._context.Where <SysTransitionInstance>(string.Format("PreActivityInstanceId = {0}", ai.ActivityInstanceId), new DbParameter[0]); ai.ToTransitionInstances = this._context.Where <SysTransitionInstance>(string.Format("PostActivityInstanceId = {0}", ai.ActivityInstanceId), new DbParameter[0]); ai.UserDefinedApproveUsers = this._context.Where <SysActivityInstanceApproveUsers>(string.Format("CurrentActivityInstanceId = {0}", ai.ActivityInstanceId), new DbParameter[0]); using (IEnumerator <SysWorkItem> enumerator = ai.WorkItems.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysActivityParticipant, bool> predicate = null; Func <SysWorkItemApproveGroup, bool> func2 = null; SysWorkItem wi = enumerator.Current; wi.ActivityInstance = ai; if (predicate == null) { predicate = i => i.ActivityParticipantId == wi.ActivityParticipantId; } wi.ActivityParticipant = ai.Activity.ActivityParticipants.FirstOrDefault <SysActivityParticipant>(predicate); if (func2 == null) { func2 = i => i.ApproveGroupId == wi.ApproveGroupId; } wi.ApproveGroup = ai.ApproveGroups.FirstOrDefault <SysWorkItemApproveGroup>(func2); } } using (IEnumerator <SysWorkItemApproveGroup> enumerator2 = ai.ApproveGroups.GetEnumerator()) { while (enumerator2.MoveNext()) { Func <SysWorkItem, bool> func3 = null; SysWorkItemApproveGroup ag = enumerator2.Current; ag.ActivityInstance = ai; if (func3 == null) { func3 = delegate(SysWorkItem i) { int?approveGroupId = i.ApproveGroupId; int num = ag.ApproveGroupId; return((approveGroupId.GetValueOrDefault() == num) && approveGroupId.HasValue); }; } ag.WorkItems = ai.WorkItems.Where <SysWorkItem>(func3).ToList <SysWorkItem>(); } } using (IEnumerator <SysTransitionInstance> enumerator3 = ai.FromTransitionInstances.GetEnumerator()) { while (enumerator3.MoveNext()) { Func <SysActivityInstance, bool> func4 = null; SysTransitionInstance fti = enumerator3.Current; if (func4 == null) { func4 = x => x.ActivityInstanceId == fti.PostActivityInstanceId; } fti.PostActivityInstance = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(func4); fti.PreActivityInstance = ai; } } using (IEnumerator <SysTransitionInstance> enumerator4 = ai.ToTransitionInstances.GetEnumerator()) { while (enumerator4.MoveNext()) { Func <SysActivityInstance, bool> func5 = null; SysTransitionInstance tti = enumerator4.Current; tti.PostActivityInstance = ai; if (func5 == null) { func5 = x => x.ActivityInstanceId == tti.PreActivityInstanceId; } tti.PreActivityInstance = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(func5); } } }
internal SysProcessInstance LoadProcessInstance(long processInstanceId) { SysProcessInstance instance = this._context.FindById <SysProcessInstance>(new object[] { processInstanceId }); if (instance == null) { throw new ApplicationException("流程实例ID不正确"); } if (instance.FormInstanceId.HasValue) { instance.FormInstance = this._context.FindById <SysFormInstance>(new object[] { instance.FormInstanceId }); if (instance.FormInstance == null) { throw new ApplicationException("流程实例关联表单实例不存在"); } } string condition = string.Format("ProcessInstanceId = {0}", instance.ProcessInstanceId); List <SysActivityInstance> list = this._context.Where <SysActivityInstance>(condition, new DbParameter[0]); List <SysWorkItem> source = this._context.Where <SysWorkItem>(condition, new DbParameter[0]); List <SysWorkItemApproveGroup> list3 = this._context.Where <SysWorkItemApproveGroup>(condition, new DbParameter[0]); List <SysTransitionInstance> list4 = this._context.Where <SysTransitionInstance>(condition, new DbParameter[0]); List <SysActivityInstanceApproveUsers> list5 = this._context.Where <SysActivityInstanceApproveUsers>(condition, new DbParameter[0]); instance.ActivityInstances = list; SysProcess processCache = this._cacheFactory.GetProcessCache(instance.ProcessId.Value); instance.Process = processCache; using (IEnumerator <SysActivityInstance> enumerator = instance.ActivityInstances.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysActivity, bool> predicate = null; Func <SysWorkItem, bool> func7 = null; Func <SysWorkItemApproveGroup, bool> func8 = null; Func <SysTransitionInstance, bool> func9 = null; Func <SysTransitionInstance, bool> func10 = null; Func <SysActivityInstanceApproveUsers, bool> func11 = null; SysActivityInstance ai = enumerator.Current; ai.ProcessInstance = instance; if (predicate == null) { predicate = i => i.ActivityId == ai.ActivityId; } ai.Activity = processCache.Activities.FirstOrDefault <SysActivity>(predicate); if (func7 == null) { func7 = delegate(SysWorkItem i) { int?activityInstanceId = i.ActivityInstanceId; int num = ai.ActivityInstanceId; return((activityInstanceId.GetValueOrDefault() == num) && activityInstanceId.HasValue); }; } ai.WorkItems = source.Where <SysWorkItem>(func7).ToList <SysWorkItem>(); if (func8 == null) { func8 = delegate(SysWorkItemApproveGroup i) { int?activityInstanceId = i.ActivityInstanceId; int num = ai.ActivityInstanceId; return((activityInstanceId.GetValueOrDefault() == num) && activityInstanceId.HasValue); }; } ai.ApproveGroups = list3.Where <SysWorkItemApproveGroup>(func8).ToList <SysWorkItemApproveGroup>(); if (func9 == null) { func9 = delegate(SysTransitionInstance i) { int?preActivityInstanceId = i.PreActivityInstanceId; int activityInstanceId = ai.ActivityInstanceId; return((preActivityInstanceId.GetValueOrDefault() == activityInstanceId) && preActivityInstanceId.HasValue); }; } ai.FromTransitionInstances = list4.Where <SysTransitionInstance>(func9).ToList <SysTransitionInstance>(); if (func10 == null) { func10 = delegate(SysTransitionInstance i) { int?postActivityInstanceId = i.PostActivityInstanceId; int activityInstanceId = ai.ActivityInstanceId; return((postActivityInstanceId.GetValueOrDefault() == activityInstanceId) && postActivityInstanceId.HasValue); }; } ai.ToTransitionInstances = list4.Where <SysTransitionInstance>(func10).ToList <SysTransitionInstance>(); if (func11 == null) { func11 = delegate(SysActivityInstanceApproveUsers i) { int?currentActivityInstanceId = i.CurrentActivityInstanceId; int activityInstanceId = ai.ActivityInstanceId; return((currentActivityInstanceId.GetValueOrDefault() == activityInstanceId) && currentActivityInstanceId.HasValue); }; } ai.UserDefinedApproveUsers = list5.Where <SysActivityInstanceApproveUsers>(func11).ToList <SysActivityInstanceApproveUsers>(); using (IEnumerator <SysWorkItem> enumerator2 = ai.WorkItems.GetEnumerator()) { while (enumerator2.MoveNext()) { Func <SysActivityParticipant, bool> func = null; Func <SysWorkItemApproveGroup, bool> func2 = null; SysWorkItem wi = enumerator2.Current; wi.ProcessInstance = instance; wi.ActivityInstance = ai; if (func == null) { func = i => i.ActivityParticipantId == wi.ActivityParticipantId; } wi.ActivityParticipant = ai.Activity.ActivityParticipants.FirstOrDefault <SysActivityParticipant>(func); if (func2 == null) { func2 = i => i.ApproveGroupId == wi.ApproveGroupId; } wi.ApproveGroup = ai.ApproveGroups.FirstOrDefault <SysWorkItemApproveGroup>(func2); } } using (IEnumerator <SysWorkItemApproveGroup> enumerator3 = ai.ApproveGroups.GetEnumerator()) { while (enumerator3.MoveNext()) { Func <SysWorkItem, bool> func3 = null; SysWorkItemApproveGroup ag = enumerator3.Current; ag.ActivityInstance = ai; if (func3 == null) { func3 = delegate(SysWorkItem i) { int?approveGroupId = i.ApproveGroupId; int num = ag.ApproveGroupId; return((approveGroupId.GetValueOrDefault() == num) && approveGroupId.HasValue); }; } ag.WorkItems = ai.WorkItems.Where <SysWorkItem>(func3).ToList <SysWorkItem>(); } } using (IEnumerator <SysTransitionInstance> enumerator4 = ai.FromTransitionInstances.GetEnumerator()) { while (enumerator4.MoveNext()) { Func <SysActivityInstance, bool> func4 = null; SysTransitionInstance fti = enumerator4.Current; if (func4 == null) { func4 = x => x.ActivityInstanceId == fti.PostActivityInstanceId; } fti.PostActivityInstance = instance.ActivityInstances.FirstOrDefault <SysActivityInstance>(func4); fti.PreActivityInstance = ai; } } using (IEnumerator <SysTransitionInstance> enumerator5 = ai.ToTransitionInstances.GetEnumerator()) { while (enumerator5.MoveNext()) { Func <SysActivityInstance, bool> func5 = null; SysTransitionInstance tti = enumerator5.Current; tti.PostActivityInstance = ai; if (func5 == null) { func5 = x => x.ActivityInstanceId == tti.PreActivityInstanceId; } tti.PreActivityInstance = instance.ActivityInstances.FirstOrDefault <SysActivityInstance>(func5); } continue; } } } return(instance); }