private void CreateProxyWorkItems(SysWorkItem source_work_item, List <SysProcessProxy> proxies) { foreach (SysProcessProxy proxy in proxies) { SysWorkItem item2 = new SysWorkItem { ProcessInstanceId = new int?(base.PI.ProcessInstanceId), ActivityInstanceId = new int?(this.AI.ActivityInstanceId), CreateTime = new DateTime?(DateTime.Now) }; item2.EndTime = null; item2.IsProxy = true; item2.OwnerId = new int?(proxy.ProxyId.Value); item2.ProxyUserId = source_work_item.OwnerId; item2.RelativeObjectId = new int?(base.PI.ObjectId); item2.Status = 0; item2.WorkItemType = 0; item2.WwfBookmarkId = null; item2.ActivityParticipantId = source_work_item.ActivityParticipantId; item2.ParticipantId = source_work_item.ParticipantId; item2.ApproveGroupId = source_work_item.ApproveGroupId; item2.ProxyWorkItemId = new int?(source_work_item.WorkItemId); SysWorkItem wi = item2; if (this.AI.Activity.TimeLimit.HasValue) { wi.DeadLine = new DateTime?(DateTime.Now.AddDays((double)this.AI.Activity.TimeLimit.Value)); } base.PICacheFactory.AddWorkItem(wi, base.PI, this.AI); } }
public string GetWorkItemCompletePageUrl(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai, bool isRelative = true) { string str3; try { SysActivity activity = ai.Activity; if (activity == null) { throw new ApplicationException(string.Format("活动实例:{0}找不到对应活动", ai.ActivityInstanceId)); } if (pi.Process.ProcessCategory == 2) { return(string.Format("../FormWorkflow/FormInstanceApprove.aspx?id={0}", wi.WorkItemId)); } long? pageid = activity.PageId; SysPage page = pi.Process.ProcessEntity.Pages.FirstOrDefault <SysPage>(p => p.ControlId == pageid); if (page == null) { throw new ApplicationException(string.Format("活动:{0}找不到对应页面", activity.ActivityId)); } if (!isRelative) { return(string.Format("{0}_{1}/{2}.aspx?id={3}", new object[] { page.OwnerEntity.OwnerModule.EntityCategory.CategoryName, page.OwnerEntity.OwnerModule.ModuleName, page.PageName, wi.WorkItemId })); } str3 = string.Format("../{0}_{1}/{2}.aspx?id={3}", new object[] { page.OwnerEntity.OwnerModule.EntityCategory.CategoryName, page.OwnerEntity.OwnerModule.ModuleName, page.PageName, wi.WorkItemId }); } catch (Exception exception) { throw exception; } return(str3); }
public override void ProcessMessage(SysWorkflowMessage msg) { SysWorkItem wI = this._engine.WI; SysProcessInstance pI = this._engine.PI; if (!wI.Status.HasValue) { wI.Status = 0; } if (wI.Status.Value != 0x63) { throw new ApplicationException("该工作项的状态已变更"); } Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10); if (msg.NextApproveUserList.Count > 0) { WorkflowMessage item = this._engine.NewCompleteWorkItemWithNextUsersMessage(wI, msg.NextApproveUserList); queue.Enqueue(item); } else { WorkflowMessage message2 = this._engine.NewCompleteWorkItemMessage(wI); queue.Enqueue(message2); } while (queue.Count > 0) { queue.Dequeue().Execute(queue); } this._engine.ProcessInstanceCache.ClearCache(pI.ProcessInstanceId); }
public SysProcessInstance GetProcessInstanceCacheByWorkItem(int workItemId, out SysWorkItem work_item) { Func <SysWorkItem, bool> predicate = null; SysWorkItem item = this._context.FindById <SysWorkItem>(new object[] { workItemId }); if (item == null) { throw new ApplicationException("工作项ID不正确"); } Func <SysActivityInstance, bool> func = null; SysActivityInstance ai = this._context.FindById <SysActivityInstance>(new object[] { item.ActivityInstanceId }); if (ai == null) { throw new ApplicationException("工作项ID不正确"); } SysProcessInstance processInstanceCache = this.GetProcessInstanceCache(ai.ProcessInstanceId.Value); if (func == null) { func = i => i.ActivityInstanceId == ai.ActivityInstanceId; } SysActivityInstance instance2 = processInstanceCache.ActivityInstances.FirstOrDefault <SysActivityInstance>(func); if (predicate == null) { predicate = i => i.WorkItemId == workItemId; } work_item = instance2.WorkItems.FirstOrDefault <SysWorkItem>(predicate); return(processInstanceCache); }
public static void AssertHasGroup(this SysWorkItem wi) { if (!wi.ApproveGroupId.HasValue) { throw new ApplicationException("工作项没有Group"); } }
public static void SureStatus(this SysWorkItem wi) { if (!wi.Status.HasValue) { wi.Status = 0; } }
public string GetWorkItemDisplayText(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai) { string str6; try { SysActivity activity = ai.Activity; if (activity == null) { throw new ApplicationException(string.Format("活动实例:{0}找不到对应活动", ai.ActivityInstanceId)); } SysProcess process = pi.Process; if (process == null) { throw new ApplicationException(string.Format("活动:{0}找不到对应流程", activity.ActivityId)); } string activityName = activity.ActivityName; string processName = process.ProcessName; if (process.ProcessCategory == 2) { return(string.Format("[{0}][{1}]{2}", processName, activityName, pi.FormInstance.FormTitle)); } EntityCache cache = new EntityCache(this._manager); SysEntity processEntity = process.ProcessEntity; string objectDisplayName = cache.GetObjectDisplayName(processEntity, wi.RelativeObjectId.Value); str6 = string.Format("[{0}][{1}]{2}", processName, activityName, objectDisplayName); } catch (Exception exception) { throw exception; } return(str6); }
public T_WorkItemBase InsertWorkItemBase(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai) { T_WorkItemBase base4; try { int num = this._context.GetNextIdentity_Int(false); int num2 = this._context.GetNextIdentity_Int(false); wi.WorkItemId = num; wi.WorkItemBaseId = new int?(num2); string str = this.GetWorkItemDisplayText(wi, pi, ai); string str2 = this.GetWorkItemCompletePageUrl(wi, pi, ai, true); T_WorkItemBase base2 = new T_WorkItemBase { WorkItemBase_Id = num2, WorkItemBase_Name = str, Title = str, CompletePageUrl = str2, CreateTime = new DateTime?(DateTime.Now), StartTime = new DateTime?(DateTime.Now), EndTime = null, IsAllDay = true, WorkItemId = num.ToString(), OwnerId = wi.OwnerId, State = wi.Status }; this._context.Insert(base2); base4 = base2; } catch (Exception exception) { throw exception; } return(base4); }
public string OnWorkItemCreating(T_WorkItemBase wiBase, SysWorkItem wi) { if (this.HasHandler) { return(this.Handler.OnWorkItemCreating(wiBase, wi)); } return(null); }
public CompleteWorkItemMessage(ProcessEngine engine, SysWorkItem wi) : base(engine) { if (wi == null) { throw new ArgumentNullException("wi"); } this._wi = wi; this._ai = wi.ActivityInstance; }
private void CompleteMutexWorkItems(SysWorkItem wi) { Func <SysWorkItem, bool> predicate = null; wi.AssertHasGroup(); int local1 = wi.ApproveGroupId.Value; ICollection <SysWorkItem> workItems = wi.ApproveGroup.WorkItems; SysWorkItem main_item = null; bool? isProxy = wi.IsProxy; if (isProxy.HasValue ? isProxy.GetValueOrDefault() : false) { if (predicate == null) { predicate = p => p.WorkItemId == wi.ProxyWorkItemId; } main_item = (from p in workItems where !p.IsProxy.HasValue || (p.IsProxy == false) select p).FirstOrDefault <SysWorkItem>(predicate); if (main_item == null) { throw new ApplicationException("未被代理的原始工作项,如是4.0版本之前的数据,请先清除数据库,重新发布。"); } if (main_item.WorkItemId != wi.WorkItemId) { main_item.Status = 3; main_item.EndTime = new DateTime?(DateTime.Now); base.PICacheFactory.UpdateWorkItem(main_item, base.PI, base.AI); } } else { main_item = wi; } if (workItems.Where <SysWorkItem>(delegate(SysWorkItem p) { if (p.IsProxy != true) { return(false); } int?proxyWorkItemId = p.ProxyWorkItemId; int workItemId = main_item.WorkItemId; return((proxyWorkItemId.GetValueOrDefault() == workItemId) && proxyWorkItemId.HasValue); }).ToList <SysWorkItem>().Count > 0) { int num = 0; foreach (SysWorkItem item in workItems) { if (((item.Status == 0) || !item.Status.HasValue) && (item.WorkItemId != wi.WorkItemId)) { item.Status = 3; item.EndTime = new DateTime?(DateTime.Now); base.PICacheFactory.UpdateWorkItem(item, base.PI, base.AI); num++; } } } }
private static bool LockWorkItem(SysWorkItem wi, DataContext db) { if (wi.Status != 0) { throw new Exception(string.Format("工作项ID:{0}的状态不为Created", wi.WorkItemId)); } wi.Status = 0x63; db.UpdatePartial <SysWorkItem>(wi, p => new { Status = p.Status }); return(true); }
private void CreateWorkItem(IUser user, SysWorkItemApproveGroup group) { SysWorkItem wi = new SysWorkItem { ProcessInstanceId = new int?(base.PI.ProcessInstanceId), ActivityInstanceId = new int?(this.AI.ActivityInstanceId), CreateTime = new DateTime?(DateTime.Now), EndTime = null, IsProxy = false, OwnerId = new int?(user.User_ID), ProxyUserId = null, RelativeObjectId = new int?(base.PI.ObjectId), Status = 0, WorkItemType = 0, WwfBookmarkId = null, ActivityParticipantId = group.ActivityParticipantId, ParticipantId = group.ParticipantId, ApproveGroupId = new int?(group.ApproveGroupId) }; IApproveUser approveUser = this.GetApproveUser(user); if (approveUser != null) { wi.IsMajor = approveUser.IsMajor; wi.FlagInt = approveUser.FlagInt; wi.FlagString = approveUser.FlagString; } if (this.AI.Activity.TimeLimit.HasValue) { wi.DeadLine = new DateTime?(DateTime.Now.AddDays((double)this.AI.Activity.TimeLimit.Value)); } base.PICacheFactory.AddWorkItem(wi, base.PI, this.AI); DateTime curr_time = DateTime.Now; List <SysProcessProxy> proxies = base.PI.Process.ProcessProxies.Where <SysProcessProxy>(delegate(SysProcessProxy p) { if ((p.OwnerId.Value == user.User_ID) && (p.StartTime.Value <= curr_time)) { DateTime?endTime = p.EndTime; DateTime time = curr_time; if (endTime.HasValue && ((endTime.GetValueOrDefault() >= time))) { return(p.Status == 0); } } return(false); }).ToList <SysProcessProxy>(); if ((proxies != null) && (proxies.Count > 0)) { this.CreateProxyWorkItems(wi, proxies); } }
public void AddWorkItem(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai) { T_WorkItemBase wiBase = this.InsertWorkItemBase(wi, pi, ai); string str = new CustomWorkItemHandler(this.Context).OnWorkItemCreating(wiBase, wi); wi.WwfBookmarkId = str; this.Context.Insert(wi); wi.ProcessInstance = pi; wi.ActivityInstance = ai; ai.WorkItems.Add(wi); wi.ActivityParticipant = ai.Activity.ActivityParticipants.FirstOrDefault <SysActivityParticipant>(i => i.ActivityParticipantId == wi.ActivityParticipantId); wi.ApproveGroup = ai.ApproveGroups.FirstOrDefault <SysWorkItemApproveGroup>(i => i.ApproveGroupId == wi.ApproveGroupId); wi.ApproveGroup.WorkItems.Add(wi); new ActivityRemindHandler(this, pi, ai, ActivityRemindUseTimeType.WorkItemCreate, wi, null).Execute(); }
public override void ProcessMessage(SysWorkflowMessage msg) { if (msg.AddUser && (!msg.AddUserId.HasValue || (msg.AddUserId <= 0))) { throw new ApplicationException("指定了加签,但未指定加签用户"); } SysWorkItem wI = this._engine.WI; SysProcessInstance pI = this._engine.PI; if (!wI.Status.HasValue) { wI.Status = 0; } if (wI.Status.Value == 1) { throw new ApplicationException("该工作项已完成"); } if (wI.Status.Value == 3) { throw new ApplicationException("该工作项已被系统取消"); } if (wI.Status.Value != 0x63) { throw new ApplicationException("该工作项已完成或被取消"); } this._engine.AddInstanceData(wI, msg.ApproveResult, msg.ApproveComment); if (msg.AddUser && (msg.ApproveResult == ApproveResultEnum.Pass)) { this._engine.CreateAddingWorkItem(wI, msg.AddUserId.Value); } Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10); if (msg.NextApproveUserList.Count > 0) { WorkflowMessage item = this._engine.NewCompleteWorkItemWithNextUsersApproveMessage(wI, msg.NextApproveUserList); queue.Enqueue(item); } else { WorkflowMessage message2 = this._engine.NewCompleteWorkItemApproveMessage(wI); queue.Enqueue(message2); } while (queue.Count > 0) { queue.Dequeue().Execute(queue); } this._engine.ProcessInstanceCache.ClearCache(pI.ProcessInstanceId); }
public SysProcessInstance GetProcessInstanceCacheByWorkItem(int workItemId) { SysWorkItem item = this._context.FindById <SysWorkItem>(new object[] { workItemId }); if (item == null) { throw new ApplicationException("工作项ID不正确"); } SysActivityInstance instance = this._context.FindById <SysActivityInstance>(new object[] { item.ActivityInstanceId }); if (instance == null) { throw new ApplicationException("工作项ID不正确"); } return(this.GetProcessInstanceCache(instance.ProcessInstanceId.Value)); }
private bool IsPass(SysWorkItem work_item, SysProcessInstance pi) { EntityData data = new EntityCache(this._piCacheFactory.Manager).GetObject(pi.Process.ActivityEntity, work_item.WorkItemId); if (data == null) { throw new ApplicationException("获取活动数据失败"); } object obj2 = data[ApproveActivityFields.ApproveResult]; if (obj2 == null) { throw new ApplicationException("签核结果为空"); } return(Convert.ToBoolean(obj2)); }
public void UpdateWorkItemBaseState(SysWorkItem wi) { try { if (!wi.WorkItemBaseId.HasValue) { throw new Exception(string.Format("SysWorkItem,Id:{0}没有对应的WorkItemBase", wi.WorkItemId)); } string format = "update T_WorkItemBase set State = {0} where WorkItemBase_Id = {1}"; string sql = string.Format(format, wi.Status, wi.WorkItemBaseId); this._context.ExecuteNonQuery(sql, new DbParameter[0]); } catch (Exception exception) { throw exception; } }
public RemindTemplateModelCreator(ProcessInstanceCacheFactory cache, SysProcessInstance pi, SysActivityInstance ai, UseTimeType useTime, SysWorkItem wi = null, int?result = new int?()) { this._pi = pi; this._ai = ai; this._useTime = useTime; if (wi != null) { this._wi = wi; this._wiOwnerId = wi.OwnerId; } if (result.HasValue) { this._resultType = (ProcessTemplateResultType)result.Value; } this.serverHost = WebConfigAppSettings.GetServerHost(); this._piCacheFactory = cache; }
public virtual string OnWorkItemCreating(T_WorkItemBase wiBase, SysWorkItem wi) { if (WebConfigAppSettings.UseSSOModel) { using (BizDataContext context = new BizDataContext(WebConfigAppSettings.HomeBizDBConnString, true)) { wiBase.WorkItemBase_Id = context.GetNextIdentity_Int(false); context.Insert(wiBase); DbParameter parameter = context.CreateParameter(); parameter.ParameterName = context.AddPrefixToParameterName("OwnerBiz"); parameter.Value = WebConfigAppSettings.ApplicationName; string sql = string.Format("update T_WorkItemBase set OwnerBiz = {0}", parameter.ParameterName); context.ExecuteNonQuery(sql, new DbParameter[] { parameter }); return(wiBase.WorkItemBase_Id.ToString()); } } return(null); }
public WorkItemWrapper(ProcessInstanceCacheFactory cache, SysWorkItem work_item, SysProcessInstance pi) { this._piCacheFactory = cache; this.WorkItem = work_item; bool?isAdded = work_item.IsAdded; this.IsAdd = isAdded.HasValue ? isAdded.GetValueOrDefault() : false; bool?isProxy = work_item.IsProxy; this.IsProxy = isProxy.HasValue ? isProxy.GetValueOrDefault() : false; int?status = work_item.Status; this.IsCompleted = (status.HasValue ? status.GetValueOrDefault() : 0) != 0; this.ApproveResult = null; if (work_item.Status == 1) { this.ApproveResult = new bool?(this.IsPass(work_item, pi)); } }
internal void AddInstanceData(SysWorkItem work_item, ApproveResultEnum approveResult, string approveComment) { SysApproveActivityData data = new SysApproveActivityData { DataId = work_item.WorkItemId, ActivityInstanceId = work_item.ActivityInstanceId, AddingUserId = work_item.AddingUserId, IsAdded = work_item.IsAdded, IsProxy = work_item.IsProxy, ProxyUserId = work_item.ProxyUserId, WorkItemId = new int?(work_item.WorkItemId), ApproveComment = approveComment, ApproveGroupId = work_item.ApproveGroupId, ApproveResult = new int?((int)approveResult), ApproveTime = new DateTime?(DateTime.Now), ApproveUserId = work_item.OwnerId }; this._piCacheFactory.AddApproveData(data); }
public void AddNextApproveUsers(SysWorkItem wi, SysActivityInstance ai, List <IApproveUser> approveUsers) { foreach (IApproveUser user in approveUsers) { SysActivityInstanceApproveUsers users = new SysActivityInstanceApproveUsers { Id = this._context.GetNextIdentity_Int(false), OriginalWorkItemId = new int?(wi.WorkItemId), ProcessInstanceId = ai.ProcessInstanceId, CurrentActivityInstanceId = new int?(ai.ActivityInstanceId), UserId = user.UserId, IsMajor = user.IsMajor, FlagString = user.FlagString, FlagInt = user.FlagInt }; this._context.Insert(users); users.CurrentActivityInstance = ai; users.OriginalWorkItem = wi; ai.UserDefinedApproveUsers.Add(users); } }
/// <summary> /// 初始化 /// </summary> private void Initialize() { int? id = QueryString <int?>("id"); SysWorkItem wi = this.DataHelper.FindById <SysWorkItem>(id); if (wi == null) { throw new Exception("工作项不存在"); } SysActivityInstance ai = this.DataHelper.FindById <SysActivityInstance>(wi.ActivityInstanceId); if (ai == null) { throw new Exception("活动实例不存在"); } SysActivity activity = this.DataHelper.FindById <SysActivity>(ai.ActivityId); if (activity == null) { throw new Exception("活动不存在"); } SysProcessInstance pi = this.DataHelper.FindById <SysProcessInstance>(ai.ProcessInstanceId); if (pi == null) { throw new Exception("流程实例不存在"); } this.WorkItemId = id.Value; this.ProcessInstanceId = pi.ProcessInstanceId; this.ActivityId = activity.ActivityId; this.ActivityDispalyOrder = activity.DisplayOrder ?? 0; this.FormInstanceId = pi.FormInstanceId ?? 0; this.ProcessId = pi.ProcessId.Value; CheckRejectButton(); }
public void UpdateWorkItem(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai) { this.UpdateWorkItemBaseState(wi); this.Context.Update(wi); if (wi.Status == 1) { CustomWorkItemHandler handler = new CustomWorkItemHandler(this.Context); int wiBaseId = wi.WorkItemBaseId.Value; int workItemId = wi.WorkItemId; string wwfBookmarkId = wi.WwfBookmarkId; handler.OnWorkItemCompleted(wiBaseId, workItemId, wwfBookmarkId); if (ai.Activity.ActivityType == 6) { WorkItemWrapper wrapper = new WorkItemWrapper(this, wi, pi); int? result = new int?(CompleteWorkItemMessage_Approve.ConvertBoolToApproveResult(wrapper.ApproveResult.Value)); new ActivityRemindHandler(this, pi, ai, ActivityRemindUseTimeType.WorkItemFinished, wi, result).Execute(); } else { new ActivityRemindHandler(this, pi, ai, ActivityRemindUseTimeType.WorkItemFinished, wi, null).Execute(); } } }
internal void CreateAddingWorkItem(SysWorkItem work_item, int addUserId) { SysWorkItem wi = new SysWorkItem { ProcessInstanceId = work_item.ProcessInstanceId, ActivityInstanceId = work_item.ActivityInstanceId, ActivityParticipantId = null, ParticipantId = null, IsAdded = true, ProxyUserId = work_item.OwnerId, ProxyWorkItemId = new int?(work_item.WorkItemId), AddingUserId = work_item.OwnerId, ApproveGroupId = work_item.ApproveGroupId, CreateTime = new DateTime?(DateTime.Now), EndTime = null, IsProxy = false, OwnerId = new int?(addUserId), RelativeObjectId = work_item.RelativeObjectId, Status = 0, WorkItemType = 0, WwfBookmarkId = null }; this._piCacheFactory.AddWorkItem(wi, this.PI, work_item.ActivityInstance); }
public CompleteWorkItemWithNextUsersMessage_Approve(ProcessEngine engine, SysWorkItem wi, List <IApproveUser> nextApproveUsers) : base(engine, wi, nextApproveUsers) { }
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); }
public CompleteWorkItemSelfMessage_Approve(ProcessEngine engine, SysWorkItem wi) : base(engine, wi) { }