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);
        }
예제 #4
0
        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);
                }
            }
        }
예제 #7
0
        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);
        }