示例#1
0
        /// <summary>
        /// Async method to execute the operation
        /// </summary>
        /// <param name="sqlTask">Sql Task</param>
        /// <returns>Task Result</returns>
        public static async Task <TaskResult> ExecuteTaskAsync(SqlTask sqlTask)
        {
            sqlTask.AddMessage(SR.TaskInProgress, SqlTaskStatus.InProgress, true);
            ITaskOperation taskOperation = sqlTask.TaskMetadata.TaskOperation as ITaskOperation;
            TaskResult     taskResult    = null;

            if (taskOperation != null)
            {
                taskOperation.SqlTask = sqlTask;

                return(await Task.Factory.StartNew(() =>
                {
                    TaskResult result = new TaskResult();
                    try
                    {
                        if (string.IsNullOrEmpty(taskOperation.ErrorMessage))
                        {
                            taskOperation.Execute(sqlTask.TaskMetadata.TaskExecutionMode);
                            result.TaskStatus = SqlTaskStatus.Succeeded;
                        }
                        else
                        {
                            result.TaskStatus = SqlTaskStatus.Failed;
                            result.ErrorMessage = taskOperation.ErrorMessage;
                        }
                    }
                    catch (Exception ex)
                    {
                        result.TaskStatus = SqlTaskStatus.Failed;
                        result.ErrorMessage = ex.Message;
                        if (ex.InnerException != null)
                        {
                            result.ErrorMessage += Environment.NewLine + ex.InnerException.Message;
                        }
                        if (taskOperation != null && taskOperation.ErrorMessage != null)
                        {
                            result.ErrorMessage += Environment.NewLine + taskOperation.ErrorMessage;
                        }
                    }
                    return result;
                }));
            }
            else
            {
                taskResult            = new TaskResult();
                taskResult.TaskStatus = SqlTaskStatus.Failed;
            }

            return(taskResult);
        }
示例#2
0
        /// <summary>
        /// Async method to cancel the operations
        /// </summary>
        public static async Task <TaskResult> CancelTaskAsync(SqlTask sqlTask)
        {
            ITaskOperation taskOperation = sqlTask.TaskMetadata.TaskOperation as ITaskOperation;
            TaskResult     taskResult    = null;

            if (taskOperation != null)
            {
                return(await Task.Factory.StartNew(() =>
                {
                    try
                    {
                        taskOperation.Cancel();

                        return new TaskResult
                        {
                            TaskStatus = SqlTaskStatus.Canceled
                        };
                    }
                    catch (Exception ex)
                    {
                        return new TaskResult
                        {
                            TaskStatus = SqlTaskStatus.Failed,
                            ErrorMessage = ex.Message
                        };
                    }
                }));
            }
            else
            {
                taskResult            = new TaskResult();
                taskResult.TaskStatus = SqlTaskStatus.Failed;
            }

            return(taskResult);
        }
示例#3
0
        /// <summary>
        /// Creates task metadata given the request parameters
        /// </summary>
        /// <param name="requestParam">Request parameters</param>
        /// <param name="taskName">Task name</param>
        /// <param name="taskOperation">Task operation</param>
        /// <param name="connectionService">Connection Service</param>
        /// <returns>Task metadata</returns>
        public static TaskMetadata Create(IRequestParams requestParam, string taskName, ITaskOperation taskOperation, ConnectionService connectionService, string targetLocation = null)
        {
            TaskMetadata   taskMetadata = new TaskMetadata();
            ConnectionInfo connInfo;

            connectionService.TryFindConnection(
                requestParam.OwnerUri,
                out connInfo);

            if (connInfo != null)
            {
                taskMetadata.ServerName = connInfo.ConnectionDetails.ServerName;
            }

            if (connInfo != null)
            {
                taskMetadata.DatabaseName = connInfo.ConnectionDetails.DatabaseName;
            }

            IScriptableRequestParams scriptableRequestParams = requestParam as IScriptableRequestParams;

            if (scriptableRequestParams != null && scriptableRequestParams.TaskExecutionMode == TaskExecutionMode.Script)
            {
                taskMetadata.Name = string.Format("{0} {1}", taskName, SR.ScriptTaskName);
            }
            else
            {
                taskMetadata.Name = taskName;
            }
            taskMetadata.TaskExecutionMode = scriptableRequestParams.TaskExecutionMode;

            taskMetadata.TaskOperation  = taskOperation;
            taskMetadata.OwnerUri       = requestParam.OwnerUri;
            taskMetadata.TargetLocation = targetLocation;

            return(taskMetadata);
        }
示例#4
0
 public TaskController(ITaskOperation itskop)
 {
     //taskOpObj = new TaskOperation();
     taskOpObj = itskop;
 }