/// <summary> /// Inserta en el documento de Word los procedimientos almacesados. /// </summary> /// <param name="model">Base de datos como TSqlModel.</param> /// <param name="allExtProperties">Todas las propiedades de extensión de la base de datos.</param> private void InsertStoredProcedures(TSqlModel model, IEnumerable <TSqlObject> allExtProperties) { // Busca en el documento la sección "Procedimientos", que tiene un marcador también así llamado. // Es donde se deben añadir todos los correspondientes al modelo de datos. Word.Range range = this.Bookmarks["Procedimientos"].Range.Next(); var records = new List <DocObject>(); // Obtener todas las tablas de la base de datos. var allProcedures = model.GetObjects(DacQueryScopes.All, ModelSchema.Procedure); foreach (var proc in allProcedures) // Leer todas las tablas del modelo de datos. { string procSchema = proc.Name.Parts.First(); // Nuevo registro de la tabla. var acDocObject = new DocObject { Name = proc.Name.Parts.Last(), Type = DBObject.Table }; var procExtProperties = allExtProperties.Where(f => f.Name.ToString().Contains(acDocObject.Name)); acDocObject.Description = GetExtPropertyDescription(new List <string>() { "SqlProcedure", procSchema, acDocObject.Name }, procExtProperties); foreach (var parameter in proc.GetChildren().Where(child => child.ObjectType.Name == "Parameter")) { var dataType = parameter.GetReferenced(Parameter.DataType).First(); // Obtiene el tipo del parametro. var parameterName = parameter.Name.Parts.Last(); // Guarda la información del parámetro. acDocObject.Columns.Add(new Tuple <bool, string, string, string>( false, parameterName, // Nombre del parámetro. dataType?.Name.Parts[0].ToUpper() ?? "", // Tipo del parámetro. GetExtPropertyDescription(new List <string>() { "SqlSubroutineParameter", procSchema, acDocObject.Name, parameterName }, allExtProperties))); } records.Add(acDocObject); } // Crea la tabla en base a la información obtenida desde la base de datos. range = PrintRecords(records, range); CommitRange(range); InsertSpace(range); }
/// <summary> /// Inserta en el documento de Word las funciones indicadas. /// </summary> /// <param name="range">Rango del documento.</param> /// <param name="model">Base de datos como TSqlModel.</param> /// <param name="functions">Todas las funciones como enumerable de objetos TSqlObject.</param> /// <param name="allExtProperties">Todas las propiedades de extensión de la base de datos.</param> public void InsertFunctionType(Word.Range range, IEnumerable <TSqlObject> functions, IEnumerable <TSqlObject> allExtProperties) { var records = new List <DocObject>(); foreach (var function in functions) // Leer todas las funciones del modelo de datos. { string functionSchema = function.Name.Parts.First(); // Nuevo registro de la tabla. var acDocObject = new DocObject { Name = function.Name.Parts.Last(), Type = DBObject.Function }; var allFunctions = allExtProperties.Where(f => f.Name.ToString().Contains(acDocObject.Name)); // Propiedades de extensión para la función. var functionExtProperty = allExtProperties.Where(f => f.Name.ToString().Contains(acDocObject.Name)); acDocObject.Description = GetExtPropertyDescription(new List <string>() { "SqlSubroutineParameter", functionSchema, acDocObject.Name }, functionExtProperty); foreach (var parameter in function.GetChildren().Where(child => child.ObjectType.Name == "Parameter")) { // Tipo del campo. var parameterType = parameter.GetReferenced(Parameter.DataType).Any() ? parameter.GetReferenced(Parameter.DataType).First() : null; var parameterName = parameter.Name.Parts.Last(); // Guarda la información del parámetro. acDocObject.Columns.Add(new Tuple <bool, string, string, string>( false, parameterName, // Nombre del campo. parameterType?.Name.Parts[0].ToUpper() ?? "", // Tipo del campo. GetExtPropertyDescription(new List <string>() { "SqlSubroutineParameter", functionSchema, acDocObject.Name, parameterName }, allExtProperties))); } records.Add(acDocObject); } // Crea la tabla en base a la información obtenida desde la base de datos. range = PrintRecords(records, range); CommitRange(range); InsertSpace(range); }
/// <summary> /// Inserta en el documento de Word las tablas de la base de datos. /// </summary> /// <param name="model">Base de datos como TSqlModel.</param> /// <param name="allExtProperties">Todas las propiedades de extensión de la base de datos.</param> private void InsertTables(TSqlModel model, IEnumerable <TSqlObject> allExtProperties) { // Busca en el documento la sección "Tablas", que tiene un marcador también así llamado. // Es donde se deben añadir todas las tablas correspondientes al modelo de datos. Word.Range range = this.Bookmarks["Tablas"].Range.Next(); var records = new List <DocObject>(); // Obtiene todas las tablas de la base de datos. var allDbTables = model.GetObjects(DacQueryScopes.All, ModelSchema.Table); foreach (var table in allDbTables) // Leer todas las tablas del modelo de datos. { string tableSchema = table.Name.Parts.First(); // Incluye solo aquellas tablas que pertenecen al esquema "dbo". if (tableSchema != "dbo") { continue; } // Nuevo registro de la tabla. var acDocObject = new DocObject { Name = table.Name.Parts.Last(), Type = DBObject.Table }; // Propiedades de extensión para la tabla. var tableExtProperty = allExtProperties.Where(f => f.Name.ToString().Contains(acDocObject.Name)); acDocObject.Description = GetExtPropertyDescription(new List <string>() { "SqlTableBase", tableSchema, acDocObject.Name }, tableExtProperty); foreach (var column in table.GetChildren().Where(child => child.ObjectType.Name == "Column")) { // Restricción de clave primaria. var pkConstraint = column.GetReferencing(PrimaryKeyConstraint.Columns, DacQueryScopes.UserDefined); // Tipo del campo. var fieldType = column.GetReferenced(Column.DataType).Any() ? column.GetReferenced(Column.DataType).First() : null; var fieldName = column.Name.Parts.Last(); // Guarda la información del campo. acDocObject.Columns.Add(new Tuple <bool, string, string, string>( pkConstraint.Any(), // Es clave primaria o no. fieldName, // Nombre del campo. fieldType?.Name.Parts[0].ToUpper() ?? "", // Tipo del campo. GetExtPropertyDescription(new List <string>() { "SqlColumn", tableSchema, acDocObject.Name, fieldName }, tableExtProperty))); } records.Add(acDocObject); } // Crea la tabla en base a la información obtenida desde la base de datos. range = PrintRecords(records, range, true); CommitRange(range); InsertSpace(range); }