public void Execute(IUser receiveUser, string title, string content, SysProcessInstance pi, SysActivityInstance ai, SysWorkItem wi, RemindTemplateModel model) { try { SysInternalMail mail = new SysInternalMail { MailId = this.context.GetNextIdentity_Int(false), Subject = title, Body = content, CreateTime = new DateTime?(DateTime.Now) }; SysInternalMailSender sender = new SysInternalMailSender { SenderId = this.context.GetNextIdentity_Int(false), MailId = new int?(mail.MailId), State = 1, SendTime = new DateTime?(DateTime.Now), UserId = 1 }; SysInternalMailReceiver receiver = new SysInternalMailReceiver { ReceiverId = this.context.GetNextIdentity_Int(false), ReceiveTime = new DateTime?(DateTime.Now), State = 1, SenderId = new int?(sender.SenderId), IsRead = false, UserId = new int?(receiveUser.User_ID) }; this.context.Insert(mail); this.context.Insert(sender); this.context.Insert(receiver); } catch (Exception exception) { throw new ApplicationException("处理自定义提醒错误:" + exception.Message); } }
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)); }
public List <int> ExecutePython(SysProcessInstance pi, string scriptText) { List <int> list = new List <int>(); if (!string.IsNullOrEmpty(scriptText)) { EntityCache cache = new EntityCache(this); SysEntity processEntity = pi.Process.ProcessEntity; EntityData data = cache.GetObject(processEntity, pi.ObjectId); try { ScriptEngine engine = Python.CreateEngine(); ScriptScope scope = engine.CreateScope(); scope.SetVariable("manager", this); scope.SetVariable("pi_data", data); scope.SetVariable("userIdList", list); engine.CreateScriptSourceFromString(scriptText).Execute(scope); } catch (Exception exception) { throw new ApplicationException("Python执行错误:" + exception.Message, exception); } } return(list); }
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 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 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 IDepartment GetDepartment(SysProcessInstance pi) { if (pi == null) { throw new ArgumentNullException("pi"); } if (!pi.StartUserId.HasValue) { throw new ApplicationException("启动用户为空"); } int userId = pi.StartUserId.Value; IUser userById = base._orgProxy.GetUserById(userId); if (userById == null) { throw new ApplicationException("启动用户不存在"); } if (!userById.Department_ID.HasValue) { throw new ApplicationException(string.Format("未设置用户{0}({1})的部门", userById.User_Name, userById.User_ID)); } IDepartment departmentById = base._orgProxy.GetDepartmentById(userById.Department_ID.Value); if (departmentById == null) { throw new ApplicationException(string.Format("部门{0}不存在", userById.Department_ID.Value)); } return(departmentById); }
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 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)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (ai.ToTransitionInstances.Count != 1) { throw new ApplicationException(string.Format("连接线实例不正确,AI:{0}", ai.ActivityInstanceId)); } SysTransitionInstance instance = ai.ToTransitionInstances.First <SysTransitionInstance>(); SysActivityInstance preActivityInstance = instance.PreActivityInstance; if (preActivityInstance == null) { throw new ApplicationException(string.Format("获得上一个活动实例失败,ID:{0}", instance.PostActivityInstanceId)); } if (preActivityInstance.Activity == null) { throw new ApplicationException(string.Format("获得上一个活动定义失败,ID:{0}", preActivityInstance.ActivityId)); } List <int> list = (from p in preActivityInstance.WorkItems select p.OwnerId.Value).Distinct <int>().ToList <int>(); List <IUser> source = new List <IUser>(); foreach (int num in list) { IUser userById = base._orgProxy.GetUserById(num); if (userById != null) { source.Add(userById); } } return(source.ToList <IUser>()); }
public 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>()); }
public void AddWorkItemGroup(SysWorkItemApproveGroup group, SysProcessInstance pi, SysActivityInstance ai) { this._context.Insert(group); group.ActivityInstance = ai; ai.ApproveGroups.Add(group); group.WorkItems = new List <SysWorkItem>(); }
/// <summary> /// 绑定流程实例 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void rProcess_ItemDataBound(object sender, RepeaterItemEventArgs e) { Label lblProcess = e.Item.FindControl("lblProcess") as Label; Label lblApproveResult = e.Item.FindControl("lblApproveResult") as Label; Label lblStartTime = e.Item.FindControl("lblStartTime") as Label; Repeater rActivity = e.Item.FindControl("rActivity") as Repeater; SysProcessInstance pi = e.Item.DataItem as SysProcessInstance; lblProcess.Text = pi.Process.ProcessName; lblApproveResult.Text = GetCheckState(pi.ApproveResult); lblStartTime.Text = string.Format("{0:yyyy/MM/dd HH:mm}", pi.StartTime); var result = pi.ActivityInstances.Where(p => p.Activity.ActivityType == (int)ActivityType.Approve) .OrderBy(p => p.StartTime) .Select(p => new { p.StartTime, ActivityId = p.ActivityId, ActivityName = p.Activity.ActivityName, ActivityInstanceId = p.ActivityInstanceId, AI = p, ApproveResult = GetCheckState(p), }).ToList(); rActivity.DataSource = result.ToList(); rActivity.DataBind(); }
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)); }
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); }
internal virtual int StartFormProcess(int startUserId, int formInstanceId) { IOrgProxy proxy = OrgProxyFactory.GetProxy(this._context); int nextIdentity = this._manager.GetNextIdentity(); IUser userById = proxy.GetUserById(startUserId); if (userById == null) { throw new ApplicationException("用户不存在"); } if (!userById.Department_ID.HasValue) { throw new ApplicationException("未指定用户部门"); } IDepartment departmentById = proxy.GetDepartmentById(userById.Department_ID.Value); if (departmentById == null) { throw new ApplicationException("用户部门无效"); } SysFormInstance fi = this._context.FindById <SysFormInstance>(new object[] { formInstanceId }); if (fi == null) { throw new ApplicationException("表单实例不存在"); } if (!fi.ObjectId.HasValue) { throw new ApplicationException("表单实例未关联对象ID"); } fi.State = 1; this.ProcessInstanceCache.UpdateFormInstance(fi); SysProcessInstance instance2 = new SysProcessInstance { StartTime = new DateTime?(DateTime.Now), EndTime = null, InstanceStatus = 0, ObjectId = fi.ObjectId.Value, FormInstanceId = new int?(fi.FormInstanceId), FormInstance = fi, ProcessId = new long?(this._process.ProcessId), ProcessInstanceId = nextIdentity, StartUserId = new int?(startUserId), StartDeptId = new int?(departmentById.Department_ID), WwfInstanceId = null }; this._pi = instance2; this._pi.FormInstance = fi; this._piCacheFactory.AddProcessInstance(this._pi); Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10); WorkflowMessage item = this.NewStartProcessMessage(); queue.Enqueue(item); while (queue.Count > 0) { queue.Dequeue().Execute(queue); } this._piCacheFactory.ClearCache(nextIdentity); return(nextIdentity); }
internal void RejectApproveWorkItem(int workItemId, string approveComment, long nextActivityId) { SysWorkItem item; this._pi = this._piCacheFactory.GetProcessInstanceCacheByWorkItem(workItemId, out item); if (!item.Status.HasValue) { item.Status = 0; } if (item.Status.Value == 1) { throw new ApplicationException("该工作项已完成"); } if (item.Status.Value == 3) { throw new ApplicationException("该工作项已被系统取消"); } if (item.Status.Value != 0) { throw new ApplicationException("该工作项已完成或被取消"); } this.AddInstanceData(item, ApproveResultEnum.Reject, approveComment); Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10); WorkflowMessage message = this.NewRejectWorkItemWithNextActivityApproveMessage(item, nextActivityId); queue.Enqueue(message); while (queue.Count > 0) { queue.Dequeue().Execute(queue); } this._piCacheFactory.ClearCache(this._pi.ProcessInstanceId); }
private SysProcessInstance LoadProcessInstance(int processInstanceId) { SysProcessInstance pi = this._context.FindById <SysProcessInstance>(new object[] { processInstanceId }); if (pi == null) { throw new ApplicationException("流程实例ID不正确"); } if (pi.FormInstanceId.HasValue) { pi.FormInstance = this._context.FindById <SysFormInstance>(new object[] { pi.FormInstanceId }); if (pi.FormInstance == null) { throw new ApplicationException("流程实例关联表单实例不存在"); } } SysProcess processCache = this._processCache.GetProcessCache(pi.ProcessId.Value); pi.Process = processCache; string condition = string.Format("ProcessInstanceId = {0}", pi.ProcessInstanceId); pi.ActivityInstances = this._context.Where <SysActivityInstance>(condition, new DbParameter[0]); foreach (SysActivityInstance instance2 in pi.ActivityInstances) { this.LoadActivityInstance(instance2, pi, processCache); } return(pi); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IUser startUser = this.GetStartUser(pi); return(new List <IUser> { startUser }); }
protected void Dispose(bool disposing) { if (this._pi != null) { this._piCacheFactory.ClearCache(this._pi.ProcessInstanceId); this._pi = null; } }
internal ProcessEngine(ProcessInstanceCacheFactory runtimeContext, SysProcess process) { this._context = runtimeContext.Context; this._process = process; this._piCacheFactory = runtimeContext; this._manager = this._piCacheFactory.Manager; this._pi = null; }
public ProcessRemindHandlerBase(ProcessInstanceCacheFactory cache, SysProcessInstance pi, SysActivityInstance ai, UseTimeType useTime, SysWorkItem wi = null, int?result = new int?()) { this.creator = new RemindTemplateModelCreator(cache, pi, ai, useTime, wi, result); this._piCacheFactory = cache; this._context = cache.Context; this._manager = cache.Manager; this.InitRemindList(); }
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)); }
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)); }
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); }
internal ProcessEngine(ProcessInstanceCacheFactory runtimeContext, SysProcessInstance processInstance) { if (processInstance.Process == null) { processInstance.Process = runtimeContext.PCacheFactory.GetProcessCache(processInstance.ProcessId.Value); } this._context = runtimeContext.Context; this._process = processInstance.Process; this._piCacheFactory = runtimeContext; this._manager = this._piCacheFactory.Manager; this._pi = processInstance; }
public void AddActivityInstance(SysProcessInstance pi, SysActivityInstance ai) { this._context.Insert(ai); ai.Activity = pi.Process.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == ai.ActivityId); ai.ProcessInstance = pi; pi.ActivityInstances.Add(ai); ai.WorkItems = new List <SysWorkItem>(); ai.ApproveGroups = new List <SysWorkItemApproveGroup>(); ai.FromTransitionInstances = new List <SysTransitionInstance>(); ai.ToTransitionInstances = new List <SysTransitionInstance>(); ai.UserDefinedApproveUsers = new List <SysActivityInstanceApproveUsers>(); }
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); }
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 }); }
private int StartProcessAsync(SysProcess process, int startUserId, int relativeObjectId, List <IApproveUser> nextApproveUserList) { int num3; try { int num = this._context.GetNextIdentity_Int(false); SysProcessInstance instance = new SysProcessInstance { StartTime = new DateTime?(DateTime.Now), InstanceStatus = 0, ObjectId = relativeObjectId, ProcessId = new long?(process.ProcessId), ProcessInstanceId = num, StartUserId = new int?(startUserId) }; if (process.ProcessCategory == 2) { instance.FormInstanceId = new int?(relativeObjectId); T_User user = this._context.FindById <T_User>(new object[] { startUserId }); if (user != null) { T_Department department = this._context.FindById <T_Department>(new object[] { user.Department_ID }); if (department != null) { instance.StartDeptId = new int?(department.Department_ID); } } } int num2 = this._context.GetNextIdentity_Int(false); SysWorkflowMessage msg = new SysWorkflowMessage { ProcessId = process.ProcessId, ProcessInstanceId = num, CreateTime = DateTime.Now, MessageId = num2, MessageType = WorkflowMessageTypeEnum.StartingProcess, OperationUserId = startUserId, State = SysWorkflowMessageStateEnum.Inited }; if ((nextApproveUserList != null) && (nextApproveUserList.Count > 0)) { msg.NextApproveUserList.AddRange(nextApproveUserList); } this.SaveWorkflowMessage(msg); this._context.Insert(instance); num3 = num; } catch (Exception exception) { AppLogHelper.Error(startUserId, exception, "启动流程[{0}]失败, 流程id={1}, 对象id={2}", new object[] { process.ProcessId, process.ProcessName, relativeObjectId }); throw; } return(num3); }