/// <summary> /// Añade un nodo de dimensión (y sus hijos) /// </summary> private void AddDimensionNodes(NodeColumnViewModel root, DimensionModel dimension) { NodeColumnViewModel node = new NodeColumnViewModel(this, root, NodeColumnViewModel.NodeColumnType.Dimension, dimension.Id, null); BaseReportingDictionaryModel <DimensionModel> childs = new BaseReportingDictionaryModel <DimensionModel>(); // Asigna el código de dimensión node.DimensionId = dimension.Id; // Añade los campos de la dimensión AddColumnNodes(node, dimension.DataSource.Columns, NodeColumnViewModel.NodeColumnType.DimensionColumn, dimension.Id, string.Empty); // Crea la colección de dimensiones hija a partir de las relaciones foreach (DimensionRelationModel relation in dimension.Relations) { if (relation.Dimension != null) { childs.Add(relation.Dimension); } } // Añade los nodos de dimensión hija foreach (DimensionModel child in childs.EnumerateValuesSorted()) { AddDimensionNodes(node, child); } // Añade el nodo a la raíz root.Children.Add(node); }
/// <summary> /// Crea los registros de columnas /// </summary> private void CreateDataSourceColumns(int dataSourceId, BaseReportingDictionaryModel <DataSourceColumnModel> columns, ref int columnId) { foreach (DataSourceColumnModel column in columns.EnumerateValues()) { // Inserta el origen de datos en la lista de Ids DataBaseIds.Add(("Column", column.Id, columnId, column.DataSource.Id)); // Añade el registro Builder.AppendLine($@"INSERT INTO DataSourceColumns (DataSourceColumnId, DataSourceId, Name, Type, IsPrimaryKey, Visible, Required) VALUES ({columnId++}, {dataSourceId}, {Convert(column.Id)}, {(int) column.Type}, {Convert(column.IsPrimaryKey)}, {Convert(column.Visible)}, {Convert(column.Required)});" ); } }
/// <summary> /// Añade los nodos de dimensiones /// </summary> private void AddDimensionNodes(ReportModel report) { NodeColumnViewModel root = new NodeColumnViewModel(this, null, NodeColumnViewModel.NodeColumnType.DimensionsRoot, "Dimensiones", null); BaseReportingDictionaryModel <DimensionModel> dimensions = GetDimensions(report); // Añade las dimensiones foreach (DimensionModel dimension in dimensions.EnumerateValuesSorted()) { AddDimensionNodes(root, dimension); } // Añade el nodo raíz al árbol Children.Add(root); }
/// <summary> /// Obtiene las dimensiones de un informe /// </summary> private BaseReportingDictionaryModel <DimensionModel> GetDimensions(ReportModel report) { BaseReportingDictionaryModel <DimensionModel> dimensions = new BaseReportingDictionaryModel <DimensionModel>(); // Añade las dimensiones foreach (ReportDataSourceModel dataSource in report.ReportDataSources) { foreach (DimensionRelationModel relation in dataSource.Relations) { if (dimensions[relation.Dimension.Id] == null) { dimensions.Add(relation.Dimension); } } } // Devuelve las dimensiones return(dimensions); }
/// <summary> /// Añade los nodos de columnas /// </summary> private void AddColumnNodes(NodeColumnViewModel root, BaseReportingDictionaryModel <DataSourceColumnModel> columns, NodeColumnViewModel.NodeColumnType nodeColumnType, string dimensionId, string dataSourceId) { // Añade las columnas adecuadas al árbol foreach (DataSourceColumnModel column in columns.EnumerateValuesSorted()) { if (column.Visible) { NodeColumnViewModel node = new NodeColumnViewModel(this, root, nodeColumnType, column.Id, column); // Asigna las propiedades node.DimensionId = dimensionId; node.DataSourceId = dataSourceId; // Añade el nodo root.Children.Add(node); } } }