public override Mensaje Convertir(byte[] trama, Mensajeria mensajeria) { MensajeISO8583 mensajeTransformado = (MensajeISO8583) Mensaje.CrearMensaje(EnumTipoMensaje.Bitmap); List<CAMPO_PLANTILLA> listaCamposCabecera = mensajeria.ObtenerCamposCabecera(this.grupoMensaje.GMJ_CODIGO); List<Valor> listaValoresSelectores = new List<Valor>(); List<string> listaTransaccionales = new List<string>(); StringBuilder transaccionales = new StringBuilder(""); int posicionActual = 0; foreach (CAMPO_PLANTILLA campoCabecera in listaCamposCabecera) { int longitud = campoCabecera.CMP_LONGITUD; EnumTipoDatoCampo enumTipoDato = (EnumTipoDatoCampo) Enum.ToObject(typeof(EnumTipoDatoCampo), campoCabecera.TIPO_DATO.TDT_CODIGO); Valor valorTrama = Codificador.Valor(enumTipoDato, trama, posicionActual, longitud); if (campoCabecera.CMP_SELECTOR) { listaValoresSelectores.Add(valorTrama); } if (campoCabecera.CMP_TRANSACCIONAL) { AgregarTransaccional(valorTrama, listaTransaccionales, transaccionales); } mensajeTransformado.AgregarCabecera(campoCabecera, null, valorTrama); posicionActual += longitud; } MENSAJE mensajeIdentificado = mensajeria.IdentificarMensajePorValorSelector(grupoMensaje.GMJ_CODIGO, listaValoresSelectores); if (mensajeIdentificado == null) { throw new SwitchException(EnumSwitchException.TRAMA_NO_IDENTIFICADA); } List<CAMPO> listaCamposCuerpo = (from c in mensajeIdentificado.CAMPO where c.CAM_CABECERA == false orderby c.CAM_POSICION_RELATIVA ascending select c).ToList(); bool[] boolBitmap = ConvertidorUtil.toBoolArray(mensajeTransformado.Bitmap); int contListaCampos = 0; int contTrama = posicionActual; for (int i = 0; i < boolBitmap.Length; i++) { if (boolBitmap[i]) { CAMPO campo = listaCamposCuerpo.Where(c=>c.CAM_POSICION_RELATIVA==i+1).FirstOrDefault(); EnumTipoDatoCampo enumTipoDato = (EnumTipoDatoCampo) Enum.ToObject(typeof(EnumTipoDatoCampo), campo.TIPO_DATO.TDT_CODIGO); Valor auxCabecera; Valor auxValor; if (!campo.CAM_VARIABLE.Value) { auxCabecera = null; auxValor = Codificador.Valor(enumTipoDato, trama, contTrama, campo.CAM_LONGITUD); contTrama += campo.CAM_LONGITUD; } else { auxCabecera = Codificador.Valor(enumTipoDato, trama, contTrama, campo.CAM_LONGITUD_CABECERA.Value); contTrama += campo.CAM_LONGITUD_CABECERA.Value; int longitud = int.Parse(((BCD) auxCabecera).ToInt()); auxValor = Codificador.Valor(enumTipoDato, trama, contTrama, longitud); contTrama += longitud; } if (campo.CAM_TRANSACCIONAL) { AgregarTransaccional(auxValor, listaTransaccionales, transaccionales); } mensajeTransformado.AgregarCuerpo(campo, auxCabecera, auxValor); contListaCampos++; } } //TODO: Validar que esten todos los campos requeridos //if (contListaCampos != listaCamposCuerpo.Count) //{ // for (int i = contListaCampos; i < listaCamposCuerpo.Count; i++) // { // if (listaCamposCuerpo[i].CAM_REQUERIDO) // { // throw new SwitchException(EnumSwitchException.MENSAJE_SIN_CAMPOS_OBLIGATORIOS); // } // } //} if (contTrama != trama.Length) { throw new SwitchException(EnumSwitchException.TRAMA_NO_IDENTIFICADA); } this.ListaPasos = DataAccess.Operacion.PasoDinamicaDA.ObtenerPasoDinamica (mensajeIdentificado.MEN_CODIGO, transaccionales.ToString()); if (ListaPasos == null || ListaPasos.Count == 0) { throw new SwitchException("No se han encontrado pasos de dinamica para el mensaje transaccional"); } return mensajeTransformado; }
public override Mensaje Convertir(byte[] trama, Mensajeria mensajeria) { Mensaje mensajeTransformado = Mensaje.CrearMensaje(EnumTipoMensaje.XML); List<CAMPO_PLANTILLA> listaCamposCabecera = mensajeria.ObtenerCamposCabecera(this.grupoMensaje.GMJ_CODIGO); List<Valor> listaSelectores = new List<Valor>(); List<string> listaTransaccionales = new List<string>(); StringBuilder transaccionales = new StringBuilder(""); using (XmlReader reader = new XmlTextReader(new StringReader(Codificador.Codificacion(trama)))) { reader.Read(); foreach (CAMPO_PLANTILLA campoCabecera in listaCamposCabecera) { reader.Read(); if (campoCabecera.CMP_NOMBRE.ToUpper() != reader.Name.ToUpper()) { throw new SwitchException(EnumSwitchException.MENSAJE_SIN_CAMPOS_OBLIGATORIOS); } reader.Read(); Valor valor = Codificador.Valor(EnumTipoDatoCampo.Alfabetico, reader.Value); if (campoCabecera.CMP_SELECTOR) { listaSelectores.Add(valor); } if (campoCabecera.CMP_TRANSACCIONAL) { listaTransaccionales.Add(reader.Value); transaccionales.Append(valor); transaccionales.Append(","); } mensajeTransformado.AgregarCabecera(campoCabecera, null, valor); reader.Read(); } MENSAJE mensajeIdentificado = mensajeria.IdentificarMensajePorValorSelector(this.grupoMensaje.GMJ_CODIGO, listaSelectores); if (mensajeIdentificado == null) { throw new SwitchException(EnumSwitchException.TRAMA_NO_IDENTIFICADA); } List<CAMPO> listaCamposCuerpo = (from c in mensajeIdentificado.CAMPO where c.CAM_CABECERA == false orderby c.CAM_POSICION_RELATIVA ascending select c).ToList(); foreach (CAMPO campoMensaje in listaCamposCuerpo) { reader.Read(); if (campoMensaje.CAM_NOMBRE.ToUpper() != reader.Name.ToUpper()) { throw new SwitchException(EnumSwitchException.MENSAJE_SIN_CAMPOS_OBLIGATORIOS); } reader.Read(); Valor valor = Codificador.Valor(EnumTipoDatoCampo.Alfabetico, reader.Value); if (campoMensaje.CAM_TRANSACCIONAL) { listaTransaccionales.Add(reader.Value); transaccionales.Append(valor); transaccionales.Append(","); } mensajeTransformado.AgregarCuerpo(campoMensaje, null, valor); reader.Read(); } this.ListaPasos = DataAccess.Operacion.PasoDinamicaDA.ObtenerPasoDinamica (mensajeIdentificado.MEN_CODIGO, transaccionales.ToString()); } return mensajeTransformado; }