protected void btn_Insertar_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("~/Tramas");
            string file = rbOk.Checked ? "ok.txt" : "error.txt";

            path = path + @"\" + file;

            //Leyendo la trama XML
            XmlDocument _Doc = new XmlDocument();

            _Doc.Load(path);
            var ser = new XmlSerializer(typeof(Online997RegafiUpdateResponse));
            var _Online997RegafiUpdateResponse = (Online997RegafiUpdateResponse)ser.Deserialize(new StringReader(_Doc.OuterXml));

            //Convirtiendo el campo "txRespuesta" a un objeto
            RegafiUpdate997ServiceImpl impl = new RegafiUpdate997ServiceImpl();
            var objetorespuesta             = impl.x12NToBean(_Online997RegafiUpdateResponse.txRespuesta);

            // ---> Obteniendo valores de la respuesta
            var excProceso    = objetorespuesta.getExcProceso();
            var feTransaccion = objetorespuesta.getFeTransaccion();
            var flag          = objetorespuesta.isFlag();
            var hoTransaccion = objetorespuesta.getHoTransaccion();
            var IdCorrelativo = objetorespuesta.getIdCorrelativo();
            var idReceptor    = objetorespuesta.getIdReceptor();
            var idRemitente   = objetorespuesta.getIdRemitente();
            var idTransaccion = objetorespuesta.getIdTransaccion();

            //Obteniendo lista de errores
            java.util.List ListaErrores = new java.util.ArrayList();
            ListaErrores = objetorespuesta.getIn271RegafiUpdateExcepcion();

            var noTransaccion = objetorespuesta.getNoTransaccion();
            var nuControl     = objetorespuesta.getNuControl();
            var nuControlST   = objetorespuesta.getNuControlST();

            // ---> Cargando el objeto a insertar
            TAB_SUSALUD objCabecera = new TAB_SUSALUD();

            objCabecera.SCERTYPE        = "1";
            objCabecera.NBRANCH         = 1200;
            objCabecera.NPRODUCT        = 2200;
            objCabecera.NPOLICY         = 3020;
            objCabecera.NCERTIF         = 2562;
            objCabecera.DEFFECDATE      = DateTime.Now;
            objCabecera.NCORRELATIVO    = Convert.ToDecimal(IdCorrelativo);
            objCabecera.STIPO_OPERACION = "10"; //10: Actualiza, Afiliado y Afiliación
            //Verificando si hay errores a nivel del servicio y a nivel de base de datos
            if ((excProceso == EstadoServicio.Todo_Correcto) && !ExisteErrorBD(ListaErrores))
            {
                //Es correcto
                objCabecera.SESTADO_SUSALUD = EstadoTransaccion.Satisfactorio;
            }
            else
            {
                //Hay errores
                objCabecera.SESTADO_SUSALUD = EstadoTransaccion.Error;
            }

            //Cargando el detalle del error
            string coCampoErr             = "";
            string excBD                  = "";
            string inCoErrorEncontrado    = "";
            string pkAfiliado             = "";
            string pkAfiliadopkAfiliacion = "";

            List <TAB_SUSALUD_OBSERV> _Lista_Observaciones = new List <TAB_SUSALUD_OBSERV>();

            TAB_SUSALUD_OBSERV objDetalle = new TAB_SUSALUD_OBSERV();

            //Cuando no hay errores en el servicio y en la base de datos a la vez
            if ((excProceso == EstadoServicio.Todo_Correcto) && !ExisteErrorBD(ListaErrores))
            {
                //Solo debe de haber un registro con el campo excBD = "0000"
                foreach (In997RegafiUpdateExcepcion item in ListaErrores.toArray())
                {
                    coCampoErr             = item.getCoCampoErr();
                    excBD                  = item.getExcBD();
                    inCoErrorEncontrado    = item.getInCoErrorEncontrado();
                    pkAfiliado             = item.getPkAfiliado();
                    pkAfiliadopkAfiliacion = item.getPkAfiliadopkAfiliacion();
                }
                objDetalle.NCODIGO_OBS  = 0; // No se llena porque es un correlativo, y se ingresa con un secuencial;
                objDetalle.NCORRELATIVO = Convert.ToDecimal(IdCorrelativo);
                objDetalle.PKAFILIADO   = pkAfiliado;
                objDetalle.PKAFILIACION = pkAfiliadopkAfiliacion;
                objDetalle.NTIPO_ERROR  = TipoError.Sin_Error;
                objDetalle.SID_ERROR    = "0";
                objDetalle.SDESCRIPCION_ERROR_SERVICIO = "";
                objDetalle.SDESCRIPCION_ERROR_BD       = "";
                objDetalle.SID_CAMPO            = "";
                objDetalle.SNOMBRE_CAMPO        = "";
                objDetalle.SID_REGLA_AFILIACION = "";

                _Lista_Observaciones.Add(objDetalle);
                objCabecera.DETALLE = _Lista_Observaciones;
            }

            //Cuando hay error en el servicio
            coCampoErr             = "";
            excBD                  = "";
            inCoErrorEncontrado    = "";
            pkAfiliado             = "";
            pkAfiliadopkAfiliacion = "";

            if (excProceso != EstadoServicio.Todo_Correcto)
            {
                foreach (In997RegafiUpdateExcepcion item in ListaErrores.toArray())
                {
                    coCampoErr             = item.getCoCampoErr();
                    excBD                  = item.getExcBD();
                    inCoErrorEncontrado    = item.getInCoErrorEncontrado();
                    pkAfiliado             = item.getPkAfiliado();
                    pkAfiliadopkAfiliacion = item.getPkAfiliadopkAfiliacion();
                }
                objDetalle.NCODIGO_OBS  = 0; // No se llena porque es un correlativo, y se ingresa con un secuencial;
                objDetalle.NCORRELATIVO = Convert.ToDecimal(IdCorrelativo);
                objDetalle.PKAFILIADO   = pkAfiliado;
                objDetalle.PKAFILIACION = pkAfiliadopkAfiliacion;
                objDetalle.NTIPO_ERROR  = TipoError.Error_Servicio;
                objDetalle.SID_ERROR    = excProceso;
                objDetalle.SDESCRIPCION_ERROR_SERVICIO = ""; //Se llena por base de datos
                objDetalle.SDESCRIPCION_ERROR_BD       = "";
                objDetalle.SID_CAMPO            = "";
                objDetalle.SNOMBRE_CAMPO        = "";
                objDetalle.SID_REGLA_AFILIACION = "";

                _Lista_Observaciones.Add(objDetalle);
                objCabecera.DETALLE = _Lista_Observaciones;
            }

            //Cuando hay errores en la base de datos
            coCampoErr             = "";
            excBD                  = "";
            inCoErrorEncontrado    = "";
            pkAfiliado             = "";
            pkAfiliadopkAfiliacion = "";

            if ((excProceso == EstadoServicio.Todo_Correcto) && ExisteErrorBD(ListaErrores))
            {
                foreach (In997RegafiUpdateExcepcion item in ListaErrores.toArray())
                {
                    coCampoErr             = item.getCoCampoErr();
                    excBD                  = item.getExcBD();
                    inCoErrorEncontrado    = item.getInCoErrorEncontrado();
                    pkAfiliado             = item.getPkAfiliado();
                    pkAfiliadopkAfiliacion = item.getPkAfiliadopkAfiliacion();

                    objDetalle.NCODIGO_OBS  = 0; // No se llena porque es un correlativo, y se ingresa con un secuencial;
                    objDetalle.NCORRELATIVO = Convert.ToDecimal(IdCorrelativo);
                    objDetalle.PKAFILIADO   = pkAfiliado;
                    objDetalle.PKAFILIACION = pkAfiliadopkAfiliacion;
                    objDetalle.NTIPO_ERROR  = TipoError.Error_BD;
                    objDetalle.SID_ERROR    = excBD;
                    objDetalle.SDESCRIPCION_ERROR_SERVICIO = "";
                    objDetalle.SDESCRIPCION_ERROR_BD       = ""; //Se llena por base de datos
                    objDetalle.SID_CAMPO            = coCampoErr;
                    objDetalle.SNOMBRE_CAMPO        = "";        //Se llena por base de datos;
                    objDetalle.SID_REGLA_AFILIACION = inCoErrorEncontrado;

                    _Lista_Observaciones.Add(objDetalle);
                }

                objCabecera.DETALLE = _Lista_Observaciones;
            }

            //Insertando
            int result = InsertarResultado(objCabecera);
        }
        public static int InsertarResultado(TAB_SUSALUD objCabecera)
        {
            int    result = 1;
            string _Cnx   = ConfigurationManager.ConnectionStrings["CnxOra"].ConnectionString;
            List <OracleParameter> Parms = new List <OracleParameter>();

            try
            {
                OracleConnection con = new OracleConnection(_Cnx);
                con.Open();

                OracleTransaction myTrans;
                myTrans = con.BeginTransaction(IsolationLevel.ReadCommitted);

                try
                {
                    using (OracleCommand cmd = new OracleCommand("PKG_RESULTADO.PRO_INSERTAR_CABECERA", con))
                    {
                        Parms.Add(new OracleParameter("P_SCERTYPE", OracleDbType.Char, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.SCERTYPE;

                        Parms.Add(new OracleParameter("P_NBRANCH", OracleDbType.Decimal, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.NBRANCH;

                        Parms.Add(new OracleParameter("P_NPRODUCT", OracleDbType.Decimal, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.NBRANCH;

                        Parms.Add(new OracleParameter("P_NPOLICY", OracleDbType.Decimal, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.NPOLICY;

                        Parms.Add(new OracleParameter("P_NCERTIF", OracleDbType.Decimal, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.NCERTIF;

                        Parms.Add(new OracleParameter("P_DEFFECDATE", OracleDbType.Date, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.DEFFECDATE;

                        Parms.Add(new OracleParameter("P_NCORRELATIVO", OracleDbType.Decimal, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.NCORRELATIVO;

                        Parms.Add(new OracleParameter("P_STIPO_OPERACION", OracleDbType.Char, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.STIPO_OPERACION;

                        Parms.Add(new OracleParameter("P_SESTADO_SUSALUD", OracleDbType.Char, ParameterDirection.Input));
                        Parms.Last().Value = objCabecera.SESTADO_SUSALUD;

                        cmd.Transaction = myTrans;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(Parms.ToArray());
                        cmd.ExecuteNonQuery();
                    }

                    foreach (var det in objCabecera.DETALLE)
                    {
                        Parms.Clear();

                        using (OracleCommand cmd = new OracleCommand("PKG_RESULTADO.PRO_INSERTAR_DETALLE", con))
                        {
                            Parms.Add(new OracleParameter("P_NCORRELATIVO", OracleDbType.Decimal, ParameterDirection.Input));
                            Parms.Last().Value = det.NCORRELATIVO;

                            Parms.Add(new OracleParameter("P_PKAFILIADO", OracleDbType.Varchar2, ParameterDirection.Input));
                            Parms.Last().Value = det.PKAFILIADO;

                            Parms.Add(new OracleParameter("P_PKAFILIACION", OracleDbType.Varchar2, ParameterDirection.Input));
                            Parms.Last().Value = det.PKAFILIACION;

                            Parms.Add(new OracleParameter("P_NTIPO_ERROR", OracleDbType.Decimal, ParameterDirection.Input));
                            Parms.Last().Value = det.NTIPO_ERROR;

                            Parms.Add(new OracleParameter("P_SID_ERROR", OracleDbType.Char, ParameterDirection.Input));
                            Parms.Last().Value = det.SID_ERROR;

                            Parms.Add(new OracleParameter("P_SDESCRIPCION_ERROR_SERVICIO", OracleDbType.Varchar2, ParameterDirection.Input));
                            Parms.Last().Value = det.SDESCRIPCION_ERROR_SERVICIO;

                            Parms.Add(new OracleParameter("P_SDESCRIPCION_ERROR_BD", OracleDbType.Varchar2, ParameterDirection.Input));
                            Parms.Last().Value = det.SDESCRIPCION_ERROR_BD;

                            Parms.Add(new OracleParameter("P_SID_CAMPO", OracleDbType.Char, ParameterDirection.Input));
                            Parms.Last().Value = det.SID_CAMPO;

                            Parms.Add(new OracleParameter("P_SNOMBRE_CAMPO", OracleDbType.Varchar2, ParameterDirection.Input));
                            Parms.Last().Value = det.SNOMBRE_CAMPO;

                            Parms.Add(new OracleParameter("P_SID_REGLA_AFILIACION", OracleDbType.Decimal, ParameterDirection.Input));
                            Parms.Last().Value = det.SID_REGLA_AFILIACION;

                            cmd.Transaction = myTrans;
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.AddRange(Parms.ToArray());
                            cmd.ExecuteNonQuery();
                        }
                    }

                    //Commit
                    myTrans.Commit();
                }
                catch (Exception ex)
                {
                    myTrans.Rollback();
                    result = 0;
                }
                finally
                {
                    con.Close();
                    con.Dispose();
                    myTrans.Dispose();
                }
            }
            catch (Exception ex)
            {
                result = 0;
            }

            return(result);
        }