/// <summary> /// Carga las relaciones /// </summary> private void LoadRelations() { BaseDataSourceModel dataSource = GetDataSource(); if (dataSource == null) { ListRelationsViewModel = null; } else { System.Collections.Generic.List <DimensionRelationModel> relations = new System.Collections.Generic.List <DimensionRelationModel>(); // Busca las relaciones foreach (ReportDataSourceModel reportDataSource in Report.ReportDataSources) { if (reportDataSource.DataSource.Id.Equals(dataSource.Id)) { relations.AddRange(reportDataSource.Relations); } } // Asocia la lista de relaciones ListRelationsViewModel = new Relations.ListRelationViewModel(ReportingSolutionViewModel, dataSource, ReportDataSource.Relations); // Carga las relaciones ListRelationsViewModel.Load(); } }
public NodeDataSourceViewModel(BaseTreeViewModel trvTree, BaseTreeNodeViewModel parent, BaseDataSourceModel dataSource) : base(trvTree, parent, dataSource.Id, TreeReportingViewModel.NodeType.DataSource.ToString(), TreeReportingViewModel.IconType.Table.ToString(), dataSource, true, true, BauMvvm.ViewModels.Media.MvvmColor.Navy) { DataSource = dataSource; if (dataSource is DataSourceSqlModel) { Icon = TreeReportingViewModel.IconType.DataSourceSql.ToString(); } }
public ListDataSourceColumnsViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, bool updatable) { // Asigna las propiedades ReportingSolutionViewModel = reportingSolutionViewModel; DataSource = dataSource; Updatable = updatable; // Inicializa el viewModel InitViewModel(); // Asigna los comandos NewColumnCommand = new BaseCommand(_ => CreateColumn()); DeleteColumnCommand = new BaseCommand(_ => DeleteColumn(), _ => SelectedItem != null) .AddListener(this, nameof(SelectedItem)); }
/// <summary> /// Carga los datos de una columna /// </summary> private DataSourceColumnModel LoadColumn(BaseDataSourceModel dataSource, MLNode rootML) { DataSourceColumnModel column = new DataSourceColumnModel(dataSource); // Carga las propiedades column.Id = rootML.Attributes[TagSourceId].Value.TrimIgnoreNull(); column.Type = rootML.Attributes[TagType].Value.GetEnum(DataSourceColumnModel.FieldType.Unknown); column.Required = rootML.Attributes[TagRequired].Value.GetBool(); column.IsPrimaryKey = rootML.Attributes[TagPrimaryKey].Value.GetBool(); column.Visible = rootML.Attributes[TagVisible].Value.GetBool(true); // Devuelve el objeto return(column); }
/// <summary> /// Obtiene el alias del origen de datos /// </summary> private string GetDataSourceAlias(BaseDataSourceModel baseDataSource) { switch (baseDataSource) { case DataSourceTableModel dataSource: return(dataSource.Table); case DataSourceSqlModel dataSource: return(dataSource.Id); default: return(baseDataSource.Id); } }
public ListRelationViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, List <DimensionRelationModel> relations) { // Asigna las propiedades ReportingSolutionViewModel = reportingSolutionViewModel; DataSource = dataSource; Relations = relations; // Prepara la lista ListRelations = new ObservableCollection <DimensionRelationViewModel>(); // Asigna los comandos NewRelationCommand = new BaseCommand(_ => OpenRelation(null)); OpenRelationCommand = new BaseCommand(_ => OpenRelation(SelectedItem), _ => SelectedItem != null) .AddListener(this, nameof(SelectedItem)); DeleteRelationCommand = new BaseCommand(_ => DeleteRelation(), _ => SelectedItem != null) .AddListener(this, nameof(SelectedItem)); }
/// <summary> /// Obtiene el nombre de tabla (o la claúsula FROM) y las columnas de un origen de datos /// </summary> internal void Prepare(BaseDataSourceModel baseDataSource) { switch (baseDataSource) { case DataSourceTableModel dataSource: FromTable = dataSource.FullName; FromAlias = dataSource.Table; break; case DataSourceSqlModel dataSource: FromTable = $"({dataSource.Sql})"; FromAlias = dataSource.Id; break; } }
/// <summary> /// Busca un origen de datos /// </summary> protected BaseDataSourceModel SearchDataSource(string dataSourceId) { // Busca el origen de datos foreach (DataWarehouseModel dataWarehouse in Generator.Schema.DataWarehouses.EnumerateValues()) { BaseDataSourceModel dataSource = dataWarehouse.DataSources[dataSourceId]; if (dataSource != null) { return(dataSource); } } // Si ha llegado hasta aquí es porque no ha encontrado nada return(null); }
public DimensionRelationViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, DimensionRelationModel relation) { // Inicializa los objetos ReportingSolutionViewModel = reportingSolutionViewModel; DataSource = dataSource; Relation = relation; // Inicializa las propiedades InitViewModel(); // Inicializa el manejador de eventos sobre el combo ComboDimensions.PropertyChanged += (sender, args) => { if (args.PropertyName.Equals(nameof(ComboDimensions.SelectedItem))) { LoadListForeignKeys(); } }; }
/// <summary> /// Obtiene la consulta de las expresiones /// </summary> internal QueryModel GetQuery(List <QueryModel> dimensionQueries) { //TODO En realidad, un informe puede tener varios orígenes de datos, cuál de los orígenes de datos se escoge, depende de ciertas condiciones como las dimensiones //TODO escogidas en la solicitud, para las primeras pruebas, cogemos directamente la primera solicitud ReportDataSourceModel reportDataSource = Generator.Report.ReportDataSources[0]; BaseDataSourceModel baseDataSource = reportDataSource.DataSource; QueryModel query = new QueryModel(baseDataSource.Id, QueryModel.QueryType.Expressions, GetDataSourceAlias(baseDataSource)); // Prepara la consulta query.Prepare(baseDataSource); // Añade los campos que vienen de otras dimensiones ComputeDimensionFields(query, dimensionQueries); // Obtiene los campos por los que vamos a agrupar y los añade a la colección de claves de dimensión de la consulta ComputeFieldsGroupBy(query, reportDataSource, dimensionQueries); // Obtiene los campos agrupados ComputeFieldsGrouped(query, Generator.Request, baseDataSource); // Devuelve la consulta return(query); }
/// <summary> /// Abre una ventana de consulta de un origen de datos /// </summary> private void OpenQueryDataSource(BaseDataSourceModel dataSource) { string sql = string.Empty; // Obtiene la cadena SQL para la consulta if (dataSource is DataSourceSqlModel dataSourceSql) { sql = dataSourceSql.Sql; } else if (dataSource is DataSourceTableModel dataSourceTable) { sql = GetSql(dataSourceTable); } // Abre la consulta if (!string.IsNullOrWhiteSpace(sql)) { ReportingSolutionViewModel.SolutionViewModel.MainController .OpenWindow(new Details.Queries.ExecuteQueryViewModel(ReportingSolutionViewModel.SolutionViewModel, string.Empty, sql)); } }
/// <summary> /// Obtiene los campos de expresiones agrupados /// </summary> private void ComputeFieldsGrouped(QueryModel query, ReportRequestModel request, BaseDataSourceModel dataSource) { foreach (ExpressionRequestModel expression in request.Expressions) { if (expression.ReportDataSourceId == dataSource.Id) { foreach (ExpressionColumnRequestModel requestColumn in expression.Columns) { foreach (DataSourceColumnModel column in dataSource.Columns.EnumerateValues()) { if (requestColumn.ColumnId.Equals(column.Id, StringComparison.CurrentCultureIgnoreCase)) { query.AddColumn(column.Id, requestColumn.AggregatedBy, requestColumn); } } } } } }