/// <summary> /// Inicializa el ViewModel /// </summary> private void InitViewModel() { // Combo de formato de los archivos ComboFormat = new ComboViewModel(this); ComboFormat.AddItem((int)Application.SolutionManager.FormatType.Parquet, "Parquet"); ComboFormat.AddItem((int)Application.SolutionManager.FormatType.Csv, "CSV"); ComboFormat.SelectedItem = ComboFormat.Items[0]; // Asigna las propiedades ValidateFiles = true; MountPathVariable = "MountPath"; MountPathContent = "/mnt/c/Test"; DataBaseComputeVariable = "DbCompute"; DataBaseValidateVariable = "DbValidate"; PathValidate = "Validate"; TablePrefixes = "SRC_;EXT_;TRN_"; GenerateQvs = true; OutputPath = string.Empty; CompareString = true; DateFormat = "d/M/yyyy"; DecimalSeparator = ","; DecimalType = "decimal(10, 2)"; CompareOnlyAlphaAndDigits = true; // Carga el árbol de conexiones TreeConnection.LoadConnection(ComboConnections.GetSelectedConnection()); // Indica que no ha habido modificaciones IsUpdated = false; }
/// <summary> /// Exporta la tabla de datos /// </summary> private async Task ExportAsync() { if (string.IsNullOrWhiteSpace(Query)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Introduzca una consulta para ejecutar"); } else { ConnectionModel connection = ComboConnections.GetSelectedConnection(); if (connection == null) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { (ArgumentListModel arguments, string error) = SolutionViewModel.ConnectionExecutionViewModel.GetParameters(); if (!string.IsNullOrWhiteSpace(error)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage(error); } else { string fileName = SolutionViewModel.MainController.DialogsController .OpenDialogSave(string.Empty, ExportDataController.MaskExportFiles, ExportDataController.DefaultFileName, ExportDataController.DefaultExtension); if (!string.IsNullOrEmpty(fileName)) { // Arranca los temporizadores e inicializa el interface de usuario con el inicio de la consulta StartQuery(); // Ejecuta la exportación try { (bool exported, string exportError) = await ExportAsync(connection, arguments, fileName, _cancellationToken); if (!exported) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage(error); } else { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("El archivo se ha grabado correctamente"); } } catch (Exception exception) { SolutionViewModel.MainController.Logger.Default.LogItems.Error($"Error al grabar el archivo '{fileName}'", exception); SolutionViewModel.MainController.HostController.SystemController.ShowMessage($"Error al grabar el archivo '{fileName}'"); } // Detiene la consulta StopQuery(); } } } } }
/// <summary> /// Comprueba los datos introducidos /// </summary> private bool ValidateData() { bool validated = false; // Comprueba los datos introducidos if (ComboConnections.GetSelectedConnection() == null) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione una conexión"); } else if (string.IsNullOrWhiteSpace(OutputPath)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el directorio de grabación de los archivos"); } else if (string.IsNullOrWhiteSpace(DataBaseComputeVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable de base de datos de cálculo"); } else if (string.IsNullOrWhiteSpace(DataBaseValidateVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable de base de datos de validación"); } else if (TreeConnection.GetSelectedTables().Count == 0) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione al menos una tabla"); } else if (ValidateFiles) { if (string.IsNullOrWhiteSpace(MountPathVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable con el directorio de archivos"); } else if (string.IsNullOrWhiteSpace(MountPathContent)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el directorio de archivos"); } else if (string.IsNullOrWhiteSpace(PathValidate)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del subdirectorio donde se encuentran los archivos a validar"); } else { validated = true; } } else { if (string.IsNullOrWhiteSpace(DataBaseTarget)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de base de datos a comparar"); } else { validated = true; } } // Devuelve el valor que indica si los datos son correctos return(validated); }
/// <summary> /// Comprueba los datos introducidos /// </summary> private bool ValidateData() { bool validated = false; // Comprueba los datos introducidos if (ComboConnections.GetSelectedConnection() == null) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione la conexión"); } else if (string.IsNullOrWhiteSpace(Provider)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del proveedor en el archivo"); } else if (string.IsNullOrWhiteSpace(DataBase)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la base de datos"); } else if (string.IsNullOrWhiteSpace(PathVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable con el directorio de salida"); } else if (string.IsNullOrWhiteSpace(DataBaseVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable de base de datos"); } else if (string.IsNullOrWhiteSpace(OutputPath)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el directorio de grabación de los proyectos"); } else if (string.IsNullOrWhiteSpace(FileNameTest)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del archivo XML de pruebas"); } else if (string.IsNullOrWhiteSpace(FileNameAssert)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del archivo XML de comparación"); } else { validated = true; } // Devuelve el valor que indica si los datos son correctos return(validated); }
/// <summary> /// Comprueba los datos introducidos /// </summary> private bool ValidateData() { bool validated = false; // Comprueba los datos introducidos if (ComboConnections.GetSelectedConnection() == null) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione una conexión"); } else if (string.IsNullOrWhiteSpace(OutputFileName)) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione el nombre de archivo"); } else { validated = true; } // Devuelve el valor que indica si los datos son correctos return(validated); }
/// <summary> /// Comprueba los datos introducidos /// </summary> private bool ValidateData() { bool validated = false; // Comprueba los datos introducidos if (ComboConnections.GetSelectedConnection() == null) { SolutionViewModel.MainController.SystemController.ShowMessage("Seleccione una conexión"); } else if (string.IsNullOrWhiteSpace(DataBaseVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la base de datos"); } else if (string.IsNullOrWhiteSpace(MountPathVariable)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre de la variable con el directorio de archivos"); } else if (string.IsNullOrWhiteSpace(SubPath)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el subdirectorio de archivos"); } else if (string.IsNullOrWhiteSpace(PathInputFiles) && !System.IO.Directory.Exists(PathInputFiles)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del directorio donde se encuentran los archivos a importar"); } else if (string.IsNullOrWhiteSpace(OutputFileName)) { SolutionViewModel.MainController.SystemController.ShowMessage("Introduzca el nombre del archivo a generar"); } else { validated = true; } // Devuelve el valor que indica si los datos son correctos return(validated); }
/// <summary> /// Ejecuta la consulta /// </summary> private async Task ExecuteQueryAsync() { if (string.IsNullOrWhiteSpace(Query)) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Introduzca una consulta para ejecutar"); } else { ConnectionModel connection = ComboConnections.GetSelectedConnection(); if (connection == null) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { (Application.Connections.Models.ArgumentListModel arguments, string error) = SolutionViewModel.ConnectionExecutionViewModel.GetParameters(); if (!string.IsNullOrWhiteSpace(error)) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage(error); } else { // Limpia los datos DataResults = null; // Inicializa el temporizador _timer = new System.Timers.Timer(TimeSpan.FromMilliseconds(500).TotalMilliseconds); _stopwatch = new System.Diagnostics.Stopwatch(); // Indica que se está ejecutando una tarea y arranca el temporizador IsExecuting = true; _timer.Elapsed += (sender, args) => ExecutionTime = _stopwatch.Elapsed.ToString(); _timer.Start(); _stopwatch.Start(); ExecutionTimeColor = BauMvvm.ViewModels.Media.MvvmColor.Red; // Obtiene el token de cancelación _tokenSource = new CancellationTokenSource(); _cancellationToken = _tokenSource.Token; // Ejecuta la consulta try { // Actualiza la página actual si es una consulta nueva if (string.IsNullOrWhiteSpace(_lastQuery) || !Query.Equals(_lastQuery, StringComparison.CurrentCultureIgnoreCase)) { ActualPage = 1; } // Carga la consulta if (PaginateQuery) { DataResults = await SolutionViewModel.MainViewModel.Manager.GetDatatableQueryAsync(connection, Query, arguments, ActualPage, PageSize, connection.TimeoutExecuteScript, _cancellationToken); } else { DataResults = await SolutionViewModel.MainViewModel.Manager.GetDatatableQueryAsync(connection, Query, arguments, 0, 0, connection.TimeoutExecuteScript, _cancellationToken); } // Guarda la consulta que se acaba de lanzar _lastQuery = Query; } catch (Exception exception) { SolutionViewModel.MainViewModel.Manager.Logger.Default.LogItems.Error($"Error al ejecutar la consulta. {exception.Message}"); } // Detiene la ejecucion StopQuery(); } } } }
/// <summary> /// Ejecuta la consulta /// </summary> public async Task ExecuteQueryAsync() { string querySelected = GetEditorSelectedText(); if (string.IsNullOrWhiteSpace(querySelected)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Introduzca una consulta para ejecutar"); } else { ConnectionModel connection = ComboConnections.GetSelectedConnection(); if (connection == null) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { (ArgumentListModel arguments, string error) = SolutionViewModel.ConnectionExecutionViewModel.GetParameters(); if (!string.IsNullOrWhiteSpace(error)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage(error); } else { // Limpia los datos DataResults = null; // Arranca la consulta StartQuery(); // Ejecuta la consulta try { // Actualiza la página actual si es una consulta nueva if (string.IsNullOrWhiteSpace(_lastQuery) || !querySelected.Equals(_lastQuery, StringComparison.CurrentCultureIgnoreCase)) { ActualPage = 1; } // Carga la consulta if (PaginateQuery) { DataResults = await SolutionViewModel.Manager.GetDatatableQueryAsync(connection, querySelected, arguments, ActualPage, PageSize, connection.TimeoutExecuteScript, _cancellationToken); } else { DataResults = await SolutionViewModel.Manager.GetDatatableQueryAsync(connection, querySelected, arguments, 0, 0, connection.TimeoutExecuteScript, _cancellationToken); } // Guarda la consulta que se acaba de lanzar _lastQuery = querySelected; } catch (Exception exception) { SolutionViewModel.Manager.Logger.Default.LogItems.Error($"Error al ejecutar la consulta. {exception.Message}"); } // Detiene la ejecucion StopQuery(); } } } }
/// <summary> /// Muestra el plan de ejecución /// </summary> private async Task ShowExecutionPlanAsync() { string query = GetEditorSelectedText(); if (string.IsNullOrWhiteSpace(query)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Introduzca una consulta"); } else { ConnectionModel connection = ComboConnections.GetSelectedConnection(); if (connection == null) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { (ArgumentListModel arguments, string error) = SolutionViewModel.ConnectionExecutionViewModel.GetParameters(); if (!string.IsNullOrWhiteSpace(error)) { SolutionViewModel.MainController.HostController.SystemController.ShowMessage(error); } else { try { DataTable table = await SolutionViewModel.Manager.GetExecutionPlanAsync(connection, query, arguments, connection.TimeoutExecuteScript, _cancellationToken); string plan = string.Empty; // Obtiene el plan de ejecución if (table != null) { foreach (DataRow row in table.Rows) { // Añade el contenido de las columnas for (int column = 0; column < table.Columns.Count; column++) { if (!(row[column] is DBNull) && row[column] != null) { plan += row[column].ToString(); } } // Añade un salto de línea plan += Environment.NewLine; } } // Asigna el texto del plan de ejecución ExecutionPlanText = plan; } catch (Exception exception) { SolutionViewModel.MainController.Logger.Default.LogItems.Error($"Error al obtener el plan de ejecución. {exception.Message}"); } } } } }