コード例 #1
0
        public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IDepartment department = null;

            if (part.Param_Participant == null)
            {
                throw new ApplicationException("父部门参与人未指定基于参于人");
            }
            SysProcessParticipant participant = part.Param_Participant;

            if (participant.FunctionType == 3)
            {
                department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai);
            }
            else if (participant.FunctionType == 2)
            {
                department = new StartDepartmentFunc(base._context).GetDepartment(pi);
            }
            else if (participant.FunctionType == 5)
            {
                department = this.GetDepartment(participant, pi, ai);
            }
            else
            {
                if (participant.FunctionType != 10)
                {
                    throw new ApplicationException("在ParentDepartmentFunc的GetDepartment中FunctionType有误!");
                }
                department = new SpecialLevelParentDeptFunc(base._context).GetDepartment(participant, pi, ai);
            }
            return(base._orgProxy.GetDepartmentById(department.Parent_ID.Value));
        }
コード例 #2
0
        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>());
        }
コード例 #3
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            string assemblyName = part.Param_AssemblyName;
            string className    = part.Param_ClassName;

            return(CustomHandlerLoader.GetHandlerWithName <IParticipantFunc>(assemblyName, className, new object[0]).GetUsers(part, pi, ai));
        }
コード例 #4
0
        protected void RemindForParticipant(int?remindType, SysProcessParticipant part, SysProcessRemindTemplate template)
        {
            if (template == null)
            {
                throw new ApplicationException("RemindTemplate为空");
            }
            foreach (IUser user in ParticipantHelper.GetUsers(this._context, part, this.PI, this.AI, this.creator.WiOwnerId).Distinct <IUser>())
            {
                string str3;
                this.AddRemindToken(user);
                string remindTitleByTemplate   = this.creator.GetRemindTitleByTemplate(template, user);
                string remindContentByTemplate = this.creator.GetRemindContentByTemplate(template, user);
                int    valueOrDefault          = remindType.GetValueOrDefault();
                if (remindType.HasValue)
                {
                    switch (valueOrDefault)
                    {
                    case 0:
                        if (this.EmailHandler == null)
                        {
                            throw new ApplicationException("未找到邮件服务,无法发送邮件提醒");
                        }
                        this.EmailHandler.SendEmail(user, remindTitleByTemplate, remindContentByTemplate, this.Model.AprovePageOuterURL, this.Model.ProcessDetailOuterURL);
                        break;

                    case 1:
                        if (this.ShortMessageHandler == null)
                        {
                            throw new ApplicationException("未找到短信服务,无法发送短信提醒");
                        }
                        goto Label_00EA;

                    case 2:
                        if (this.CustomRemindHandler == null)
                        {
                            throw new ApplicationException("未找到自定义提醒服务,无法处理自定义提醒");
                        }
                        goto Label_013F;
                    }
                }
                continue;
                Label_00EA:
                str3 = null;
                if (string.IsNullOrEmpty(remindTitleByTemplate))
                {
                    str3 = remindContentByTemplate;
                }
                else
                {
                    StringBuilder builder = new StringBuilder(remindTitleByTemplate);
                    builder.AppendLine();
                    builder.AppendLine(remindContentByTemplate);
                    str3 = builder.ToString();
                }
                this.ShortMessageHandler.SendMessage(user, str3);
                continue;
Label_013F:
                this.CustomRemindHandler.Execute(user, remindTitleByTemplate, remindContentByTemplate, this.PI, this.AI, this.WorkItem, this.Model);
            }
        }
コード例 #5
0
        public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (part == null)
            {
                throw new ArgumentNullException("part");
            }
            SysProcessParticipant participant = part.Param_Participant;

            if (participant == null)
            {
                throw new ApplicationException("部门经理参与人未指定基于参于人");
            }
            if (participant.FunctionType == 3)
            {
                SpecDepartmentFunc func = new SpecDepartmentFunc(base._context);
                return(func.GetDepartment(participant, pi, ai));
            }
            if (participant.FunctionType == 2)
            {
                StartDepartmentFunc func2 = new StartDepartmentFunc(base._context);
                return(func2.GetDepartment(pi));
            }
            if (participant.FunctionType == 5)
            {
                ParentDepartmentFunc func3 = new ParentDepartmentFunc(base._context);
                return(func3.GetDepartment(participant, pi, ai));
            }
            if (participant.FunctionType != 10)
            {
                throw new ApplicationException("部门经理参与人获得部门失败,可能是参数类型错误");
            }
            SpecialLevelParentDeptFunc func4 = new SpecialLevelParentDeptFunc(base._context);

            return(func4.GetDepartment(participant, pi, ai));
        }
コード例 #6
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            List <IUser> source = new List <IUser>();

            using (IEnumerator <SysActivityParticipant> enumerator = ai.Activity.ActivityParticipants.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Func <SysProcessParticipant, bool> predicate = null;
                    SysActivityParticipant             p         = enumerator.Current;
                    if (predicate == null)
                    {
                        predicate = i => i.ParticipantId == p.ParticipantId;
                    }
                    SysProcessParticipant participant = pi.Process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(predicate);
                    if (participant != null)
                    {
                        int?         wiOwnerId  = null;
                        List <IUser> collection = ParticipantHelper.GetUsers(base._context, participant, pi, ai, wiOwnerId);
                        source.AddRange(collection);
                    }
                }
            }
            return(source.Distinct <IUser>().ToList <IUser>());
        }
コード例 #7
0
        /// <summary>
        /// 删除流程参与人
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            try
            {
                long?id = (sender as LinkButton).CommandArgument.ToLongNullable();
                using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
                {
                    using (BizDataContext db = new BizDataContext())
                    {
                        SysProcessParticipant p = db.FindById <SysProcessParticipant>(id);
                        if (p != null)
                        {
                            //同步删除关联的活动参与人
                            var apList = db.Where <SysActivityParticipant>(x => x.ParticipantId == id);
                            foreach (var ap in apList)
                            {
                                db.Delete(ap);
                            }

                            db.Delete(p);
                        }
                    }
                    ts.Complete();
                }
                BindGrid();
            }
            catch (Exception ex)
            {
                this.AjaxAlert(ex);
            }
        }
コード例 #8
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IUser startUser = this.GetStartUser(pi);

            return(new List <IUser> {
                startUser
            });
        }
コード例 #9
0
        private void LoadProcessParticipant(SysProcessParticipant pp, SysProcess p)
        {
            pp.Process           = p;
            pp.Param_Participant = p.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(i => i.ParticipantId == pp.Param_ParticipantId);
            string condition = string.Format("participantId = {0}", pp.ParticipantId);

            pp.ActivityParticipants = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]);
        }
コード例 #10
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IDepartment department = this.GetDepartment(pi);

            if (department == null)
            {
                throw new ApplicationException("在StartDepartmentFunc的GetUsers中获取部门有误!");
            }
            return(base._orgProxy.GetDepartmentUsers(department.Department_ID));
        }
コード例 #11
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IDepartment department = this.GetDepartment(part, pi, ai);

            if (department == null)
            {
                throw new ApplicationException("在SpecialLevelParentDeptFunc中未能找到指定层级的上级部门!");
            }
            return(base._orgProxy.GetDepartmentUsers(department.Department_ID));
        }
コード例 #12
0
 public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
 {
     if (part == null)
     {
         throw new ArgumentNullException("part");
     }
     if (!part.Param_RoleId.HasValue)
     {
         throw new ApplicationException("具体角色参与人未指定角色参数");
     }
     return(base._orgProxy.GetRoleUsers(part.Param_RoleId.Value));
 }
コード例 #13
0
 public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
 {
     if (part == null)
     {
         throw new ArgumentNullException("part");
     }
     if (!part.Param_DepartmentId.HasValue)
     {
         throw new ApplicationException("未指定参与人的部门参数");
     }
     return(base._orgProxy.GetDepartmentById(part.Param_DepartmentId.Value));
 }
コード例 #14
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (!this._wiOwnerId.HasValue)
            {
                throw new ApplicationException("计划工作项负责人参与人失败");
            }
            IUser userById = base._orgProxy.GetUserById(this._wiOwnerId.Value);

            return(new List <IUser> {
                userById
            });
        }
コード例 #15
0
        public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IDepartment department = null;

            if (part.Param_Participant == null)
            {
                throw new ApplicationException("父部门参与人未指定基于参于人");
            }
            SysProcessParticipant participant = part.Param_Participant;

            if (participant.FunctionType == 3)
            {
                department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai);
            }
            else if (participant.FunctionType == 2)
            {
                department = new StartDepartmentFunc(base._context).GetDepartment(pi);
            }
            else if (participant.FunctionType == 5)
            {
                department = new ParentDepartmentFunc(base._context).GetDepartment(participant, pi, ai);
            }
            else
            {
                if (participant.FunctionType != 10)
                {
                    throw new ApplicationException("在SpecialLevelParentDeptFunc的GetDepartment中FunctionType有误!");
                }
                department = this.GetDepartment(participant, pi, ai);
            }
            string str = part.Param_Constant;

            if (!base._orgProxy.IsSupportDepartmentLevel())
            {
                throw new ApplicationException("OrgProxy未实现部门层级,请重载IsSupportDepartmentLevel方法");
            }
            IDepartment parentDepartment = department;

            if (parentDepartment == null)
            {
                throw new ApplicationException("在SpecialLevelParentDeptFunc的GetUsers中获取启动部门失败!");
            }
            for (string str2 = base._orgProxy.GetDepartmentLevelCode(parentDepartment.Department_ID).ToString(); (str != str2) && (parentDepartment != null); str2 = base._orgProxy.GetDepartmentLevelCode(parentDepartment.Department_ID).ToString())
            {
                parentDepartment = base._orgProxy.GetParentDepartment(parentDepartment.Department_ID);
            }
            if (parentDepartment == null)
            {
                throw new ApplicationException("在SpecialLevelParentDeptFunc中未能找到指定层级的上级部门!");
            }
            return(parentDepartment);
        }
コード例 #16
0
 public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
 {
     if (part == null)
     {
         throw new ArgumentNullException("part");
     }
     if (!part.Param_UserId.HasValue)
     {
         throw new ApplicationException("未指定参与人的用户参数");
     }
     return(new List <IUser> {
         base._orgProxy.GetUserById(part.Param_UserId.Value)
     });
 }
コード例 #17
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            List <int> result = new List <int>();

            this.GetUserIdList(ai, result);
            List <IUser> source = new List <IUser>();

            foreach (int num in result.Distinct <int>())
            {
                IUser userById = base._orgProxy.GetUserById(num);
                if (userById != null)
                {
                    source.Add(userById);
                }
            }
            return(source.ToList <IUser>());
        }
コード例 #18
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (part == null)
            {
                throw new ArgumentNullException("part");
            }
            if (string.IsNullOrEmpty(part.JScriptText))
            {
                throw new ApplicationException("未指定参与人的Python脚本");
            }
            List <IUser> list = new List <IUser>();

            foreach (int num in this._manager.ExecutePython(pi, part.JScriptText).Distinct <int>())
            {
                list.Add(base._orgProxy.GetUserById(num));
            }
            return(list);
        }
コード例 #19
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            IDepartment department = this.GetDepartment(part, pi, ai);

            if (department == null)
            {
                throw new ApplicationException("在参与人中未找到指定部门");
            }
            IUser departmentManager = base._orgProxy.GetDepartmentManager(department.Department_ID);

            if (departmentManager == null)
            {
                throw new ApplicationException("在指定部门中未找到指定部门经理");
            }
            return(new List <IUser> {
                departmentManager
            });
        }
コード例 #20
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (part == null)
            {
                throw new ArgumentNullException("part");
            }
            if (part.Param_Participant == null)
            {
                throw new ApplicationException("部门角色参与人未指定基于参与人");
            }
            if (!part.Param_RoleId.HasValue)
            {
                throw new ApplicationException("未指定参与人的角色");
            }
            SysProcessParticipant participant = part.Param_Participant;
            IDepartment           department  = null;

            if (participant.FunctionType == 3)
            {
                department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai);
            }
            else if (participant.FunctionType == 2)
            {
                department = new StartDepartmentFunc(base._context).GetDepartment(pi);
            }
            else if (participant.FunctionType == 5)
            {
                department = new ParentDepartmentFunc(base._context).GetDepartment(participant, pi, ai);
            }
            else
            {
                if (participant.FunctionType != 10)
                {
                    throw new ApplicationException("在DepartmentRoleFunc的GetUsers中FunctionType有误!");
                }
                department = new SpecialLevelParentDeptFunc(base._context).GetDepartment(participant, pi, ai);
            }
            return(base._orgProxy.GetDepartmentRoleUsers(department.Department_ID, part.Param_RoleId.Value));
        }
コード例 #21
0
        /// <summary>
        /// 保存流程参与人
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void cbc_CallBack(object sender, CallBackEventArgs e)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string errorMsg         = string.Empty; //错误消息
            bool   isError          = false;

            try
            {
                int?   functionType    = e.Context["FunctionType"].ToStringNullable().ToIntNullable();
                int?   userId          = e.Context["UserId"].ToStringNullable().ToIntNullable();
                int?   roleId          = e.Context["RoleId"].ToStringNullable().ToIntNullable();
                long   processId       = e.Context["ProcessId"].ToLong();
                string participantName = string.Empty;

                if (functionType == null)
                {
                    throw new Exception("参与人类型不能为空");
                }
                if (functionType == (int)ParticipantFunctionType.SpecialUser)
                {
                    T_User user = this.DataHelper.FindById <T_User>(userId);
                    if (user == null)
                    {
                        throw new Exception("请指定具体人员");
                    }
                    participantName = user.User_Name;
                }
                if (functionType == (int)ParticipantFunctionType.SpecialRole)
                {
                    T_Role role = this.DataHelper.FindById <T_Role>(roleId);
                    if (role == null)
                    {
                        throw new Exception("请指定具体角色");
                    }
                    participantName = string.Format("{0}角色", role.Role_Name);
                }
                if (functionType == (int)ParticipantFunctionType.DIRECT_MANAGER)
                {
                    participantName = "直属主管";
                }

                using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
                {
                    using (BizDataContext db = new BizDataContext())
                    {
                        int count = db.Set <SysProcessParticipant>().Where(p =>
                                                                           p.ProcessId == processId && p.FunctionType == functionType && p.Param_RoleId == roleId && p.Param_UserId == userId).Count();
                        if (count > 0)
                        {
                            throw new Exception("已存在相同的流程参与人");
                        }

                        long?param_partId = null;
                        if (functionType == (int)ParticipantFunctionType.DIRECT_MANAGER)
                        {
                            SysProcessParticipant pStartUser = new SysProcessParticipant()
                            {
                                ParticipantId   = db.GetNextIdentity(),
                                ProcessId       = processId,
                                FunctionType    = (int)ParticipantFunctionType.StartUser,
                                ParticipantName = "流程启动人",
                            };
                            param_partId = pStartUser.ParticipantId;
                            db.Insert(pStartUser);
                        }

                        SysProcessParticipant pCurrent = new SysProcessParticipant()
                        {
                            ParticipantId       = db.GetNextIdentity(),
                            ProcessId           = processId,
                            FunctionType        = functionType,
                            Param_UserId        = userId,
                            Param_RoleId        = roleId,
                            Param_ParticipantId = param_partId,
                            ParticipantName     = participantName,
                        };
                        db.Insert(pCurrent);
                    }
                    ts.Complete();
                }
            }
            catch (Exception ex)
            {
                isError  = true;
                errorMsg = ex.Message;
            }

            string result = js.Serialize(new
            {
                IsError = isError,
                Error   = errorMsg,
            });

            e.Result = result;
        }
コード例 #22
0
        private void ExecuteForManual(SysActivity activity, SysProcess process, Queue <WorkflowMessage> queue)
        {
            if ((activity.ActivityParticipants == null) || (activity.ActivityParticipants.Count == 0))
            {
                throw new ApplicationException("未指定参与人");
            }
            Dictionary <SysWorkItemApproveGroup, List <IUser> > dictionary = new Dictionary <SysWorkItemApproveGroup, List <IUser> >(20);
            List <IUser> list = new List <IUser>();

            if (this.AI.UserDefinedApproveUsers.Count > 0)
            {
                SysWorkItemApproveGroup key = this.CreateWorkItemGroup();
                IOrgProxy    orgProxy       = OrgProxyFactory.GetProxy(base.Context);
                List <IUser> users          = (from p in this.AI.UserDefinedApproveUsers select orgProxy.GetUserById(p.UserId.Value)).ToList <IUser>();
                this.RemoveRepeatedUsers(users);
                list.AddRange(users);
                dictionary.Add(key, users);
            }
            else
            {
                using (IEnumerator <SysActivityParticipant> enumerator = activity.ActivityParticipants.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Func <SysProcessParticipant, bool> predicate     = null;
                        SysActivityParticipant             activity_part = enumerator.Current;
                        SysWorkItemApproveGroup            group         = this.CreateWorkItemGroup(activity_part);
                        if (predicate == null)
                        {
                            predicate = p => p.ParticipantId == activity_part.ParticipantId.Value;
                        }
                        SysProcessParticipant part = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(predicate);
                        if (part == null)
                        {
                            throw new ApplicationException("参与人为空");
                        }
                        int?         wiOwnerId   = null;
                        var          users       = ParticipantHelper.GetUsers(base.Context, part, base.PI, this.AI, wiOwnerId);
                        List <IUser> targetUsers = users;
                        this.AssertGroupHasUsers(activity_part, group, targetUsers);
                        this.RemoveRepeatedUsers(targetUsers);
                        list.AddRange(targetUsers);
                        dictionary.Add(group, targetUsers);
                    }
                }
            }
            if (list.Count == 0)
            {
                bool?isPassedWithNoParticipants = this.AI.Activity.IsPassedWithNoParticipants;
                if (!(isPassedWithNoParticipants.HasValue ? isPassedWithNoParticipants.GetValueOrDefault() : false))
                {
                    throw new ApplicationException("未计算出任何参与人");
                }
                SysActivityInstance aI = this.AI;
                aI.InstanceStatus  = 10;
                aI.EndTime         = new DateTime?(DateTime.Now);
                aI.ApproveResult   = 1;
                aI.ExpressionValue = 1;
                aI.Remark          = "无人审核,自动通过";
                base.PICacheFactory.UpdateActiviyInstance(this.AI);
                WorkflowMessage item = base.Engine.NewCompleteActivityMessage(this.AI);
                queue.Enqueue(item);
            }
            else
            {
                SysActivity activity3 = this.AI.Activity;
                if (!activity3.PassType.HasValue)
                {
                    activity3.PassType = 1;
                    if (!activity3.MinPassNum.HasValue)
                    {
                        activity3.MinPassNum = 1;
                    }
                }
                foreach (KeyValuePair <SysWorkItemApproveGroup, List <IUser> > pair in dictionary)
                {
                    SysWorkItemApproveGroup group3 = pair.Key;
                    foreach (IUser user in pair.Value)
                    {
                        this.CreateWorkItem(user, group3);
                    }
                }
            }
            if (this.AI.UserDefinedApproveUsers.Count > 0)
            {
                base.PICacheFactory.ClearApproveUsers(this.AI);
            }
        }
コード例 #23
0
        public static List <IUser> GetUsers(DataContext ctx, SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai, int?wiOwnerId = new int?())
        {
            List <IUser> list           = new List <IUser>();
            int          valueOrDefault = part.FunctionType.GetValueOrDefault();

            if (part.FunctionType.HasValue)
            {
                switch (valueOrDefault)
                {
                case 0:
                {
                    StartUserFunc func = new StartUserFunc(ctx);
                    return(func.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 1:
                {
                    SpecUserFunc func7 = new SpecUserFunc(ctx);
                    return(func7.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 2:
                {
                    StartDepartmentFunc func2 = new StartDepartmentFunc(ctx);
                    return(func2.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 3:
                {
                    SpecDepartmentFunc func3 = new SpecDepartmentFunc(ctx);
                    return(func3.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 4:
                {
                    DepartmentManagerFunc func4 = new DepartmentManagerFunc(ctx);
                    return(func4.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 5:
                {
                    ParentDepartmentFunc func5 = new ParentDepartmentFunc(ctx);
                    return(func5.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 6:
                {
                    SpecRoleFunc func8 = new SpecRoleFunc(ctx);
                    return(func8.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 7:
                {
                    DepartmentRoleFunc func6 = new DepartmentRoleFunc(ctx);
                    return(func6.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 8:
                {
                    PythonFunc func9 = new PythonFunc(ctx);
                    return(func9.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 9:
                {
                    DirectManagerFunc func10 = new DirectManagerFunc(ctx);
                    return(func10.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 10:
                {
                    SpecialLevelParentDeptFunc func11 = new SpecialLevelParentDeptFunc(ctx);
                    return(func11.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 11:
                    try
                    {
                        CustomPluginFunc func16 = new CustomPluginFunc(ctx);
                        return(func16.GetUsers(part, pi, ai).ToList <IUser>());
                    }
                    catch (Exception exception)
                    {
                        throw new ApplicationException("自定义参与人插件错误:" + exception.Message, exception);
                    }
                    break;

                case 100:
                {
                    PrevActivityParticipantFunc func14 = new PrevActivityParticipantFunc(ctx);
                    return(func14.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 0x65:
                {
                    PrevAllParticipantFunc func15 = new PrevAllParticipantFunc(ctx);
                    return(func15.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 0x66:
                {
                    CurrentActivityParticipantFunc func12 = new CurrentActivityParticipantFunc(ctx);
                    return(func12.GetUsers(part, pi, ai).ToList <IUser>());
                }

                case 0x67:
                {
                    CurrentWorkItemOwnerFunc func13 = new CurrentWorkItemOwnerFunc(ctx, wiOwnerId);
                    return(func13.GetUsers(part, pi, ai).ToList <IUser>());
                }
                }
            }
            throw new ApplicationException("在ParticipantHelper的GetUsers中参数类型有误!");
        }
コード例 #24
0
        public List <IUser> GetParticipantUsers(long activityId, int?processInstanceId = new int?(), int?activityInstanctId = new int?())
        {
            Func <SysActivityInstance, bool> predicate = null;
            Func <SysActivityInstance, bool> func3     = null;
            List <IUser> list3;

            try
            {
                SysActivity activity;
                int?        nullable = processInstanceId;
                if ((nullable.HasValue ? nullable.GetValueOrDefault() : -1) <= 0)
                {
                    processInstanceId = null;
                }
                int?nullable2 = activityInstanctId;
                if ((nullable2.HasValue ? nullable2.GetValueOrDefault() : -1) <= 0)
                {
                    activityInstanctId = null;
                }
                List <IUser>        users = new List <IUser>();
                SysProcess          processCacheByActivity = this._processCache.GetProcessCacheByActivity(activityId, out activity);
                SysProcessInstance  pi = null;
                SysActivityInstance ai = null;
                if (processInstanceId.HasValue)
                {
                    pi = new ProcessInstanceCacheFactory(this._context).GetProcessInstanceCache(processInstanceId.Value);
                    if (pi == null)
                    {
                        throw new ApplicationException(string.Format("流程实例ID:{0}不正确", processInstanceId));
                    }
                    if (activityInstanctId.HasValue)
                    {
                        if (predicate == null)
                        {
                            predicate = p => p.ActivityInstanceId == activityInstanctId.Value;
                        }
                        ai = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(predicate);
                        if (ai == null)
                        {
                            throw new ApplicationException(string.Format("活动实例ID:{0}不正确", activityInstanctId));
                        }
                    }
                    else
                    {
                        if (func3 == null)
                        {
                            func3 = delegate(SysActivityInstance p) {
                                long?nullable1 = p.ActivityId;
                                long num       = activityId;
                                return((nullable1.GetValueOrDefault() == num) && nullable1.HasValue);
                            };
                        }
                        ai = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(func3);
                    }
                }
                using (IEnumerator <SysActivityParticipant> enumerator = activity.ActivityParticipants.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Func <SysProcessParticipant, bool> func          = null;
                        SysActivityParticipant             activity_part = enumerator.Current;
                        if (func == null)
                        {
                            func = p => p.ParticipantId == activity_part.ParticipantId.Value;
                        }
                        SysProcessParticipant part = processCacheByActivity.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func);
                        if (part == null)
                        {
                            throw new ApplicationException("参与人为空");
                        }
                        int?         wiOwnerId  = null;
                        List <IUser> collection = ParticipantHelper.GetUsers(this._context, part, pi, ai, wiOwnerId);
                        users.AddRange(collection);
                    }
                }
                RemoveRepeatedUsers(users);
                list3 = users;
            }
            catch (Exception exception)
            {
                AppLogHelper.Error(string.Format("GetParticipantUsers,activityId=[{0}]失败", activityId), exception);
                throw exception;
            }
            return(list3);
        }
コード例 #25
0
        public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai)
        {
            List <IUser> list      = new List <IUser>();
            IUser        startUser = null;

            if (part == null)
            {
                throw new ArgumentNullException("part");
            }
            SysProcessParticipant participant = part.Param_Participant;

            if (participant == null)
            {
                throw new ApplicationException("主属主管参与人未指定基于参于人");
            }
            if (participant.FunctionType == 0)
            {
                startUser = new StartUserFunc(base._context).GetStartUser(pi);
            }
            else if (participant.FunctionType == 1)
            {
                SpecUserFunc func2 = new SpecUserFunc(base._context);
                startUser = func2.GetUsers(participant, pi, ai).FirstOrDefault <IUser>();
            }
            else
            {
                if (participant.FunctionType != 9)
                {
                    throw new ApplicationException("直属主管参与人获得人员失败,可能是参数类型错误");
                }
                startUser = this.GetUsers(participant, pi, ai).FirstOrDefault <IUser>();
            }
            if (startUser == null)
            {
                throw new ApplicationException("直属主管参与人获得人员失败,可能是参数类型错误");
            }
            if (!startUser.Department_ID.HasValue)
            {
                throw new ApplicationException("人员没有部门,无法计算直属主管");
            }
            IUser departmentManager = base._orgProxy.GetDepartmentManager(startUser.Department_ID.Value);

            if (departmentManager == null)
            {
                throw new ApplicationException(string.Format("部门ID:{0}没有设置经理", startUser.Department_ID));
            }
            if (startUser.User_ID != departmentManager.User_ID)
            {
                list.Add(departmentManager);
                return(list);
            }
            IDepartment parentDepartment = base._orgProxy.GetParentDepartment(startUser.Department_ID.Value);

            if (parentDepartment != null)
            {
                if (parentDepartment.Department_ID != startUser.Department_ID)
                {
                    list.Add(base._orgProxy.GetDepartmentManager(parentDepartment.Department_ID));
                    return(list);
                }
            }
            list.Add(departmentManager);
            return(list);
        }
コード例 #26
0
 public abstract IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai);
コード例 #27
0
        /// <summary>
        /// 复制流程,从“已启用”或“已升级”的流程进入设计,需要先复制一份流程供设计
        /// 状态为“新增”,版本为当前最高版本 + 1
        /// </summary>
        public SysProcess CopyProcess()
        {
            SysProcess result;

            using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
            {
                using (BizDataContext db = new BizDataContext())
                {
                    //新流程
                    SysProcess newP = _process.ConvertTo <SysProcess>();
                    newP.ProcessId = db.GetNextIdentity();

                    //版本处理
                    newP.ProcessStatus = (int)ProcessState.Created;
                    string maxVersion = db.Set <SysProcess>().Where(p => p.ProcessType == _process.ProcessType).OrderByDescending(p => p.ProcessVersion).First().ProcessVersion;
                    newP.ProcessVersion = (maxVersion.ToInt() + 1).ToString();

                    result = newP;
                    db.Insert(newP);

                    //新流程参与人
                    var ppList = db.Set <SysProcessParticipant>().Where(p => p.ProcessId == _process.ProcessId).ToList();
                    Dictionary <long?, SysProcessParticipant> tempPpDict = new Dictionary <long?, SysProcessParticipant>();
                    foreach (var pp in ppList)
                    {
                        SysProcessParticipant newPp = pp.ConvertTo <SysProcessParticipant>();
                        newPp.ParticipantId = db.GetNextIdentity();
                        newPp.ProcessId     = newP.ProcessId;

                        tempPpDict[pp.ParticipantId] = newPp; //记录原始ID和新对象的关系
                    }
                    foreach (var newPp in tempPpDict.Values)
                    {
                        if (newPp.Param_ParticipantId != null) //通过刚才记录的关系找到实际的值
                        {
                            newPp.Param_ParticipantId = tempPpDict[newPp.Param_ParticipantId].ParticipantId;
                        }
                        db.Insert(newPp);
                    }

                    //新活动
                    var aList = db.Set <SysActivity>().Where(p => p.ProcessId == _process.ProcessId).ToList();
                    Dictionary <long?, SysActivity> tempADict = new Dictionary <long?, SysActivity>();
                    foreach (var a in aList)
                    {
                        SysActivity newA = a.ConvertTo <SysActivity>();
                        newA.ActivityId = db.GetNextIdentity();
                        newA.ProcessId  = newP.ProcessId;

                        tempADict[a.ActivityId] = newA;//记录原始ID和新对象的关系
                        db.Insert(newA);

                        //新活动参与人
                        var apList = db.Set <SysActivityParticipant>().Where(p => p.ActivityId == a.ActivityId).ToList();
                        foreach (var ap in apList)
                        {
                            SysActivityParticipant newAp = ap.ConvertTo <SysActivityParticipant>();
                            newAp.ActivityParticipantId = db.GetNextIdentity();
                            newAp.ActivityId            = newA.ActivityId;
                            newAp.ParticipantId         = tempPpDict[newAp.ParticipantId].ParticipantId; //通过刚才记录的关系找到实际的值
                            db.Insert(newAp);
                        }
                    }

                    //连接线
                    var tList = db.Set <SysTransition>().Where(p => p.ProcessId == _process.ProcessId).ToList();
                    foreach (var t in tList)
                    {
                        SysTransition newT = t.ConvertTo <SysTransition>();
                        newT.TransitionId = db.GetNextIdentity();
                        newT.ProcessId    = newP.ProcessId;

                        //通过刚才记录的关系找到实际的值
                        newT.PreActivityId  = tempADict[newT.PreActivityId].ActivityId;
                        newT.PostActivityId = tempADict[newT.PostActivityId].ActivityId;

                        db.Insert(newT);
                    }

                    //表单活动权限
                    var fpList = db.Set <SysFormPrivilege>().Where(p => p.ProcessId == _process.ProcessId).ToList();
                    foreach (var fp in fpList)
                    {
                        SysFormPrivilege newFp = fp.ConvertTo <SysFormPrivilege>();
                        newFp.PrivilegeId = db.GetNextIdentity();
                        newFp.ProcessId   = newP.ProcessId;
                        newFp.ActivityId  = tempADict[newFp.ActivityId].ActivityId;//通过刚才记录的关系找到实际的值

                        db.Insert(newFp);
                    }
                }
                ts.Complete();
            }
            return(result);
        }
コード例 #28
0
        internal SysProcess LoadProcess(long processId)
        {
            SysProcess process = this._context.FindById <SysProcess>(new object[] { processId });

            if (process == null)
            {
                throw new ApplicationException("流程ID不正确");
            }
            if (process.EntityId.HasValue)
            {
                process.ProcessEntity = this._cacheFactory.GetEntityCache(process.EntityId.Value);
            }
            if (process.ActivityEntityId.HasValue)
            {
                process.ActivityEntity = this._cacheFactory.GetEntityCache(process.ActivityEntityId.Value);
            }
            if (process.FormId.HasValue)
            {
                process.Form = this._context.FindById <SysForm>(new object[] { process.FormId });
            }
            string condition = string.Format("processId = {0}", processId);
            List <SysProcessProxy>             list    = this._context.Where <SysProcessProxy>(condition, new DbParameter[0]);
            List <SysProcessParticipant>       list2   = this._context.Where <SysProcessParticipant>(condition, new DbParameter[0]);
            List <SysExpression>               list3   = this._context.Where <SysExpression>(condition, new DbParameter[0]);
            List <SysTransition>               list4   = this._context.Where <SysTransition>(condition, new DbParameter[0]);
            List <SysProcessRemind>            list5   = this._context.Where <SysProcessRemind>(condition, new DbParameter[0]);
            List <SysProcessRemindParticipant> source  = this._context.Where <SysProcessRemindParticipant>(condition, new DbParameter[0]);
            List <SysActivity>                  list7  = this._context.Where <SysActivity>(condition, new DbParameter[0]);
            List <SysActivityParticipant>       list8  = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]);
            List <SysActivityOperation>         list9  = this._context.Where <SysActivityOperation>(condition, new DbParameter[0]);
            List <SysActivityStep>              list10 = this._context.Where <SysActivityStep>(condition, new DbParameter[0]);
            List <SysActivityRemind>            list11 = this._context.Where <SysActivityRemind>(condition, new DbParameter[0]);
            List <SysActivityRemindParticipant> list12 = this._context.Where <SysActivityRemindParticipant>(condition, new DbParameter[0]);
            List <SysActivityApproveGroup>      list13 = this._context.Where <SysActivityApproveGroup>(condition, new DbParameter[0]);

            process.Activities          = list7;
            process.ProcessProxies      = list;
            process.ProcessParticipants = list2;
            process.ProcessReminds      = list5;
            process.Expressions         = list3;
            process.Transitions         = list4;
            using (IEnumerator <SysActivity> enumerator = process.Activities.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Func <SysExpression, bool>          predicate = null;
                    Func <SysActivityParticipant, bool> func8     = null;
                    Func <SysActivityRemind, bool>      func9     = null;
                    Func <SysActivityOperation, bool>   func10    = null;
                    Func <SysExpression, bool>          func11    = null;
                    Func <SysTransition, bool>          func12    = null;
                    Func <SysTransition, bool>          func13    = null;
                    SysActivity a = enumerator.Current;
                    a.Process = process;
                    if (predicate == null)
                    {
                        predicate = i => i.ExpressionId == a.ExpressionId;
                    }
                    a.Expression = process.Expressions.FirstOrDefault <SysExpression>(predicate);
                    if (func8 == null)
                    {
                        func8 = delegate(SysActivityParticipant i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityParticipants = list8.Where <SysActivityParticipant>(func8).ToList <SysActivityParticipant>();
                    if (func9 == null)
                    {
                        func9 = delegate(SysActivityRemind i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityReminds = list11.Where <SysActivityRemind>(func9).ToList <SysActivityRemind>();
                    if (func10 == null)
                    {
                        func10 = delegate(SysActivityOperation i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityOperations = list9.Where <SysActivityOperation>(func10).ToList <SysActivityOperation>();
                    if (func11 == null)
                    {
                        func11 = delegate(SysExpression i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.Expressions = process.Expressions.Where <SysExpression>(func11).ToList <SysExpression>();
                    if (func12 == null)
                    {
                        func12 = delegate(SysTransition i) {
                            long?preActivityId = i.PreActivityId;
                            long activityId    = a.ActivityId;
                            return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue);
                        };
                    }
                    a.FromTransitions = process.Transitions.Where <SysTransition>(func12).ToList <SysTransition>();
                    if (func13 == null)
                    {
                        func13 = delegate(SysTransition i) {
                            long?postActivityId = i.PostActivityId;
                            long activityId     = a.ActivityId;
                            return((postActivityId.GetValueOrDefault() == activityId) && postActivityId.HasValue);
                        };
                    }
                    a.ToTransitions = process.Transitions.Where <SysTransition>(func13).ToList <SysTransition>();
                    using (IEnumerator <SysActivityParticipant> enumerator2 = a.ActivityParticipants.GetEnumerator())
                    {
                        while (enumerator2.MoveNext())
                        {
                            Func <SysActivityApproveGroup, bool> func  = null;
                            Func <SysActivityParticipant, bool>  func2 = null;
                            Func <SysProcessParticipant, bool>   func3 = null;
                            SysActivityParticipant ap = enumerator2.Current;
                            ap.Activity = a;
                            if (func == null)
                            {
                                func = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId;
                            }
                            ap.ActivityApproveGroup = list13.FirstOrDefault <SysActivityApproveGroup>(func);
                            if (ap.ActivityApproveGroup != null)
                            {
                                ap.ActivityApproveGroup.Activity = a;
                                if (func2 == null)
                                {
                                    func2 = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId;
                                }
                                ap.ActivityApproveGroup.ActivityParticipants = list8.Where <SysActivityParticipant>(func2).ToList <SysActivityParticipant>();
                            }
                            if (func3 == null)
                            {
                                func3 = i => i.ParticipantId == ap.ParticipantId;
                            }
                            ap.ProcessParticipant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func3);
                        }
                    }
                    using (IEnumerator <SysActivityRemind> enumerator3 = a.ActivityReminds.GetEnumerator())
                    {
                        while (enumerator3.MoveNext())
                        {
                            Func <SysActivityRemindParticipant, bool> func5 = null;
                            SysActivityRemind ar = enumerator3.Current;
                            ar.Activity = a;
                            if (func5 == null)
                            {
                                func5 = delegate(SysActivityRemindParticipant i) {
                                    long?remindId = i.RemindId;
                                    long num      = ar.RemindId;
                                    return((remindId.GetValueOrDefault() == num) && remindId.HasValue);
                                };
                            }
                            ar.RemindParticipants = list12.Where <SysActivityRemindParticipant>(func5).ToList <SysActivityRemindParticipant>();
                            using (IEnumerator <SysActivityRemindParticipant> enumerator4 = ar.RemindParticipants.GetEnumerator())
                            {
                                while (enumerator4.MoveNext())
                                {
                                    Func <SysProcessParticipant, bool> func4 = null;
                                    SysActivityRemindParticipant       arp   = enumerator4.Current;
                                    arp.Remind = ar;
                                    if (func4 == null)
                                    {
                                        func4 = i => i.ParticipantId == arp.ParticipantId;
                                    }
                                    arp.Participant    = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func4);
                                    arp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { arp.TemplateId });
                                }
                                continue;
                            }
                        }
                    }
                    using (IEnumerator <SysActivityOperation> enumerator5 = a.ActivityOperations.GetEnumerator())
                    {
                        while (enumerator5.MoveNext())
                        {
                            Func <SysActivityStep, bool> func6 = null;
                            SysActivityOperation         ao    = enumerator5.Current;
                            ao.Activity = a;
                            if (func6 == null)
                            {
                                func6 = delegate(SysActivityStep i) {
                                    long?operationId = i.OperationId;
                                    long num         = ao.OperationId;
                                    return((operationId.GetValueOrDefault() == num) && operationId.HasValue);
                                };
                            }
                            ao.ActivitySteps = list10.Where <SysActivityStep>(func6).ToList <SysActivityStep>();
                            foreach (SysActivityStep step in ao.ActivitySteps)
                            {
                                step.ActivityOperation = ao;
                            }
                        }
                        continue;
                    }
                }
            }
            foreach (SysProcessProxy proxy in process.ProcessProxies)
            {
                proxy.Process = process;
            }
            using (IEnumerator <SysProcessParticipant> enumerator8 = process.ProcessParticipants.GetEnumerator())
            {
                while (enumerator8.MoveNext())
                {
                    Func <SysProcessParticipant, bool>  func14 = null;
                    Func <SysActivityParticipant, bool> func15 = null;
                    SysProcessParticipant pp = enumerator8.Current;
                    pp.Process = process;
                    if (func14 == null)
                    {
                        func14 = i => i.ParticipantId == pp.Param_ParticipantId;
                    }
                    pp.Param_Participant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func14);
                    if (func15 == null)
                    {
                        func15 = delegate(SysActivityParticipant i) {
                            long?participantId = i.ParticipantId;
                            long num           = pp.ParticipantId;
                            return((participantId.GetValueOrDefault() == num) && participantId.HasValue);
                        };
                    }
                    pp.ActivityParticipants = list8.Where <SysActivityParticipant>(func15).ToList <SysActivityParticipant>();
                }
            }
            using (IEnumerator <SysProcessRemind> enumerator9 = process.ProcessReminds.GetEnumerator())
            {
                while (enumerator9.MoveNext())
                {
                    Func <SysProcessRemindParticipant, bool> func17 = null;
                    SysProcessRemind pr = enumerator9.Current;
                    pr.Process = process;
                    if (func17 == null)
                    {
                        func17 = delegate(SysProcessRemindParticipant i) {
                            long?remindId = i.RemindId;
                            long num      = pr.RemindId;
                            return((remindId.GetValueOrDefault() == num) && remindId.HasValue);
                        };
                    }
                    pr.RemindParticipants = source.Where <SysProcessRemindParticipant>(func17).ToList <SysProcessRemindParticipant>();
                    using (IEnumerator <SysProcessRemindParticipant> enumerator10 = pr.RemindParticipants.GetEnumerator())
                    {
                        while (enumerator10.MoveNext())
                        {
                            Func <SysProcessParticipant, bool> func16 = null;
                            SysProcessRemindParticipant        rp     = enumerator10.Current;
                            rp.Remind = pr;
                            if (func16 == null)
                            {
                                func16 = i => i.ParticipantId == rp.ParticipantId;
                            }
                            rp.Participant    = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func16);
                            rp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { rp.TemplateId });
                        }
                        continue;
                    }
                }
            }
            using (IEnumerator <SysExpression> enumerator11 = process.Expressions.GetEnumerator())
            {
                while (enumerator11.MoveNext())
                {
                    Func <SysActivity, bool> func18 = null;
                    SysExpression            e      = enumerator11.Current;
                    e.Process = process;
                    if (func18 == null)
                    {
                        func18 = i => i.ActivityId == e.ActivityId;
                    }
                    e.Activity = process.Activities.FirstOrDefault <SysActivity>(func18);
                    if (e.FieldId.HasValue)
                    {
                        e.Field = this._cacheFactory.GetFieldCache(e.FieldId.Value);
                    }
                    if (e.RelationId.HasValue)
                    {
                        e.Relation = this._cacheFactory.GetRelationCache(e.RelationId.Value);
                    }
                }
            }
            using (IEnumerator <SysTransition> enumerator12 = process.Transitions.GetEnumerator())
            {
                while (enumerator12.MoveNext())
                {
                    Func <SysActivity, bool>   func19 = null;
                    Func <SysActivity, bool>   func20 = null;
                    Func <SysExpression, bool> func21 = null;
                    Func <SysExpression, bool> func22 = null;
                    SysTransition t = enumerator12.Current;
                    t.Process = process;
                    if (func19 == null)
                    {
                        func19 = i => i.ActivityId == t.PreActivityId;
                    }
                    t.PreActivity = process.Activities.FirstOrDefault <SysActivity>(func19);
                    if (func20 == null)
                    {
                        func20 = i => i.ActivityId == t.PostActivityId;
                    }
                    t.PostActivity = process.Activities.FirstOrDefault <SysActivity>(func20);
                    if (func21 == null)
                    {
                        func21 = i => i.ExpressionId == t.ExpressionId;
                    }
                    t.Expression = process.Expressions.FirstOrDefault <SysExpression>(func21);
                    if (func22 == null)
                    {
                        func22 = delegate(SysExpression i) {
                            long?transitionId = i.TransitionId;
                            long num          = t.TransitionId;
                            return((transitionId.GetValueOrDefault() == num) && transitionId.HasValue);
                        };
                    }
                    t.Expressions = process.Expressions.Where <SysExpression>(func22).ToList <SysExpression>();
                }
            }
            return(process);
        }