/// <summary> /// 快递发货 /// </summary> /// <param name="entity"></param> public WfAppResult Delivery(ProductOrderEntity entity) { var appResult = WfAppResult.Default(); var wfas = new WfAppInteropService(); using (var session = DbFactory.CreateSession()) { var transaction = session.DbContext.Database.BeginTransaction(); try { //流程运行 var actionParameterInternal = new ActionParameterInternal(); actionParameterInternal.MethodParameters = new object[] { "alexsenda" }; WfAppRunner.ActionMethodParameters = new Dictionary <string, ActionParameterInternal>(); WfAppRunner.ActionMethodParameters.Add("CallHello", actionParameterInternal); var result = wfas.RunProcess(session, WfAppRunner, WfAppRunner.Conditions); if (result.Status == WfExecutedStatus.Success) { //写步骤记录表 Write(session, WfAppRunner, "发货", entity.ID.ToString(), entity.OrderCode, "完成发货"); //业务数据处理部分,此处是简单示例... short status = GetProductOrderStatusByActivityCode(WfAppRunner.ProcessGUID, WfAppRunner.Version, WfAppRunner.NextActivityPerformers.Keys.ElementAt <string>(0)); UpdateStatus(entity.ID, status, session); transaction.Commit(); appResult = WfAppResult.Success(); } else { transaction.Rollback(); appResult = WfAppResult.Error(result.Message); } } catch (System.Exception ex) { transaction.Rollback(); appResult = WfAppResult.Error(ex.Message); } finally { session.Dispose(); } return(appResult); } }
/// <summary> /// 快递发货 /// </summary> /// <param name="entity"></param> public WfAppResult Delivery(ProductOrderEntity entity) { var appResult = WfAppResult.Default(); var wfas = new WfAppInteropService(); var session = SessionFactory.CreateSession(); try { session.BeginTrans(); //流程运行 var actionParameterInternal = new ActionParameterInternal(); actionParameterInternal.MethodParameters = new object[] {"alexsenda"}; WfAppRunner.ActionMethodParameters = new Dictionary<string, ActionParameterInternal>(); WfAppRunner.ActionMethodParameters.Add("CallHello", actionParameterInternal); var result = wfas.RunProcess(session, WfAppRunner, WfAppRunner.Conditions); if (result.Status == WfExecutedStatus.Success) { //写步骤记录表 Write(session, WfAppRunner, "发货", entity.ID.ToString(), entity.OrderCode, "完成发货"); //业务数据处理部分,此处是简单示例... UpdateStatus(entity.ID, (short)ProductOrderStatusEnum.Deliveried, session); session.Commit(); appResult = WfAppResult.Success(); } else { session.Rollback(); appResult = WfAppResult.Error(result.Message); } } catch (System.Exception ex) { session.Rollback(); appResult = WfAppResult.Error(ex.Message); } finally { session.Dispose(); } return appResult; }
/// <summary> /// 调用外部事件方法的实现过程 /// <param name="action">操作</param> /// <param name="parameters">参数</param> /// </summary> internal void Execute(ActionEntity action, ActionParameterInternal parameters) { if (action.ActionType == ActionTypeEnum.ExternalMethod) { //取出当前应用程序执行路径 var executingPath = Environment.CurrentDirectory; var pluginAssemblyName = Path.Combine(executingPath, "plugin", action.AssemblyFullName); var pluginAssemblyTypes = Assembly.LoadFile(pluginAssemblyName).GetTypes(); Type outerInfterface = pluginAssemblyTypes .Single(t => t.Name == action.InterfaceFullName && t.IsInterface); Type outerClass = pluginAssemblyTypes .Single(t => !t.IsInterface && outerInfterface.IsAssignableFrom(t)); object instance = Activator.CreateInstance(outerClass, parameters.ConstructorParameters); MethodInfo mi = outerClass.GetMethod(action.MethodName); var result = mi.Invoke(instance, parameters.MethodParameters); } else if (action.ActionType == ActionTypeEnum.WebApi) { throw new ApplicationException("调用WebAPI功能暂未实现!"); } }