protected override void OnExecute(SysTask task)
        {
            ExecuteSysTaskActivityTask activityTask = new ExecuteSysTaskActivityTask(task);

            SysTaskProcess process = SysTaskProcessRuntime.GetProcessByActivityID(activityTask.ActivityID);

            process.CurrentActivity.ExecuteTask();

            using (TransactionScope scope = TransactionScopeFactory.Create())
            {
                SysTaskProcessRuntime.Persist();

                //没有异常,则继续流转
                if (process.Status == SysTaskProcessStatus.Running)
                {
                    process = SysTaskProcessRuntime.GetProcessByActivityID(activityTask.ActivityID);

                    AutoMoveToNextActivity(process.CurrentActivity);

                    if (process.OwnerActivity != null)
                        AutoMoveToNextActivity(process.OwnerActivity);
                }

                scope.Complete();
            }

            if (process.Status == SysTaskProcessStatus.Aborted)
                throw new ApplicationException(process.CurrentActivity.StatusText);
        }
Ejemplo n.º 2
0
		public static void ExecuteTask(SysTask task)
		{
			Stopwatch sw = new Stopwatch();
			sw.Start();

			try
			{
				SysTask taskLoaded = SysTaskAdapter.Instance.Load(task.TaskID);

				ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor(taskLoaded.TaskType);

				Console.WriteLine("执行任务:ID={0}, Name={1}, Type={2}",
					taskLoaded.TaskID, taskLoaded.TaskTitle, taskLoaded.TaskType);

				executor.Execute(taskLoaded);

				SysAccomplishedTask accomplishedTask = SysAccomplishedTaskAdapter.Instance.Load(taskLoaded.TaskID);

				Assert.IsNotNull(accomplishedTask);

				if (accomplishedTask.StatusText.IsNotEmpty())
					Console.WriteLine(accomplishedTask.StatusText);
			}
			finally
			{
				sw.Stop();
				Console.WriteLine("执行任务:ID={0}经过的时间为{1:#,##0毫秒}", task.TaskID, sw.ElapsedMilliseconds);
				Console.WriteLine();
			}
		}
		/// <summary>
		/// 同步执行作业
		/// </summary>
		/// <param name="task"></param>
		/// <returns>已经完成的任务</returns>
		public SysAccomplishedTask Execute(SysTask task)
		{
			SysAccomplishedTask result = null;

			Stopwatch sw = new Stopwatch();

			sw.Start();
			try
			{
				BeforeExecute(task);
				OnExecute(task);
				result = OnAfterExecute(task);
			}
			catch (System.Exception ex)
			{
				result = OnError(task, ex);
			}
			finally
			{
				sw.Stop();

				Debug.WriteLine("执行任务,Duration={0:#,##0}ms, ID={1}, Name={2}, Type={3}",
					sw.ElapsedMilliseconds, task.TaskID, task.TaskTitle, task.TaskType);
			}

			return result;
		}
		protected override JobBase GetJobInfo(SysTask task)
		{
			JobBase job = StartWorkflowJobAdapter.Instance.LoadSingleDataByJobID(task.ResourceID);

			(job != null).FalseThrow("不能找到ID为\"{0}\"的启动流程作业(Job)", task.ResourceID);

			return job;
		}
		/// <summary>
		/// 执行之前,置执行状态
		/// </summary>
		/// <param name="task"></param>
		protected virtual void OnBeforeExecute(SysTask task)
		{
			// 修改Task的状态为Running
			if (task.StartTime == DateTime.MinValue)
				task.StartTime = DateTime.Now;

			SysTaskAdapter.Instance.UpdateStatus(task.TaskID, SysTaskStatus.Running);
		}
		protected override JobBase GetJobInfo(SysTask task)
		{
			InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.LoadSingleDataByJobID(task.ResourceID);

			(job != null).FalseThrow("不能找到ID为\"{0}\"的调用服务作业(Job)", task.ResourceID);

			WfServiceInvoker.InvokeContext.Clear();

			WfServiceInvoker.InvokeContext["taskID"] = task.TaskID;
			WfServiceInvoker.InvokeContext["jobID"] = job.JobID;

			return job;
		}
		private static void ExecuteTask(SysTask task)
		{
			try
			{
				ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor(task.TaskType);

				executor.BeforeExecute(task);
				Task.Factory.StartNew(() => executor.Execute(task));
			}
			catch (System.Exception ex)
			{
				SysTaskAdapter.Instance.MoveToCompletedSysTask(task.TaskID, SysTaskStatus.Aborted, ex.GetRealException().ToString());
			}
		}
		/// <summary>
		/// 构造一个任务活动
		/// </summary>
		/// <param name="sysTaskProcess"></param>
		/// <param name="index"></param>
		/// <param name="name"></param>
		/// <param name="task"></param>
		/// <returns></returns>
		public static SysTaskActivity CreateActivity(this SysTaskProcess sysTaskProcess, int index, string name, SysTask task)
		{
			sysTaskProcess.NullCheck("sysTaskProcess");

			SysTaskActivity activity = new SysTaskActivity(task);

			activity.ID = UuidHelper.NewUuidString();
			activity.ProcessID = sysTaskProcess.ID;
			activity.Sequence = index;
			activity.Name = name;

			SysTaskProcessRuntime.ProcessContext.AffectedActivities.AddOrReplace(activity);

			return activity;
		}
		protected InvokeProcessServiceTaskBase(SysTask other)
			: base(other)
		{
		}
		/// <summary>
		/// 执行之前
		/// </summary>
		/// <param name="task"></param>
		public void BeforeExecute(SysTask task)
		{
			OnBeforeExecute(task);
		}
		public DispatchCancelProcessTask(SysTask other) :
			base(other)
		{
		}
Ejemplo n.º 12
0
 public DispatchWithdrawProcessTask(SysTask other) :
     base(other)
 {
 }
		protected override void OnExecute(SysTask task)
		{
			JobBase job = GetJobInfo(task);

			job.Start();
		}
		public DispatchCancelBranchProcessesTask(SysTask other) :
			base(other)
		{
		}
		/// <summary>
		/// 执行之后,置执行状态,并且移动到已完成中
		/// </summary>
		/// <param name="task"></param>
		/// <returns>返回的已完成任务</returns>
		protected virtual SysAccomplishedTask OnAfterExecute(SysTask task)
		{
			//Move,修改Task的状态为Completed
			return SysTaskAdapter.Instance.MoveToCompletedSysTask(task, SysTaskStatus.Completed, string.Empty);
		}
 public DispatchStartBranchProcessTask(SysTask other) :
     base(other)
 {
 }
		public DispatchStartBranchProcessTask(SysTask other) :
			base(other)
		{
		}
 protected InvokeProcessServiceTaskBase(SysTask other)
     : base(other)
 {
 }
Ejemplo n.º 19
0
 public DispatchCancelBranchProcessesTask(SysTask other) :
     base(other)
 {
 }
		/// <summary>
		/// 执行具体的内容
		/// </summary>
		/// <param name="task"></param>
		protected abstract void OnExecute(SysTask task);
		public DispatchWithdrawProcessTask(SysTask other) :
			base(other)
		{
		}
		/// <summary>
		/// 出现异常,置执行状态,并且移动到已完成中
		/// </summary>
		/// <param name="task"></param>
		/// <param name="ex"></param>
		/// <returns>返回的已完成任务</returns>
		protected virtual SysAccomplishedTask OnError(SysTask task, System.Exception ex)
		{
			//Move,修改Task的状态为Aborted
			return SysTaskAdapter.Instance.MoveToCompletedSysTask(task, SysTaskStatus.Aborted, ex.GetRealException().ToString());
		}
Ejemplo n.º 23
0
		public WithdrawProcessTask(SysTask other) :
			base(other)
		{
		}
		/// <summary>
		/// 得到Job信息
		/// </summary>
		/// <param name="task"></param>
		/// <returns></returns>
		protected abstract JobBase GetJobInfo(SysTask task);
		public ExecuteSysTaskActivityTask(SysTask other)
			: base(other)
		{
			this.AfterLoad();
		}
Ejemplo n.º 26
0
		public CancelProcessTask(SysTask other) :
			base(other)
		{
		}
Ejemplo n.º 27
0
 private void SetData(SysTask task)
 {
     task.Score     = tbxScore.Text.ToInt32();
     task.ScoreTime = DateTime.Now;
     task.Status    = (int)TaskStatus.Corrected;
 }
Ejemplo n.º 28
0
		public InvokeServiceTask(SysTask other)
			: base(other)
		{
			this.AfterLoad();
		}
		public StartBranchProcessTask(SysTask other) :
			base(other)
		{
		}