private void LogXmlIntegrityError(string campo, TipoXmlAProcesar tipo, Guid guid) { LoggingHelper.Instance.AgregarLog(new LogProcesoEntity(guid, OrdenesApplication.Instance.SessionUsuarioProceso.IdUsuario) { Fecha = DateTime.Now, IdLogCodigoAccion = (byte)LogCodigoAccion.ProcesadoXMLConError, Descripcion = "Importar: " + tipo + $".Msg: El campo {campo} no se encuentra en el archivo XML", IdUsuario = MAEUserSession.Instancia.IdUsuario }); }
private bool ReadXmlNodes <T>(XmlNodeList xmlnodes, TipoXmlAProcesar tipo, List <T> entities, Guid guid) { foreach (XmlNode node in xmlnodes) { object entity = null; switch (tipo) { case TipoXmlAProcesar.Clientes: entity = MapXmlNodeToClienteXMLEntity(node, guid); break; case TipoXmlAProcesar.Productos: entity = MapXmlNodeToProductoXMLEntity(node, guid); break; case TipoXmlAProcesar.Saldos: entity = MapXmlNodeToSaldoXMLEntity(node, guid); break; } if (entity == null) { return(true); } entities.Add((T)(object)entity); } return(false); }
private void ProcessXml(TipoXmlAProcesar tipoXml, Guid guid) { Clock.Stop(); string subPath = string.Empty; string parentNode = string.Empty; string prefix = string.Empty; // Get File Path switch (tipoXml) { case TipoXmlAProcesar.Clientes: subPath = "Clientes"; parentNode = "BEPersonasParticipantes"; break; case TipoXmlAProcesar.Productos: subPath = "Productos"; parentNode = "BEProductos"; break; case TipoXmlAProcesar.Saldos: subPath = "Saldos"; parentNode = "SaldoEntity"; break; default: break; } prefix = parentNode; var path = Path.Combine(BasePath, subPath); if (!Directory.Exists(path)) { return; } MAEUserSession.CargarInstancia(OrdenesApplication.Instance.SessionUsuarioProceso); var file = Directory.GetFiles(path).FirstOrDefault(); if (file == null) { return; } var xmldoc = new XmlDocument(); XmlNodeList xmlnodes; var hasErrors = false; var filename = string.Empty; try { using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { xmldoc.Load(fs); xmlnodes = xmldoc.GetElementsByTagName(parentNode); if (xmlnodes.Count > 0) { switch (tipoXml) { case TipoXmlAProcesar.Clientes: var clientes = new List <ClienteXMLEntity>(); hasErrors = ReadXmlNodes <ClienteXMLEntity>(xmlnodes, TipoXmlAProcesar.Clientes, clientes, guid); if (hasErrors) { break; } SendXmlToDAL(clientes, TipoXmlAProcesar.Clientes); break; case TipoXmlAProcesar.Productos: var productos = new List <ProductoXMLEntity>(); hasErrors = ReadXmlNodes <ProductoXMLEntity>(xmlnodes, TipoXmlAProcesar.Productos, productos, guid); if (hasErrors) { break; } SendXmlToDAL(productos, TipoXmlAProcesar.Productos); break; case TipoXmlAProcesar.Saldos: var saldos = new List <SaldoXMLEntity>(); hasErrors = ReadXmlNodes <SaldoXMLEntity>(xmlnodes, TipoXmlAProcesar.Saldos, saldos, guid); if (hasErrors) { break; } SendXmlToDAL(saldos, TipoXmlAProcesar.Saldos); break; default: break; } } var date = DateTime.Now; if (hasErrors) { if (!Directory.Exists(Path.Combine(BasePath, subPath, "NoProcesados"))) { Directory.CreateDirectory(Path.Combine(BasePath, subPath, "NoProcesados")); } filename = Path.Combine(BasePath, subPath, "NoProcesados", $"{prefix}{date.Year}{date.Month}{date.Day}{date.Hour}{date.Minute}.xml"); } else { if (!Directory.Exists(Path.Combine(BasePath, subPath, "Procesados"))) { Directory.CreateDirectory(Path.Combine(BasePath, subPath, "Procesados")); } filename = Path.Combine(BasePath, subPath, "Procesados", $"{prefix}{date.Year}{date.Month}{date.Day}{date.Hour}{date.Minute}.xml"); LoggingHelper.Instance.AgregarLog(new LogProcesoEntity(guid, OrdenesApplication.Instance.SessionUsuarioProceso.IdUsuario) { Fecha = DateTime.Now, IdLogCodigoAccion = (byte)LogCodigoAccion.ProcesadoXMLCorrectamente, Descripcion = "Importar: " + tipoXml + ".Nombre Archivo: " + filename, IdUsuario = MAEUserSession.Instancia.IdUsuario }); } } } catch (Exception ex) { hasErrors = true; var date = DateTime.Now; if (!Directory.Exists(Path.Combine(BasePath, subPath, "NoProcesados"))) { Directory.CreateDirectory(Path.Combine(BasePath, subPath, "NoProcesados")); } filename = Path.Combine(BasePath, subPath, "NoProcesados", $"{prefix}{date.Year}{date.Month}{date.Day}{date.Hour}{date.Minute}.xml"); LoggingHelper.Instance.AgregarLog(new LogProcesoEntity(guid, OrdenesApplication.Instance.SessionUsuarioProceso.IdUsuario) { Fecha = DateTime.Now, IdLogCodigoAccion = (byte)LogCodigoAccion.ProcesadoXMLConError, Descripcion = "Importar: " + tipoXml + ".Msg: " + ex.Message, Exception = ex, IdUsuario = MAEUserSession.Instancia.IdUsuario }); } finally { var date = DateTime.Now; var dest = Path.Combine(BasePath, subPath, filename); File.Copy(file, dest); File.Delete(file); } }
private void SendXmlToDAL(object entities, TipoXmlAProcesar tipo) { List <SqlParameter> lista; using (var ts = new TransactionScope()) { switch (tipo) { case TipoXmlAProcesar.Clientes: var clientes = entities as List <ClienteXMLEntity>; foreach (ClienteXMLEntity node in clientes) { lista = new List <SqlParameter>(); lista.Add(SqlServerHelper.GetParam("@NroDocumento", node.NroDocumento)); lista.Add(SqlServerHelper.GetParam("@NombrePersona", node.NombrePersona)); lista.Add(SqlServerHelper.GetParam("@NroCliente", node.NroCliente)); lista.Add(SqlServerHelper.GetParam("@TipoPersona", (int)TipoPersonas.CLIENTE)); lista.Add(SqlServerHelper.GetParam("@IdPersoneriaJuridica", (byte)PersoneriaJuridica.PERSONA_FISICA)); lista.Add(SqlServerHelper.GetParam("@NroIdentificacionTributaria", node.NroIdentificacionTributaria)); lista.Add(SqlServerHelper.GetParam("@CodEmpresa", node.CodEmpresa)); lista.Add(SqlServerHelper.GetParam("@Telefono", node.Telefono)); PersonasDAL.ProcessFromXml(lista); } break; case TipoXmlAProcesar.Productos: var productos = entities as List <ProductoXMLEntity>; foreach (ProductoXMLEntity node in productos) { lista = new List <SqlParameter>(); lista.Add(SqlServerHelper.GetParam("@Codigo", node.Codigo)); lista.Add(SqlServerHelper.GetParam("@Descripcion", node.Descripcion)); lista.Add(SqlServerHelper.GetParam("@CodMoneda", node.CodMoneda)); lista.Add(SqlServerHelper.GetParam("@CodMercado", node.CodMercado)); lista.Add(SqlServerHelper.GetParam("@ISIN", node.ISIN)); lista.Add(SqlServerHelper.GetParam("@Habilitado", node.Habilitado)); ProductosDAL.ProcessFromXml(lista); } break; case TipoXmlAProcesar.Saldos: var saldos = entities as List <SaldoXMLEntity>; foreach (SaldoXMLEntity node in saldos) { lista = new List <SqlParameter>(); lista.Add(SqlServerHelper.GetParam("@CodCliente", node.CodCliente)); lista.Add(SqlServerHelper.GetParam("@CodEmpresa", node.CodEmpresa)); lista.Add(SqlServerHelper.GetParam("@TipoProducto", node.TipoProducto)); lista.Add(SqlServerHelper.GetParam("@CodigoProducto", node.CodigoProducto)); lista.Add(SqlServerHelper.GetParam("@DescripcionProducto", node.DescripcionProducto)); lista.Add(SqlServerHelper.GetParam("@Cantidad", node.Cantidad)); lista.Add(SqlServerHelper.GetParam("@Precio", node.Precio)); lista.Add(SqlServerHelper.GetParam("@Monto", node.Monto)); lista.Add(SqlServerHelper.GetParam("@Moneda", node.Moneda)); SaldosDAL.ProcessFromXml(lista); } break; default: break; } ts.Complete(); } }