コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public ListItemForeignKeyViewModel(DataSourceColumnModel sourceColumn, DimensionModel targetDimension, string targetColumnId)
 {
     // Asigna las propiedades
     SourceColumn    = sourceColumn;
     TargetDimension = targetDimension;
     TargetColumnId  = targetColumnId;
     // Inicializa el ViewModel
     InitViewModel();
 }
コード例 #4
0
 public ListItemDataSourceColumnViewModel(ReportingSolutionViewModel reportingSolutionViewModel, DataSourceColumnModel column, bool isUpdatable)
 {
     // Asigna las propiedades
     ReportingSolutionViewModel = reportingSolutionViewModel;
     Column    = column;
     Updatable = isUpdatable;
     // Inicializa el ViewModel
     InitViewModel();
 }
コード例 #5
0
 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;
     }
 }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
 /// <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);
 }
コード例 #8
0
 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));
 }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        /// <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);
        }