/// <summary> /// Obtiene la configuración desde el archivo XML. /// </summary> /// <remarks> /// Registro de versiones: /// /// 1.0 08/10/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial. /// </remarks> /// <param name="claseDAO">Tipo de la clase de un DAO.</param> /// <returns></returns> public static DynamicQueryRoot ObtenerConfiguracion(Type claseDAO) { IMonitorArchivo monitor = MonitorArchivoFactory.ObtenerArchivo(); string DynamicQueryConfigPath = FrameworkConfigurationManager.ObtenerRutaArchivoConfiguracion(CARPETA_DYNAMIC_QUERIES); string ruta = monitor.ObtenerRutaArchivo(DynamicQueryConfigPath, claseDAO.FullName + ".dbq.xml"); string clave = null; if (monitor.Existe(ruta)) { DynamicQueryConfigPath = ruta; clave = claseDAO.FullName; } else { DynamicQueryConfigPath = monitor.ObtenerRutaArchivoExistente(DynamicQueryConfigPath, claseDAO.Name + ".dbq.xml"); clave = claseDAO.Name; } if ((!ArchivosConsultas.ContainsKey(clave)) || (monitor.FueModificado(ArchivosConsultas[clave].FechaUltimaModificacion, DynamicQueryConfigPath))) { XmlSerializer serializer = new XmlSerializer(typeof(DynamicQueryRoot)); FileStream file = null; DynamicQueryRoot retorno = null; try { file = new FileStream(DynamicQueryConfigPath, FileMode.Open); retorno = serializer.Deserialize(file) as DynamicQueryRoot; } catch (Exception e) { throw e; } finally { if (file != null) { file.Close(); } } if (retorno != null) { Configuracion = retorno; } if (!ArchivosConsultas.ContainsKey(clave)) { ArchivosConsultas.Add(clave, retorno); } ArchivosConsultas[clave].FechaUltimaModificacion = monitor.ObtenerFechaUltimaModificacion(DynamicQueryConfigPath); } return(Configuracion); }
/// <summary> /// Obtiene una consulta desde el archivo de configuración, según el nombre de la consulta y el tipo de la base de datos. /// </summary> /// <remarks> /// Registro de versiones: /// /// 1.0 08/10/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial. /// </remarks> /// <param name="nombre">Nombre de la consulta dinámica.</param> /// <param name="tipoBaseDatos">Tipo de base de datos de la conexión.</param> /// <param name="tipoDAO">Clase mediante reflexión que desea acceder a la base de datos.</param> /// <returns></returns> public static QueryTag ObtenerConsulta(string nombre, string tipoBaseDatos, Type tipoDAO) { DynamicQueryRoot root = ObtenerConfiguracion(tipoDAO); if (root != null) { int cantidad = root.Consultas.Count(c => c.Nombre == nombre); if (cantidad == 1) { DynamicQueryTag tag = root.Consultas.First(c => c.Nombre == nombre); cantidad = tag.Consultas.Count(c => c.TipoBaseDatos == tipoBaseDatos); if (cantidad == 1) { return(tag.Consultas.First(c => c.TipoBaseDatos == tipoBaseDatos)); } else if (cantidad == 0) { throw new PreparacionException(string.Format("¡No se ha encontrado la consulta dinámica {0} para {1}!", nombre, tipoBaseDatos)); } else { throw new PreparacionException(string.Format("¡Exite más de una consulta dinámica con el nombre {0} y para {1}!", nombre, tipoBaseDatos)); } } else if (cantidad == 0) { throw new PreparacionException(string.Format("¡No se ha encontrado la consulta dinámica {0}!", nombre)); } else { throw new PreparacionException(string.Format("¡Exite más de una consulta dinámica con el nombre {0}!", nombre)); } } throw new PreparacionException("¡La configuración de Dynamic Query no posee definiciones!"); }