/// <summary> /// 获取流程监听器实例列表 /// </summary> /// <param name="pageInfo">分页信息</param> /// <returns>流程监听器实例</returns> private object GetPolicyGridData(PagerInfo pageInfo) { BizListener[] bizListenerList = this.Engine.BizObjectManager.GetListenersBySchemaCode(this.SchemaCode); int total = 0; List <BizListenerViewModel> listenerLists = new List <BizListenerViewModel>(); if (bizListenerList != null) { total = bizListenerList.Length; bizListenerList = bizListenerList.Skip((pageInfo.PageIndex - 1) * pageInfo.PageSize).Take(pageInfo.PageSize).ToArray(); Messages.AsyncEndMessage message = null; foreach (BizListener listener in bizListenerList) { message = listener.Message as Messages.AsyncEndMessage; listenerLists.Add(new BizListenerViewModel() { ObjectID = listener.BizObjectId, InstanceID = message.InstanceId, ActivityCode = message.ActivityCode, Condition = listener.Condition, CreatedTime = listener.CreatedTime.ToString("yyyy-MM-d HH:mm:ss") }); } } return(new { Rows = listenerLists, Total = total }); }
/// <summary> /// 创建一个新的流程实例 /// </summary> /// <param name="Engine">引擎实例对象</param> /// <param name="BizObjectId">业务对象ID</param> /// <param name="Workflow">流程模板</param> /// <param name="Schema">数据模型结构</param> /// <param name="InstanceId">流程实例ID</param> /// <param name="Originator">发起人</param> /// <param name="OriginatedJob">发起人使用的角色</param> /// <param name="InstanceName">流程实例名称</param> /// <param name="Priority">紧急程度</param> /// <param name="OriginatingInstance">发起流程的事件接口</param> /// <param name="ParameterTable">发起流程的参数表</param> /// <param name="Request">HttpRequest</param> /// <param name="WorkItemId">返回工作任务ID</param> /// <param name="ErrorMessage">错误消息</param> /// <param name="FinishStartActivity">是否结束第一个活动</param> /// <returns>返回创建流程是否成功</returns> public static bool OriginateInstance( IEngine Engine, string BizObjectId, WorkflowTemplate.PublishedWorkflowTemplate Workflow, DataModel.BizObjectSchema Schema, ref string InstanceId, string Originator, string OriginatedJob, string InstanceName, Instance.PriorityType Priority, EventHandler <OriginateInstanceEventArgs> OriginatingInstance, Dictionary <string, object> ParameterTable, System.Web.HttpRequest Request, ref string WorkItemId, ref string ErrorMessage, bool FinishStartActivity) { if (Workflow == null) { ErrorMessage = Configs.Global.ResourceManager.GetString("SheetUtility_WorkflowNotExist"); return(false); } // 创建流程实例 InstanceId = AppUtility.Engine.InstanceManager.CreateInstance( BizObjectId, Workflow.WorkflowCode, Workflow.WorkflowVersion, InstanceId, InstanceName, Originator, OriginatedJob, false, Instance.InstanceContext.UnspecifiedID, null, Instance.Token.UnspecifiedID); // 设置紧急程度为普通 OThinker.H3.Messages.MessageEmergencyType emergency = Messages.MessageEmergencyType.Normal; // 如果是发起后需要用户填写表单的模式,则紧急程度为高 if (Workflow.StartWithSheet) { emergency = OThinker.H3.Messages.MessageEmergencyType.High; } // 解析流程参数 System.Collections.Generic.Dictionary <string, object> instanceParams = ParameterTable; if (instanceParams == null) { instanceParams = new Dictionary <string, object>(); } // Http Request Parameters ParseRequestParams(Request, Workflow, Schema, instanceParams); // 调用发起事件 OriginateInstanceEventArgs originateArgs = new OriginateInstanceEventArgs(InstanceId, instanceParams); if (OriginatingInstance != null) { OriginatingInstance(OriginatingInstance, originateArgs); } WorkItemId = Guid.NewGuid().ToString().ToLower(); // 启动流程的消息 OThinker.H3.Messages.StartInstanceMessage startInstanceMessage = new OThinker.H3.Messages.StartInstanceMessage( emergency, InstanceId, WorkItemId, originateArgs == null ? null : originateArgs.InstanceParameterTable.Count == 0 ? null : originateArgs.InstanceParameterTable, Priority, false, OThinker.H3.Instance.Token.UnspecifiedID, null); Engine.InstanceManager.SendMessage(startInstanceMessage); if (!Workflow.StartWithSheet) { // 返回工作项为空 WorkItemId = H3.WorkItem.WorkItem.NullWorkItemID; return(true); } // 查找新创建的工作项 string[] jobs = null; for (int triedTimes = 0; triedTimes < 30; triedTimes++) { System.Threading.Thread.Sleep(500); if (AppUtility.Engine.WorkItemManager.GetWorkItem(WorkItemId) != null) { WorkItem.WorkItem item = AppUtility.Engine.WorkItemManager.GetWorkItem(WorkItemId); jobs = new string[] { item.WorkItemID }; break; } } if (jobs == null || jobs.Length == 0) { ErrorMessage = Configs.Global.ResourceManager.GetString("SheetUtility_OriginateFailed"); WorkItemId = OThinker.H3.WorkItem.WorkItem.NullWorkItemID; return(false); } else { // 返回新创建的工作项 WorkItemId = jobs[0]; if (FinishStartActivity) { OThinker.H3.WorkItem.WorkItem item = Engine.WorkItemManager.GetWorkItem(WorkItemId); // 结束掉第一个活动 Engine.WorkItemManager.FinishWorkItem( WorkItemId, Originator, Request.Browser.IsMobileDevice ? WorkItem.AccessPoint.Mobile : WorkItem.AccessPoint.Web, OriginatedJob, OThinker.Data.BoolMatchValue.Unspecified, null, null, WorkItem.ActionEventType.Forward, WorkItem.WorkItem.UnspecifiedActionButtonType); OThinker.H3.Messages.AsyncEndMessage endMessage = new Messages.AsyncEndMessage( Messages.MessageEmergencyType.Normal, InstanceId, item.ActivityCode, item.TokenId, OThinker.Data.BoolMatchValue.Unspecified, false, OThinker.Data.BoolMatchValue.Unspecified, true, null); Engine.InstanceManager.SendMessage(endMessage); } return(true); } }