Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Al consumir WebService me da Accessviolation al acceder al resultado (https://www.clubdelphi.com/foros/showthread.php?t=93907)

mtxtania 16-05-2019 11:50:21

Cita:

Empezado por mtxtania (Mensaje 532043)
Buenos días, he estado hablando con la AEAT pero de momento no saben dar solución a que las respuestas lleguen a nil… He probado a modificar lo que comentáis pero eso es para .NET, al menos es lo que me ha corroborado el de la AEAT.

Alguien ha hablado de leer el XML aunque estamos de acuerdo que no es nada recomendable. Crearíais una clase con la estructura del XML o os lo leerías directamente? Alguien ha avanzado un poco mas?

A parte estoy mirando algunos de los errores que me da. Uno de ellos es Formato de hora no válido, cuando le paso un datetime. En el XML de petición se genera 10:50:00.000Z El problema viene que muestra .000Z Podría probar de modificar el WDSL pero si tenemos que tocar mil cosas vaya gracia

He probado así:

Código Delphi [-]
 HoraPreparacion :=  Ie215V11.HoraTipo.Create;
    HoraPreparacion.AsTime   :=now;

Y así:
Código Delphi [-]
HoraPreparacion :=  Ie215V11.HoraTipo.Create;
     with HoraPreparacion do
     begin
       Hour:=10;
       Minute:=50;
       Millisecond:=00;
     end;

Sabéis como puedo pasarlo correctamente. No quiero tener que quitarlo directamente del XML.


Me contesto a mi misma sobre lo de la hora, me lo acepta utilizando :

Código Delphi [-]
HoraPreparacion.XSToNative('09:00:00');

APO 16-05-2019 11:55:27

Hola mtxtania,

Pues vaya con los de la AEAT! Bueno, de momento, puedes gestionarlo como lo estoy haciendo yo, que es trabajar sobre el XML de respuesta. Para ello, lo que yo he hecho es crear una variable de tipo TXMLDocument e ir recorriendo los nodos. Te pongo una muestra de ejemplo:

Código Delphi [-]
procedure TfrmMantenimientoTabla.ProcesarXML;
var
   XMLDocument: TXMLDocument;
   XMLDocumentBody, XMLDocumentRechazado, XMLDocumentAceptado: IXMLNode;
   i: integer;
begin
   XMLDocument:=TXMLDocument.Create(Self);
   XMLDocument.Active:=False;
   try
      XMLDocument.LoadFromXML(mXML.Text); //Memo donde tengo cargado el XML
      XMLDocument.Active:=True;
      for i:=0 to XMLDocument.DocumentElement.ChildNodes.Count-1 do
      begin
         if UpperCase(trim(XMLDocument.DocumentElement.ChildNodes[i].LocalName))='BODY' then
         begin
            XMLDocumentBody:=XMLDocument.DocumentElement.ChildNodes[i];
            for j:=0 to XMLDocumentBody.ChildNodes.Count-1 do
            begin
               if UpperCase(trim(XMLDocumentBody.ChildNodes[j].LocalName))='IE204' then
               begin
                  //MENSAJE RECHAZADO (Si el mensaje de respuesta tiene el nodo Ie204 es que ha sido rechazado)
                  XMLDocumentRechazado:=XMLDocumentBody.ChildNodes[j];
                  //...

               end
               else
               begin
                  //MENSAJE ACEPTADO
                  if UpperCase(trim(XMLDocumentBody.ChildNodes[j].LocalName))='IE201' then
                  begin
                     XMLDocumentAceptado:=XMLDocumentBody.ChildNodes[j];
                     //…
                  end;
               end;
            end;
         end;
      end;
   except

   end;
end;

Y respecto a la hora correcto, es como lo estoy haciendo yo también:

Código Delphi [-]
XML.Cabecera.HoraPreparacion.XSToNative(FormatDateTime('hh:mm:ss',now));

Saludos!

alejango 16-05-2019 13:16:33

Igual que todos
 
Ya logro el envio , pero a la hora de la respuesta no me da nada. He modificado e importado el wdsl me ha generado muy poco codigo y con errores.


Estoy atrancado con XE5 , por si avanza alguien. Pleaseeee......

mtxtania 16-05-2019 15:23:26

Cita:

Empezado por APO (Mensaje 532045)
Hola mtxtania,

Pues vaya con los de la AEAT! Bueno, de momento, puedes gestionarlo como lo estoy haciendo yo, que es trabajar sobre el XML de respuesta. Para ello, lo que yo he hecho es crear una variable de tipo TXMLDocument e ir recorriendo los nodos. Te pongo una muestra de ejemplo:

Código Delphi [-]
procedure TfrmMantenimientoTabla.ProcesarXML;
var
   XMLDocument: TXMLDocument;
   XMLDocumentBody, XMLDocumentRechazado, XMLDocumentAceptado: IXMLNode;
   i: integer;
begin
   XMLDocument:=TXMLDocument.Create(Self);
   XMLDocument.Active:=False;
   try
      XMLDocument.LoadFromXML(mXML.Text); //Memo donde tengo cargado el XML
      XMLDocument.Active:=True;
      for i:=0 to XMLDocument.DocumentElement.ChildNodes.Count-1 do
      begin
         if UpperCase(trim(XMLDocument.DocumentElement.ChildNodes[i].LocalName))='BODY' then
         begin
            XMLDocumentBody:=XMLDocument.DocumentElement.ChildNodes[i];
            for j:=0 to XMLDocumentBody.ChildNodes.Count-1 do
            begin
               if UpperCase(trim(XMLDocumentBody.ChildNodes[j].LocalName))='IE204' then
               begin
                  //MENSAJE RECHAZADO (Si el mensaje de respuesta tiene el nodo Ie204 es que ha sido rechazado)
                  XMLDocumentRechazado:=XMLDocumentBody.ChildNodes[j];
                  //...

               end
               else
               begin
                  //MENSAJE ACEPTADO
                  if UpperCase(trim(XMLDocumentBody.ChildNodes[j].LocalName))='IE201' then
                  begin
                     XMLDocumentAceptado:=XMLDocumentBody.ChildNodes[j];
                     //…
                  end;
               end;
            end;
         end;
      end;
   except

   end;
end;

Y respecto a la hora correcto, es como lo estoy haciendo yo también:

Código Delphi [-]
XML.Cabecera.HoraPreparacion.XSToNative(FormatDateTime('hh:mm:ss',now));

Saludos!


Muchas gracias!A ver si podemos hacerlo de otra forma!!

mtxtania 22-05-2019 09:54:36

Alguien tiene alguna novedad referente al desarrollo en Delphi?Sobre las respuestas a nil?

alejango 31-05-2019 19:08:10

venta en ruta
 
Se supone (y es mucho decir), que deberian de arreglarlo para antes de Julio

mtxtania 26-06-2019 15:50:33

Seguimos igual no?

ja_73 10-07-2019 15:15:45

hola
he conseguido hacer envíos de datos a AEAT, pero el problema lo tengo en las respuestas, que .NET no es capaz de deserializar el objeto.
por lo que estuve viendo, cuando me llega una respuesta del tipo IE225Tipo (nota de entrega) con el atributo <Marcadores/> vacío, no es capaz de deserializarlo, sin embargo, si viene con valor <Marcadores>1</Marcadores> funciona correctamente.
alguien sabe como puedo hacer para ignorar la deserialización del objeto Marcadores cuando viene vacía.
muchas gracias.


P.D.
No creo que vayan a modificar el webservice, mas bien nos tendremos que apañar nosotros, me temo que haciendo los envíos y recepciones "a pelo".

paquimd 30-09-2019 18:36:51

Hola.

Yo estoy aún más atascada que vosotros. Estoy en .net y no consigo enviar nada. Me da siempre el siguiente error:

No se puede ir automáticamente al servidor. Error de conexion con el servidor "www7.eaat.es". ¿ Alguien puede darme algo de luz? Estoy empezando a desesperarme.


Saludos

ipericole 02-01-2020 11:32:00

Hola amig@s,
Gracias a este hilo he conseguido respuesta del servicio web para el envio de albaranes. El problema lo tengo con el campo HoraPreparacion. Estoy programando en c# y la instrucion es tan secilla como cabecera.HoraPreparacion = DateTime.Now;
y la respuesta es "Formato de hora no válido" ValorOriginal "11:26:34.4458477+01:00". supongo le sobra la parte "+01:00" (lo he comprobado con SoapUI), pero entiendo que el formato lo obtiene de la definicion de campos por el servicio....


Agradeceria cualquier ayuda.
Saludos

ipericole 08-01-2020 18:07:41

Cita:

Empezado por ja_73 (Mensaje 532734)
hola
he conseguido hacer envíos de datos a AEAT, pero el problema lo tengo en las respuestas, que .NET no es capaz de deserializar el objeto.
por lo que estuve viendo, cuando me llega una respuesta del tipo IE225Tipo (nota de entrega) con el atributo <Marcadores/> vacío, no es capaz de deserializarlo, sin embargo, si viene con valor <Marcadores>1</Marcadores> funciona correctamente.
alguien sabe como puedo hacer para ignorar la deserialización del objeto Marcadores cuando viene vacía.
muchas gracias.


P.D.
No creo que vayan a modificar el webservice, mas bien nos tendremos que apañar nosotros, me temo que haciendo los envíos y recepciones "a pelo".




Estoy en ese mismo punto... Lo has conseguido?


La franja horaria es GMT +2. Ahora son las 17:47:18.

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