Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2017
jcapilla jcapilla is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 29
Poder: 0
jcapilla Va por buen camino
Cita:
Empezado por dgcapel Ver Mensaje
Buenas tardes,
alguno de vosotros ha conseguido deserializar una respuesta del servidor en formato texto, una vez que la tienes guardada como un fichero, ¿mediante las clases del SII Service? Uso C#, pero cualquier sugerencia en delphi es bienvenida. Es un problema con los Namespaces, pero no consigo dar con la tecla.

Código Delphi [-]
                
// File : Open
                XmlSerializer serializer = new XmlSerializer(typeof(RespuestaLRFRecibidasType));
                fs = new FileStream(xmlReponseUri, FileMode.Open);
                XmlReader reader = XmlReader.Create(fs);

                // Deserialize
                RespuestaLRFRecibidasType facturaRecibida = (RespuestaLRFRecibidasType)serializer.Deserialize(reader);

                // File : Close
                fs.Close();

                // Response
                Console.WriteLine("CSV: " + facturaRecibida.CSV);
Si cambias en el xml de respuesta RespuestaLRFacturasRecibidas por RespuestaLRFRecibidasType y quitas los tags de env: debe funcionar.
Responder Con Cita
  #2  
Antiguo 04-07-2017
batuzail batuzail is offline
Miembro
 
Registrado: feb 2017
Posts: 57
Poder: 8
batuzail Va por buen camino
Cita:
Empezado por jcapilla Ver Mensaje
Si cambias en el xml de respuesta RespuestaLRFacturasRecibidas por RespuestaLRFRecibidasType y quitas los tags de env: debe funcionar.
Hola,
Para convertir en xml la respuesta yo uso
Código:
        public  bool GetXMLFromObject(object o)
        {
            StringWriter sw = new StringWriter();
            XmlTextWriter tw = null;
            try
            {
                XmlSerializer serializer = new XmlSerializer(o.GetType());
                tw = new XmlTextWriter(sw);
                serializer.Serialize(tw, o);
            }
            catch (Exception ex)
            {
                //Handle Exception Code
                return false;
            }
            finally
            {
                sw.Close();
                if (tw != null)
                {
                    tw.Close();
                }
            }

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\tmp\" + o.ToString() + ".xml"))
            {
                file.WriteLine(sw.ToString());

            }
            return true;
        }
Responder Con Cita
  #3  
Antiguo 04-07-2017
jcapilla jcapilla is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 29
Poder: 0
jcapilla Va por buen camino
Cita:
Empezado por batuzail Ver Mensaje
Hola,
Para convertir en xml la respuesta yo uso
Código:
        public  bool GetXMLFromObject(object o)
        {
            StringWriter sw = new StringWriter();
            XmlTextWriter tw = null;
            try
            {
                XmlSerializer serializer = new XmlSerializer(o.GetType());
                tw = new XmlTextWriter(sw);
                serializer.Serialize(tw, o);
            }
            catch (Exception ex)
            {
                //Handle Exception Code
                return false;
            }
            finally
            {
                sw.Close();
                if (tw != null)
                {
                    tw.Close();
                }
            }

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\tmp\" + o.ToString() + ".xml"))
            {
                file.WriteLine(sw.ToString());

            }
            return true;
        }
Creo que el problema es que el xml que devuelve AEAT (fichero) al deserializarlo con el objeto falla. Yo me encontre con el problema hace tiempo e incluso creo recordar que consulte por aqui. Si haces el replace digamos que el xml tiene el formato que espera la deserializacion.
Responder Con Cita
  #4  
Antiguo 04-07-2017
CMB CMB is offline
Miembro
 
Registrado: ene 2017
Posts: 349
Poder: 8
CMB Va por buen camino
Factura recibida simplificada

Al registrar una factura recibida simplificada hay que poner TipoFactura = F2, pero ¿se pueden omitir los datos de la contraparte (NombreRazon y NIF) del mismo modo que con facturas emitidas?

Saludos y gracias,
Responder Con Cita
  #5  
Antiguo 05-07-2017
dgcapel dgcapel is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
dgcapel Va por buen camino
Cita:
Empezado por jcapilla Ver Mensaje
Creo que el problema es que el xml que devuelve AEAT (fichero) al deserializarlo con el objeto falla. Yo me encontre con el problema hace tiempo e incluso creo recordar que consulte por aqui. Si haces el replace digamos que el xml tiene el formato que espera la deserializacion.
Voy a ponerme a trabajar en esta linea jcapilla. Muchas gracias
Responder Con Cita
  #6  
Antiguo 06-07-2017
Jack__ Jack__ is offline
Registrado
NULL
 
Registrado: jun 2017
Posts: 4
Poder: 0
Jack__ Va por buen camino
De locos

Buenas, imagino que como buenos chicos que sois tendréis el SII en perfecto estado y usándolo desde hace varios días. Yo como no soy muy buen chico aún sigo peleándome y he llegado a un punto muerto. A ver si me podéis echar un cable.
Para el envío de información estoy usando c# en VS, creando un cliente soap (siiSOAPClient) todo funciona bien, he registrado decenas de facturas de todo tipo, pero.... no se como usar la propiedad IDOtro del nodo Contraparte donde únicamente tengo ítem = NIF, NIFRepresentante y NombreRazon, evidentemente no puedo llamar a IDOtro ni a ninguna de sus propiedades. Os dejo un fragmento del programa, por si sirve de algo.

No puedo poner imágenes aún

Pongo el código:

SuministroLRFacturasEmitidas LRfactura = null;
LRfactura = new SuministroLRFacturasEmitidas();
...

LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte = new PersonaFisicaJuridicaType();
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.NombreRazon = reg.ContraparteNombre;
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.Item = reg.ContraparteNIF;
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.IDOtro **** Error

Si se os ocurre algo, soy todo orejas.

Saludos
Responder Con Cita
  #7  
Antiguo 06-07-2017
batuzail batuzail is offline
Miembro
 
Registrado: feb 2017
Posts: 57
Poder: 8
batuzail Va por buen camino
Cita:
Empezado por Jack__ Ver Mensaje
Buenas, imagino que como buenos chicos que sois tendréis el SII en perfecto estado y usándolo desde hace varios días. Yo como no soy muy buen chico aún sigo peleándome y he llegado a un punto muerto. A ver si me podéis echar un cable.
Para el envío de información estoy usando c# en VS, creando un cliente soap (siiSOAPClient) todo funciona bien, he registrado decenas de facturas de todo tipo, pero.... no se como usar la propiedad IDOtro del nodo Contraparte donde únicamente tengo ítem = NIF, NIFRepresentante y NombreRazon, evidentemente no puedo llamar a IDOtro ni a ninguna de sus propiedades. Os dejo un fragmento del programa, por si sirve de algo.

No puedo poner imágenes aún

Pongo el código:

SuministroLRFacturasEmitidas LRfactura = null;
LRfactura = new SuministroLRFacturasEmitidas();
...

LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte = new PersonaFisicaJuridicaType();
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.NombreRazon = reg.ContraparteNombre;
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.Item = reg.ContraparteNIF;
LRfactura.RegistroLRFacturasEmitidas[x].FacturaExpedida.Contraparte.IDOtro **** Error

Si se os ocurre algo, soy todo orejas.

Saludos
Hola,
Te pego parte de mi código:

Código:
IDOtroType SII_IDOtro = new IDOtroType();

SII_IDOtro.ID= "xxxx";
SII_Contrapartida.Item = SII_IDOtro;
SII_Factura.FacturaExpedida.Contraparte = SII_Contrapartida;
Espero te sirva
Responder Con Cita
  #8  
Antiguo 06-07-2017
Jack__ Jack__ is offline
Registrado
NULL
 
Registrado: jun 2017
Posts: 4
Poder: 0
Jack__ Va por buen camino
Cita:
Empezado por batuzail Ver Mensaje
Hola,
Te pego parte de mi código:

Código:
IDOtroType SII_IDOtro = new IDOtroType();

SII_IDOtro.ID= "xxxx";
SII_Contrapartida.Item = SII_IDOtro;
SII_Factura.FacturaExpedida.Contraparte = SII_Contrapartida;
Espero te sirva
Joder tio, me acabas de salvar el culo . FUNCIONA nunca se me habría ocurrido sobrecargar la propiedad Item a saber lo que se habrían fumado cuando lo parieron.

MUCHISIMAS GRACIAS.
Responder Con Cita
  #9  
Antiguo 07-07-2017
dgcapel dgcapel is offline
Registrado
NULL
 
Registrado: may 2017
Posts: 4
Poder: 0
dgcapel Va por buen camino
Cita:
Empezado por jcapilla Ver Mensaje
Si cambias en el xml de respuesta RespuestaLRFacturasRecibidas por RespuestaLRFRecibidasType y quitas los tags de env: debe funcionar.
Hola jcapilla, tal como me informaste, he tratado de limpiar el XML quitando las etiquetas ENV, sii y siiR.
Me devuelve el fichero de vuelta RespuestaLRFEmitidasType ... VACIO. Ya es algo, no me falla la deserialización.

Por ejemplo:
Código Delphi [-]
            String text = File.ReadAllText(xmlReponseUri);
            String limpio = text.Replace("siiR:", String.Empty).Replace("sii:", String.Empty);
            limpio = limpio.Replace("RespuestaLRFacturasEmitidas", "RespuestaLRFEmitidasType");
            limpio = limpio.Replace("//schemas.xmlsoap.org/soap/envelope/\">", String.Empty).Replace("", String.Empty);
            limpio = limpio.Replace("", String.Empty);
            limpio = limpio.Replace("", String.Empty).Replace("",String.Empty);
            //respuesta = respuesta.Replace("xmlns:siiR=\"//www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/RespuestaSuministro.xsd\"", String.Empty);
            //respuesta = respuesta.Replace("xmlns:sii=\"//www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd\"", String.Empty);
            Console.WriteLine(limpio);

            // File : Open
            XmlSerializer serializer = new XmlSerializer(typeof(RespuestaLRFEmitidasType));

            RespuestaLRFEmitidasType facturaEmitida;
            using (XmlReader reader = XmlReader.Create(new StringReader(limpio)))
            {
                // Deserialize
                facturaEmitida = (RespuestaLRFEmitidasType)serializer.Deserialize(reader);
            }

Para más información, generé los ficheros WDSL mediante el wsdl.exe para todas siiServices. Luego he visto que los XSD me subreescriben las estructuras de datos, por lo que no los he añadido.
He visto que también mucha gente toca el App.config, para temas de los END POINT, pero yo no le he visto el fuste.
¿Se me escapa algo?

Muchas gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4170 Hace 1 Semana 17:29:05
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 14:26:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi