/// <summary> /// Obtiene las relaciones /// </summary> internal List <DimensionRelationModel> GetRelations() { List <DimensionRelationModel> relations = new List <DimensionRelationModel>(); // Añade las relaciones foreach (DimensionRelationViewModel dimensionRelation in ListRelations) { DimensionRelationModel relation = new DimensionRelationModel(DataSource.DataWarehouse); // Asigna las propiedades relation.DimensionId = dimensionRelation.GetDimension().Id; // Asigna las claves foráneas foreach (ListItemForeignKeyViewModel foreignKeyViewModel in dimensionRelation.ForeignKeys) { DataSourceColumnModel relatedColumn = foreignKeyViewModel.GetRelatedColumn(); if (relatedColumn != null) { relation.ForeignKeys.Add(new RelationForeignKey { ColumnId = foreignKeyViewModel.SourceColumn.Id, TargetColumnId = relatedColumn.Id } ); } } // Añade la relación a la colección relations.Add(relation); } // Devuelve las relaciones return(relations); }
/// <summary> /// Obtiene la consulta de una dimensión /// </summary> private QueryModel GetChildQuery(DimensionRequestModel dimensionRequest) { DimensionModel dimension = GetDimension(dimensionRequest); QueryModel query = new QueryModel(dimensionRequest.DimensionId, QueryModel.QueryType.Dimension, dimension.Id); // Prepara la consulta query.Prepare(dimension.DataSource); // Añade los campos clave foreach (DataSourceColumnModel column in dimension.DataSource.Columns.EnumerateValues()) { if (column.IsPrimaryKey) { query.AddPrimaryKey(dimensionRequest.GetRequestColumn(column.Id), column.Id, CheckIsColumnAtColumnRequested(column, dimensionRequest.Columns)); } } // Asigna los campos foreach (DimensionColumnRequestModel columnRequest in dimensionRequest.Columns) { DataSourceColumnModel column = dimension.DataSource.Columns[columnRequest.ColumnId]; if (column != null && !column.IsPrimaryKey) { query.AddColumn(columnRequest.ColumnId, columnRequest); } } // Devuelve la consulta return(query); }
public ListItemForeignKeyViewModel(DataSourceColumnModel sourceColumn, DimensionModel targetDimension, string targetColumnId) { // Asigna las propiedades SourceColumn = sourceColumn; TargetDimension = targetDimension; TargetColumnId = targetColumnId; // Inicializa el ViewModel InitViewModel(); }
public ListItemDataSourceColumnViewModel(ReportingSolutionViewModel reportingSolutionViewModel, DataSourceColumnModel column, bool isUpdatable) { // Asigna las propiedades ReportingSolutionViewModel = reportingSolutionViewModel; Column = column; Updatable = isUpdatable; // Inicializa el ViewModel InitViewModel(); }
public NodeDataSourceColumnViewModel(BaseTreeViewModel trvTree, BaseTreeNodeViewModel parent, DataSourceColumnModel column) : base(trvTree, parent, column.Id, TreeReportingViewModel.NodeType.Table.ToString(), TreeReportingViewModel.IconType.Field.ToString(), column, false) { Column = column; if (column.IsPrimaryKey) { Icon = TreeReportingViewModel.IconType.Key.ToString(); } if (!column.Visible) { Foreground = BauMvvm.ViewModels.Media.MvvmColor.Gray; } }
/// <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> /// Comprueba si la columna está entre las columnas solicitadas /// </summary> private bool CheckIsColumnAtColumnRequested(DataSourceColumnModel column, List <DimensionColumnRequestModel> columnRequests) { // Busca la columna entre las columnas solicitadas foreach (DimensionColumnRequestModel columnRequest in columnRequests) { if (column.Id.Equals(columnRequest.ColumnId, StringComparison.CurrentCultureIgnoreCase)) { return(true); } } // Si llega hasta aquí es porque no lo ha encontrado return(false); }
public NodeColumnViewModel(BaseTreeViewModel trvTree, IHierarchicalViewModel parent, NodeColumnType columnNodeType, string text, DataSourceColumnModel column) : base(trvTree, parent, text, Explorers.TreeReportingViewModel.NodeType.ConnectionRoot.ToString(), Explorers.TreeReportingViewModel.IconType.Connection.ToString(), column, false, false, MvvmColor.Black) { // Asigna la columna ColumnNodeType = columnNodeType; Column = column; // Asigna las propiedades if (column == null) // ... si no es una columna, es una cabecera { IsBold = true; Foreground = MvvmColor.Red; } else // ... es una columna, le asigna sus propiedades { CanSelect = true; SortOrder = BaseColumnRequestModel.SortOrder.Undefined; } // Asigna los filtros if (column != null && trvTree is TreeQueryReportViewModel tree) { FilterWhere = new ListReportColumnFilterViewModel(tree.ReportViewModel, this); FilterHaving = new ListReportColumnFilterViewModel(tree.ReportViewModel, this); } // Carga el combo LoadComboAggregation(); // Normaliza las propiedades NormalizeProperties(); // Asigna el manejador de eventos PropertyChanged += (sender, args) => { if (args.PropertyName.Equals(nameof(IsChecked)) && Column != null) { NormalizeProperties(); } }; ComboAggregationTypes.PropertyChanged += (sender, args) => { if (args.PropertyName.Equals(nameof(ComboViewModel.SelectedItem)) && Column != null) { NormalizeProperties(); } }; // Asigna los comandos SortOrderCommand = new BaseCommand(_ => UpdateSortOrder(), _ => CanSort) .AddListener(this, nameof(CanSort)); FilterWhereCommand = new BaseCommand(_ => UpdateFilter(true), _ => CanFilterWhere) .AddListener(this, nameof(CanSort)); FilterHavingCommand = new BaseCommand(_ => UpdateFilter(false), _ => CanFilterHaving) .AddListener(this, nameof(CanSort)); }
/// <summary> /// Obtiene el título con las claves foráneas /// </summary> private string GetForeignKeysName() { string title = string.Empty; // Busca si hay alguna clave foránea definida foreach (ListItemForeignKeyViewModel foreignKey in ForeignKeys) { DataSourceColumnModel relatedColumn = foreignKey.GetRelatedColumn(); // Añade el título a la cadena if (relatedColumn != null) { title = title.AddWithSeparator($"{foreignKey.ColumnName} -> {relatedColumn.Id}", ","); } } // Si ha llegado hasta aquí es porque no se ha seleccionado ninguna clave foránea return(title); }
/// <summary> /// Convierte una tabla de base de datos en un esquema /// </summary> private DataSourceTableModel ConvertDataSource(DataWarehouseModel dataWarehouse, BaseTableDbModel table) { DataSourceTableModel dataSource = new DataSourceTableModel(dataWarehouse); // Asigna los datos dataSource.Schema = table.Schema; dataSource.Table = table.Name; // Asigna las columnas foreach (FieldDbModel field in table.Fields) { DataSourceColumnModel column = new DataSourceColumnModel(dataSource); // Asigna las propiedades column.Id = field.Name; column.IsPrimaryKey = field.IsKey; column.Type = Convert(field.Type); column.Required = field.IsRequired; // Añade la columna dataSource.Columns.Add(column); } // Devuelve el origen de datos return(dataSource); }