/// <summary> /// 活动事件订阅 /// </summary> /// <param name="eventType">活动事件类型</param> /// <param name="func">回调方法</param> /// <returns>服务类</returns> public IWorkflowService Subscribe(EventFireTypeEnum eventType, Func <int, string, IDelegateService, Boolean> func) { //_wfAppRunner.DelegateEventList.Add( // new KeyValuePair<EventFireTypeEnum, Func<int, string, IDelegateService, bool>>(eventType, func) //); return(this); }
/// <summary> /// 活动事件订阅 /// </summary> /// <param name="eventType">活动事件类型</param> /// <param name="func">回调方法</param> /// <returns>服务类</returns> public IWorkflowService Subscribe(EventFireTypeEnum eventType, Func <DelegateContext, IDelegateService, Boolean> func) { _wfAppRunner.DelegateEventList.Add( new KeyValuePair <EventFireTypeEnum, Func <DelegateContext, IDelegateService, bool> >(eventType, func) ); return(this); }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="context">活动上下文</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, ActivityForwardContext context) { InvokeExternalDelegate(session, eventType, context.ActivityResource.AppRunner.DelegateEventList, context.FromActivityInstance.ID, context.Activity.ActivityCode, context.ActivityResource); }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="eventList">事件列表</param> /// <param name="context">上下文</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, DelegateEventList eventList, DelegateContext context) { //过滤注册事件类型 var eventListFiltered = eventList.Where(k => k.Key == eventType); if (eventListFiltered != null) { //执行方法 Execute(session, context, eventListFiltered); } }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="eventList">事件列表</param> /// <param name="instanceID">实例ID</param> /// <param name="code">实例代码</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, DelegateEventList eventList, int instanceID, string code = null) { //过滤注册事件类型 var eventListFiltered = eventList.Where(k => k.Key == eventType); if (eventListFiltered != null) { //执行方法 Execute(session, instanceID, code, eventListFiltered); } }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="context">活动上下文</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, ActivityForwardContext context) { var delegateContext = new DelegateContext { AppInstanceID = context.ProcessInstance.AppInstanceID, ProcessGUID = context.ProcessInstance.ProcessGUID, ProcessInstanceID = context.ProcessInstance.ID, ActivityGUID = context.FromActivityInstance.ActivityGUID, ActivityName = context.Activity.ActivityName, ActivityCode = context.Activity.ActivityCode, ActivityResource = context.ActivityResource }; InvokeExternalDelegate(session, eventType, context.ActivityResource.AppRunner.DelegateEventList, delegateContext); }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="eventList">事件列表</param> /// <param name="processInstanceID">流程实例ID</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, DelegateEventList eventList, int processInstanceID) { //过滤注册事件类型 var eventListFiltered = eventList.Where(k => k.Key == eventType); if (eventListFiltered != null) { var pim = new ProcessInstanceManager(); var entity = pim.GetById(session.Connection, processInstanceID, session.Transaction); //执行方法 var context = new DelegateContext { AppInstanceID = entity.AppInstanceID, ProcessGUID = entity.ProcessGUID, ProcessInstanceID = processInstanceID }; Execute(session, context, eventListFiltered); } }
/// <summary> /// 调用外部业务应用的程序方法 /// </summary> /// <param name="session">数据会话</param> /// <param name="eventType">事件类型</param> /// <param name="currentActivity">当前活动节点</param> /// <param name="context">活动上下文</param> internal static void InvokeExternalDelegate(IDbSession session, EventFireTypeEnum eventType, ActivityEntity currentActivity, ActivityForwardContext context) { //默认为linker.FromActivity表示执行当前运行节点 //linker.ToActivity != null 为运行事件类型的节点 var delegateContext = new DelegateContext { AppInstanceID = context.ProcessInstance.AppInstanceID, ProcessGUID = context.ProcessInstance.ProcessGUID, ProcessInstanceID = context.ProcessInstance.ID, ActivityGUID = currentActivity.ActivityGUID, ActivityName = currentActivity.ActivityName, ActivityCode = currentActivity.ActivityCode, ActivityResource = context.ActivityResource }; InvokeExternalDelegate(session, eventType, context.ActivityResource.AppRunner.DelegateEventList, delegateContext); }