/// <summary> /// Servicio que permite AGREGAR la tabla GNB_TRANSAC con elementos dentro de un String de tipo XML /// </summary> /// <param name="mC">Cadena de caracteres de tipo XML</param> public void AgregarTransacciones(string mP) { ServicioTransacciones pServicioProductos = new ServicioTransacciones(); //servicio que permite comunicar con BD XmlSerializer pSerializador = new XmlSerializer(typeof(TransacCollection)); //objeto que recibira los elementos serializados StringReader lector = new StringReader(mP); //se crea un lector el cual recibira los datos des-serializados TransacCollection pTransacciones = (TransacCollection)pSerializador.Deserialize(lector); //se castea el des-serializador y se obtienen los elementos //PROVEEDOR DE SIGNO DECIMAL NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; for (int indice = 0; indice < pTransacciones.Count; indice++) { GNB_TRANSAC pDatos = new GNB_TRANSAC(); //se instancea la tabla que contiene los campos a modificar Transac pTransaccion = pTransacciones.ElementAt(indice); //ALMACENAMIENTO DE VARIABLES DESERIALIZADAS pDatos.ID_PRODUCT = indice + 1; pDatos.SKU = pTransaccion.Sku; pDatos.AMOUNT = Convert.ToDecimal(pTransaccion.Amount, proveedorDecimal); pDatos.CURRENCY = pTransaccion.Currency; //se agregan los productos al servicio pServicioProductos.AgregarTransaccion(pDatos); } }
/// <summary> /// Obtiene una lista de transacciones (SKU) dentro de una cadena XML /// </summary> /// <param name="mTransaccionesXML">Una cadena XML que almacena datos de Transacciones</param> /// <returns>los elementos SKU dentro de la tabla</returns> public string ListaTransacciones(string mTransaccionesXML) { //segmento para deserializar la cadena de caracteres pasada como parametro XmlSerializer pSerializador = new XmlSerializer(typeof(TransacCollection)); StringReader lector = new StringReader(mTransaccionesXML); TransacCollection pTransaccionesXML = (TransacCollection)pSerializador.Deserialize(lector); TransacCollection pTransaccionesExtraidas = new TransacCollection(); //elemento buffer de las transacciones solicitadas NumberFormatInfo proveedorDecimal = new NumberFormatInfo(); proveedorDecimal.NumberDecimalSeparator = "."; //se asigna el punto como separador //ciclo para recorrer los elementos dentro del XML y crear un buffer con solo un SKU por elemento existente for (int index1 = 0; index1 < pTransaccionesXML.Count; index1++) { Transac Fila = pTransaccionesXML.ElementAt(index1); for (int index2 = 0; index2 <= pTransaccionesExtraidas.Count; index2++) { //si el objeto "pTransaccionesExtraidas esta vacio entonces guarda el primer elemento if (pTransaccionesExtraidas.Count == 0) { Transac FilaAuxiliar = new Transac(); FilaAuxiliar.Id_Product = Fila.Id_Product; FilaAuxiliar.Sku = Fila.Sku; FilaAuxiliar.Amount = Fila.Amount; FilaAuxiliar.Currency = Fila.Currency; pTransaccionesExtraidas.Add(FilaAuxiliar); break; } else if (index2 == pTransaccionesExtraidas.Count) { break; //si el elemento a evaluar es el ultimo se salta (ya que el recorrido debe ser menor al .count del objeto ya que comienza en 0) } else { Transac FilaInterna = new Transac();//objeto que servira de buffer momentaneo //se pregunta con una consulta si el SKU existe dentro del buffer al menos una vez //si no existe entonces se guarda if (pTransaccionesExtraidas.Any(o => o.Sku == Fila.Sku)) { break; } else { FilaInterna.Id_Product = Fila.Id_Product; FilaInterna.Sku = Fila.Sku; FilaInterna.Amount = Fila.Amount; FilaInterna.Currency = Fila.Currency; pTransaccionesExtraidas.Add(FilaInterna); break; } } } } //segmento para serializar el resultado y enviarlo como cadena de caracteres StringWriter escritor = new StringWriter(); pSerializador.Serialize(escritor, pTransaccionesExtraidas); return(escritor.ToString()); }