public CompleteWorkItemMessage(ProcessEngine engine, SysWorkItem wi) : base(engine)
 {
     if (wi == null)
     {
         throw new ArgumentNullException("wi");
     }
     this._wi = wi;
     this._ai = wi.ActivityInstance;
 }
        protected SysActivityInstance CreatePostActivityInstance(SysProcessInstance pi, SysActivity postActivity)
        {
            if (postActivity == null)
            {
                throw new ApplicationException("无此活动");
            }
            SysActivityInstance postAi = this.CreateActivityInstance(pi, postActivity);

            this.RedirectNextApproveUsers(this.AI, postAi);
            return(postAi);
        }
        private void CreateTransitionInstance(SysActivityInstance postAi, SysTransition tran)
        {
            SysTransitionInstance ti = new SysTransitionInstance {
                ProcessInstanceId      = new int?(base.PI.ProcessInstanceId),
                PreActivityInstanceId  = new int?(this.AI.ActivityInstanceId),
                PostActivityInstanceId = new int?(postAi.ActivityInstanceId),
                TransitionId           = new long?(tran.TransitionId),
                TransitionInstanceId   = base.Manager.GetNextIdentity()
            };

            base.PICacheFactory.AddTransitionInstance(ti, this.AI, postAi);
        }
        private SysActivityInstance CreatePostAcitivtyInstance(SysProcessInstance pi, SysTransition tran)
        {
            if (!tran.PostActivityId.HasValue)
            {
                throw new ApplicationException("后续活动为空");
            }
            SysActivity         postActivity = pi.Process.Activities.FirstOrDefault <SysActivity>(p => p.ActivityId == tran.PostActivityId.Value);
            SysActivityInstance postAi       = this.CreatePostActivityInstance(pi, postActivity);

            this.CreateTransitionInstance(postAi, tran);
            return(postAi);
        }
Example #5
0
        private void GetUserIdList(SysActivityInstance ai, List <int> result)
        {
            SysTransitionInstance instance = ai.ToTransitionInstances.FirstOrDefault <SysTransitionInstance>();

            if (instance != null)
            {
                SysActivityInstance preActivityInstance = instance.PreActivityInstance;
                List <int>          collection          = (from i in preActivityInstance.WorkItems select i.OwnerId.Value).ToList <int>();
                result.AddRange(collection);
                this.GetUserIdList(preActivityInstance, result);
            }
        }
        private SysActivityInstance CreateActivityInstance(SysProcessInstance pi, SysActivity act)
        {
            SysActivityInstance ai = new SysActivityInstance {
                ActivityId            = new long?(act.ActivityId),
                ActivityInstanceId    = base.Manager.GetNextIdentity(),
                EndTime               = null,
                ExpressionValue       = null,
                InstanceStatus        = 0,
                ProcessInstanceId     = new int?(pi.ProcessInstanceId),
                StartTime             = new DateTime?(DateTime.Now),
                WwfActivityInstanceId = null
            };

            base.PICacheFactory.AddActivityInstance(pi, ai);
            return(ai);
        }
 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;
 }
        /// <summary>
        /// 绑定活动实例
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void rActivity_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater            rpApproveGroup = e.Item.FindControl("rApproveGroup") as Repeater;
            SysActivityInstance ai             = e.Item.DataItem.GetPropertyValue("AI") as SysActivityInstance;

            //组里所有活动实例对应的活动都是本活动
            var result = ai.ApproveGroups
                         .Select(p => new
            {
                Group           = p,
                ApproveGroupId  = p.ApproveGroupId,
                ParticipantName = p.ActivityParticipantId == null ? "直接指定" : ai.Activity.ActivityParticipants.FirstOrDefault(i => i.ActivityParticipantId == p.ActivityParticipantId).ProcessParticipant.ParticipantName,
                ApproveResult   = (ai.InstanceStatus == (int)ActivityInstanceStatusEnum.Completed && p.ApproveResult == null) ? "未参与审核" : GetCheckState(p.ApproveResult),
            }).ToList();

            rpApproveGroup.DataSource = result;
            rpApproveGroup.DataBind();
        }
        protected void CancelUncompletedWorkItems(SysActivityInstance ai)
        {
            IEnumerable <SysWorkItem> enumerable = from x in ai.WorkItems
                                                   where !x.Status.HasValue || (x.Status == 0)
                                                   select x;
            DateTime now = DateTime.Now;
            int      num = 0;

            foreach (SysWorkItem item in enumerable)
            {
                if (item.WorkItemId != base.CurrentWorkItem.WorkItemId)
                {
                    item.Status  = 3;
                    item.EndTime = new DateTime?(now);
                    base.PICacheFactory.UpdateWorkItem(item, base.PI, ai);
                    num++;
                }
            }
        }
Example #10
0
        public override void Execute(Queue <WorkflowMessage> queue)
        {
            SysProcess process = base.PI.Process;

            if ((process.Activities == null) || (process.Activities.Count == 0))
            {
                throw new ApplicationException("没有任何活动");
            }
            SysActivity act = process.Activities.FirstOrDefault <SysActivity>(a => a.ActivityType == 1);

            if (act == null)
            {
                throw new ApplicationException("没有开始活动");
            }
            SysActivityInstance ai = this.CreateActivityInstance(base.PI, act);

            new ProcessRemindHandler(base.PICacheFactory, base.PI, ai, ProcessRemindUseTimeType.ProcessStart).Execute();
            WorkflowMessage item = base.Engine.NewActivityInstanceCreatedMessage(ai);

            queue.Enqueue(item);
        }
        private void CompleteApproveActivity(Queue <WorkflowMessage> queue, SysProcess process, SysActivity activity)
        {
            new ActivityRemindHandler(base.PICacheFactory, base.PI, this.AI, ActivityRemindUseTimeType.ActivityEnd, null, this.AI.ApproveResult).Execute();
            List <SysTransition> source = process.Transitions.Where <SysTransition>(delegate(SysTransition t) {
                long?preActivityId = t.PreActivityId;
                long activityId    = activity.ActivityId;
                return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue);
            }).ToList <SysTransition>();

            if (source.Count < 1)
            {
                throw new ApplicationException("没有后续的转换条件");
            }
            SysTransition tran = null;

            if (this.AI.ExpressionValue.HasValue)
            {
                int direction = Convert.ToBoolean(this.AI.ExpressionValue.Value) ? 1 : 2;
                tran = source.FirstOrDefault <SysTransition>(delegate(SysTransition p) {
                    int?nullable1 = p.Direction;
                    int num       = direction;
                    return((nullable1.GetValueOrDefault() == num) && nullable1.HasValue);
                });
            }
            if (tran == null)
            {
                tran = this.GetNextTransition(source);
            }
            if (tran == null)
            {
                throw new ApplicationException("所有后续连接线均不满足条件,流程无法继续");
            }
            SysActivityInstance ai   = this.CreatePostAcitivtyInstance(base.PI, tran);
            WorkflowMessage     item = base.Engine.NewActivityInstanceCreatedMessage(ai);

            queue.Enqueue(item);
        }
        private void CompleteDecisionActivity(Queue <WorkflowMessage> queue, SysProcess process, SysActivity activity)
        {
            List <SysTransition> source = process.Transitions.Where <SysTransition>(delegate(SysTransition t) {
                long?preActivityId = t.PreActivityId;
                long activityId    = activity.ActivityId;
                return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue);
            }).ToList <SysTransition>();

            if (source.Count < 1)
            {
                throw new ApplicationException("没有后续的转换条件");
            }
            if (!this.AI.ExpressionValue.HasValue)
            {
                throw new ApplicationException("未计算决策活动的值");
            }
            int           direction = Convert.ToBoolean(this.AI.ExpressionValue.Value) ? 1 : 2;
            SysTransition tran      = source.FirstOrDefault <SysTransition>(delegate(SysTransition p) {
                int?nullable1 = p.Direction;
                int num       = direction;
                return((nullable1.GetValueOrDefault() == num) && nullable1.HasValue);
            });

            if (tran == null)
            {
                throw new ApplicationException(string.Format("没有方向为{0}的后续活动", direction));
            }
            if (!tran.PostActivityId.HasValue)
            {
                throw new ApplicationException("后续活动为空");
            }
            SysActivityInstance ai   = this.CreatePostAcitivtyInstance(base.PI, tran);
            WorkflowMessage     item = base.Engine.NewActivityInstanceCreatedMessage(ai);

            queue.Enqueue(item);
        }