none
Utilizar un progress bar cuando ejecuto un proceso RRS feed

  • Pregunta

  • Hola

    Trabajo con Visual Studio 2015, Windows Forms

    En un DataGridView cargo unos archivos xml y desde la misma grilla tengo un boton en el cual manda a procesar cada xml, los xml son enviados atravéz de un Web Service el cual me manda una respuesta.

    Ese proceso toma un tiempo en el cual la app se que queda como si no estuviera haciendo nada hasta que llegue la respuesta, el código que ocupo es el siguiente.

    private void dgvXml_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (dgvXml.Columns[e.ColumnIndex].Name == "colBoton")
                {
                    if (dgvXml.Rows.Count > 0 && dgvXml.CurrentRow != null)
                        _rutaXml = Convert.ToString(dgvXml.CurrentRow.Cells[0].Value);
                    string msg = string.Format("Se va a procesar el siguiente Comprobante Electrónico: {0} {1} {0} Nombre: {2}",
                                           Environment.NewLine,
                                           new string('-', 50),
                                           dgvXml.CurrentRow.Cells[2].Value);
    
                    if (MessageBox.Show(msg, @"Aviso", MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        var verificarConexion = Utilidades.CheckForInternetConnection();
                        if (!verificarConexion)
                        {
                            MessageBox.Show(@"No tiene conexión a Internet", @"Aviso", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                            return;
                        }
    
                        //PROCESAR
                        if (_exist && _validarFechaVencimiento)
                        {
                            if (AmbienteType.Prueba == _ambiente)
                            {
                                try
                                {
                                    if (string.IsNullOrEmpty(_rutaXml))
                                    {
                                        MessageBox.Show(@"Debe escoger una Factura de xml", @"Mensaje", MessageBoxButtons.OK,
                                            MessageBoxIcon.Information);
                                        return;
                                    }
    
                                    if (!string.IsNullOrEmpty(_claveFirma)
                                        && !string.IsNullOrEmpty(_rutaXml))
                                    {
                                        var token = _hub.Subscribe<SelectedMensajeWsPrueba>(OnWsPruebaSelected);
                                        _sdWebServicePrueba.ValidarComprobanteAsync(_byteFirma, _claveFirma, _rutaXml);
                                        //_hub.Unsubscribe(token);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show($"{ex.Message}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                            if (AmbienteType.Produccion == _ambiente)
                            {
                                try
                                {
                                    if (string.IsNullOrEmpty(_rutaXml))
                                    {
                                        MessageBox.Show(@"Debe escoger una Factura de xml", @"Mensaje", MessageBoxButtons.OK,
                                            MessageBoxIcon.Information);
                                        return;
                                    }
    
                                    if (!string.IsNullOrEmpty(_claveFirma)
                                        && !string.IsNullOrEmpty(_rutaXml))
                                    {
                                        var token = _hub.Subscribe<SelectedMensajeWsProduccion>(OnWsProduccionSelected);
                                        _sdWebServiceProduccion.ValidarComprobanteAsync(_byteFirma, _claveFirma, _rutaXml);
                                        //_hub.Unsubscribe(token);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show($"{ex.Message}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                        }
                    }
                }
            }
    
            private void OnWsProduccionSelected(SelectedMensajeWsProduccion obj)
            {
                string path = string.Empty;
                string nombreDocumento = string.Empty;
                if (!string.IsNullOrEmpty(obj.EstadoRecepcionProduccion))
                {
                    if (obj.EstadoRecepcionProduccion == "DEVUELTA")
                    {
                        MessageBox.Show($"Identificador: {obj.Identificador} Mensaje: {obj.Mensaje1} Tipo: {obj.Tipo}",
                            @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (!string.IsNullOrEmpty(obj.EstadoAutorizacionProduccion))
                {
                    if (obj.EstadoAutorizacionProduccion == "AUTORIZADO")
                    {
                        XElement doc = XElement.Parse(obj.Comprobante);
                        var resultCodDoc = doc.Elements("infoTributaria")
                            .Elements("codDoc").ToArray();
    
    
                        if (string.IsNullOrEmpty(resultCodDoc[0].Value))
                            return;
                        var entity = _sdTipoComprobante.BuscarXCodigo(resultCodDoc[0].Value);
                        if (entity != null)
                        {
                            nombreDocumento = entity.Nombre;
                            var resultEstab = doc.Elements("infoTributaria")
                                       .Elements("estab").ToArray();
                            var resultPtoEmi = doc.Elements("infoTributaria")
                                .Elements("ptoEmi").ToArray();
                            var resultSecuencial = doc.Elements("infoTributaria")
                                .Elements("secuencial").ToArray();
                            string numero = resultEstab[0].Value + "-" + resultPtoEmi[0].Value + "-" + resultSecuencial[0].Value;
                            switch (entity.Codigo)
                            {
                                case "01"://Factura
                                    var resultComprador = doc.Elements("infoFactura")
                                        .Elements("razonSocialComprador").ToArray();
                                    var resultImporteTotal = doc.Elements("infoFactura")
                                        .Elements("importeTotal").ToArray();
                                    var nombreFactura = entity.Nombre + "_" + numero + "_" + resultComprador[0].Value + "_" + resultImporteTotal[0].Value;
                                    var nombreFacturaXml = string.Concat(nombreFactura, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreFacturaXml);
                                    break;
                                case "04"://Nota de Credito
                                    var resultCompradorNotaCredito = doc.Elements("infoNotaCredito")
                                        .Elements("razonSocialComprador").ToArray();
                                    var nombreNotaCredito = entity.Nombre + "_" + numero + "_" +
                                                            resultCompradorNotaCredito[0].Value;
                                    var nombreNotaCreditoXml = string.Concat(nombreNotaCredito, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreNotaCreditoXml);
                                    break;
                                case "05"://Nota sw Debito
                                    var resultCompradorNotaDebito = doc.Elements("infoNotaDebito")
                                        .Elements("razonSocialComprador").ToArray();
                                    var nombreNotaDebito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaDebito[0].Value;
                                    var nombreNotaDebitoXml = string.Concat(nombreNotaDebito, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreNotaDebitoXml);
                                    break;
                                case "06"://Guía de Remisión
                                    var resultCompradorGuiaRemision = doc.Elements("destinatarios")
                                        .Elements("destinatario")
                                        .Elements("identificacionDestinatario").ToArray();
                                    var nombreGuiaRemision = entity.Nombre + "_" + numero + "_" +
                                                            resultCompradorGuiaRemision[0].Value;
                                    var nombreGuiaRemisionXml = string.Concat(nombreGuiaRemision, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreGuiaRemisionXml);
    
                                    break;
                                case "07"://Retención
                                    var resultSujetoRetenido = doc.Elements("infoCompRetencion")
                                        .Elements("razonSocialSujetoRetenido").ToArray();
                                    var nombreRetencion = entity.Nombre + "_" + numero + "_" + resultSujetoRetenido[0].Value;
                                    var nombreRetencionXml = string.Concat(nombreRetencion, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreRetencionXml);
                                    break;
                            }
    
                            //Escribe en disco
                            CrearXml(_rutaXmlAutorizado, obj.EstadoAutorizacionProduccion, obj.NumeroAutorizacion,
                                obj.FechaAutorizacion, obj.Ambiente, obj.Comprobante, obj.Mensajes, path);
    
                            MessageBox.Show(
                                $"Documento: {nombreDocumento} Estado: {obj.EstadoAutorizacionProduccion} Fecha: {obj.FechaAutorizacion} Ambiente: {obj.Ambiente} Comprobante: {obj.Comprobante}",
                                @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            //Eliminar el Xml que se aprobo
                            //Obtenre el nombre del Xml _rutaXml
                            var fileNameAprobado = Path.GetFileName(_rutaXml);
                            //Eliminar en lista de archivo Xml
                            if (_lista.Count > 0)
                            {
                                _lista.RemoveAll(x => x.Nombre == fileNameAprobado);
                                File.Delete(_rutaXml);
                                dgvXml.DataSource = null;
                                dgvXml.AutoGenerateColumns = false;
                                dgvXml.DataSource = _lista;
                                Utilidades.AutoGenerateRowNumber(dgvXml);
                                Utilidades.FormatoDgv(dgvXml);
                                ChangeWidthColumnXml();
                            }
                        }
                        else
                        {
                            MessageBox.Show(@"No se encontró Tipo de Comprobante.", @"Aviso", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                        }
                    }
                }
                _hub.ClearSubscriptions();
            }
    
            private void OnWsPruebaSelected(SelectedMensajeWsPrueba obj)
            {
                string path = string.Empty;
                string nombreDocumento = string.Empty;
                if (!string.IsNullOrEmpty(obj.EstadoRecepcionPrueba))
                {
                    if (obj.EstadoRecepcionPrueba == "DEVUELTA")
                    {
                        MessageBox.Show($"Identificador: {obj.Identificador} Mensaje: {obj.Mensaje1} Tipo: {obj.Tipo}",
                            @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (!string.IsNullOrEmpty(obj.EstadoAutorizacionPrueba))
                {
                    if (obj.EstadoAutorizacionPrueba == "AUTORIZADO")
                    {   
                        XElement doc = XElement.Parse(obj.Comprobante);
                        var resultCodDoc = doc.Elements("infoTributaria")
                            .Elements("codDoc").ToArray();
    
                        if (string.IsNullOrEmpty(resultCodDoc[0].Value))
                            return;
                        var entity = _sdTipoComprobante.BuscarXCodigo(resultCodDoc[0].Value);
                        if (entity != null)
                        {
                            nombreDocumento = entity.Nombre;
                            var resultEstab = doc.Elements("infoTributaria")
                                       .Elements("estab").ToArray();
                            var resultPtoEmi = doc.Elements("infoTributaria")
                                .Elements("ptoEmi").ToArray();
                            var resultSecuencial = doc.Elements("infoTributaria")
                                .Elements("secuencial").ToArray();
                            string numero = resultEstab[0].Value + "-" + resultPtoEmi[0].Value + "-" + resultSecuencial[0].Value;
                            switch (entity.Codigo)
                            {
                                case "01"://Factura
                                    var resultComprador = doc.Elements("infoFactura")
                                        .Elements("razonSocialComprador").ToArray();
                                    var resultImporteTotal = doc.Elements("infoFactura")
                                        .Elements("importeTotal").ToArray();
                                    var nombreFactura = entity.Nombre + "_" + numero + "_" + resultComprador[0].Value + "_" + resultImporteTotal[0].Value;
                                    var nombreFacturaXml = string.Concat(nombreFactura, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreFacturaXml);
                                    break;
                                case "04"://Nota de Credito
                                    var resultCompradorNotaCredito = doc.Elements("infoNotaCredito")
                                        .Elements("razonSocialComprador").ToArray();
                                    var nombreNotaCredito = entity.Nombre + "_" + numero + "_" +
                                                            resultCompradorNotaCredito[0].Value;
                                    var nombreNotaCreditoXml = string.Concat(nombreNotaCredito, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreNotaCreditoXml);
                                    break;
                                case "05"://Nota sw Debito
                                    var resultCompradorNotaDebito = doc.Elements("infoNotaDebito")
                                        .Elements("razonSocialComprador").ToArray();
                                    var nombreNotaDebito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaDebito[0].Value;
                                    var nombreNotaDebitoXml = string.Concat(nombreNotaDebito, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreNotaDebitoXml);
                                    break;
                                case "06"://Guía de Remisión
                                    var resultCompradorGuiaRemision = doc.Elements("destinatarios")
                                        .Elements("destinatario")
                                        .Elements("identificacionDestinatario").ToArray();
                                    var nombreGuiaRemision = entity.Nombre + "_" + numero + "_" +
                                                            resultCompradorGuiaRemision[0].Value;
                                    var nombreGuiaRemisionXml = string.Concat(nombreGuiaRemision, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreGuiaRemisionXml);
    
                                    break;
                                case "07"://Retención
                                    var resultSujetoRetenido = doc.Elements("infoCompRetencion")
                                        .Elements("razonSocialSujetoRetenido").ToArray();
                                    var nombreRetencion = entity.Nombre + "_" + numero + "_" + resultSujetoRetenido[0].Value;
                                    var nombreRetencionXml = string.Concat(nombreRetencion, ".xml");
                                    path = Path.Combine(_rutaXmlAutorizado, nombreRetencionXml);
                                    break;
                            }
                            //Escribe en disco
                            CrearXml(_rutaXmlAutorizado, obj.EstadoAutorizacionPrueba, obj.NumeroAutorizacion,
                                    obj.FechaAutorizacion, obj.Ambiente, obj.Comprobante, obj.Mensajes, path);
                            MessageBox.Show(
                                    $"Documento: {nombreDocumento} Estado: {obj.EstadoAutorizacionPrueba} Fecha: {obj.FechaAutorizacion} Ambiente: {obj.Ambiente}",
                                    @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            //Eliminar el Xml que se aprobo
                            //Obtenre el nombre del Xml _rutaXml
                            var fileNameAprobado = Path.GetFileName(_rutaXml);
                            //Eliminar en lista de archivo Xml
                            if (_lista.Count > 0)
                            {
                                _lista.RemoveAll(x => x.Nombre == fileNameAprobado);
                                File.Delete(_rutaXml);
                                dgvXml.DataSource = null;
                                dgvXml.AutoGenerateColumns = false;
                                dgvXml.DataSource = _lista;
                                Utilidades.AutoGenerateRowNumber(dgvXml);
                                Utilidades.FormatoDgv(dgvXml);
                                ChangeWidthColumnXml();
                            }
                        }
                        else
                        {
                            MessageBox.Show(@"No se encontró Tipo de Comprobante.", @"Aviso", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                        }
                    }
                }
                _hub.ClearSubscriptions();
            }

    ¿Como puedo utilizar un progress bar mientras se envía el xml y obtengo la respuesta del Web Service?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 1 de febrero de 2019 16:21

Respuestas