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); }
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++; } } }
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); }