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);
        }
Esempio n. 9
0
 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));
        }
Esempio n. 17
0
        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;
 }
Esempio n. 20
0
 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);
 }
Esempio n. 21
0
        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));
            }
        }
Esempio n. 22
0
        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);
     }
 }
Esempio n. 24
0
        /// <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();
         }
     }
 }
Esempio n. 26
0
        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);
                }
            }
        }
Esempio n. 29
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);
        }
 public CompleteWorkItemSelfMessage_Approve(ProcessEngine engine, SysWorkItem wi) : base(engine, wi)
 {
 }