Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola cmschneider

La verdad he usado poco y nada los componentes Indy,

En esta ocasion hice las pruebas con Delphi 2010; la version de los componentes Indy es la 10.5.5

Copie el codigo tal cual lo pusiste y obtengo una excepcion de tipo EIdIOHandlerPropInvalid con el mensaje

Cita:
IOHandler value is not valid
Seguire investigando
Responder Con Cita
  #2  
Antiguo 05-03-2016
cmschneider cmschneider is offline
Registrado
 
Registrado: oct 2006
Posts: 6
Poder: 0
cmschneider Va por buen camino
Hola Agustín: ante todo muchas gracias por tu tiempo. Luego de muchos intentar, me dí cuenta que las librerías que me faltaban para hacer funcionar tu proyecto son las encargadas de parsear los Json devueltos (System.Json.Types, System.Json.Readers). Así que modifiqué la unit Afip.PublicAPI.Parsers para hacerla funcionar con las herramientas que tengo en XE8 y funcionó!
Nuevamente gracias; me será de mucha utilidad.
Responder Con Cita
  #3  
Antiguo 05-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En realidad es un error de mi parte haberlo implementado de esa forma, ya que se generan dependencias con otras bibliotecas y no existe la posibilidad de cambiar eso sin trocear el código

Por cierto no pude lograr obtener una respuesta con Indy, y eso que he agregado el componente interceptor para OpenSSL

En ese caso obtengo una excepción socket timeout
Responder Con Cita
  #4  
Antiguo 26-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Saludos,

Me termine dando por vencido con Indy (he probado con las diferentes versiones, la 9, la 10, buscado en internet y no hay caso )

He decidido darle una oportunidad a la biblioteca Synapse que es OpenSource. Con esta biblioteca no he tenido ningun problema para realizar las invocaciones GET

El siguiente paso fue eliminar las dependencias con los componentes NetHttpClient

He declarado una interface en la unidad Afip.PublicAPI.HttpClient y delegado la implementacion al usuario:

Código Delphi [-]
  IHttpClient = interface
    ['{AFA99837-6CBB-4111-A268-D8AB8E4CD8DD}']
    function HttpGetText(const AUrl: string): string;
    function HttpGetBinary(const AUrl: string): TStream;
  end;

Cualquier clase que implemente IHttpClient le sirve a mi clase TAfipQuery para comunicarse con el servidor REST

Se proveen dos implementaciones:

- La que ya teniamos hasta ahora, usando los components NetHttpClient

Esa implementacion la he movido a la unidad Afip.PublicAPI.NetHttpClient; esta encapsulado dentro de la clase TNativeHttpClient

- La nueva implementacion usando la biblioteca Synapse, en la unidad Afip.PublicAPI.SynapseHttpClient

He incluido tambien en el repo la propia biblioteca Synapse, con solo agregar la ruta en Delphi, ya esta listo para funcionar

Cita:
... \AFIP\Third-Party\Synapse

El constructor de TAfipQuery ahora requiere una referencia a una interface de este tipo (dependency injection)

Código Delphi [-]
  constructor Create(const AHttpClient: IHttpClient; const APersister: IPersister_Afip = NIL);

Y eleva una excepcion si le pasamos NIL...

Código Delphi [-]
constructor TAfipQuery.Create(const AHttpClient: IHttpClient; const APersister: IPersister_Afip = NIL);
begin
  if AHttpClient = NIL then
    raise Exception.CreateFmt('%s.Create :: AHttpClient is NIL', [ClassName]);

He eliminado las funciones que operaban (por asi llamarlo de una manera) "al estilo static", o de funcion de clase (class function) porque ahora no tengo mas el constructor por defecto y no quiero seguir acoplando dependencias

Por ultimo he actualizado el demo para que cumpla con esta refactorizacion; tambien he incluido la posibilidad de usar una u otra biblioteca en tiempo de ejecucion (Synapse o NetHttp)

La biblioteca Synapse deberia funcionar con versiones mas antiguas de Delphi e incluso FPC (Lazarus)
Responder Con Cita
  #5  
Antiguo 29-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Saludos,

He terminado por desacoplar completamente el diseño

He implementado el parser usando la biblioteca lkJSON

El código ya está publicado, ahora tenemos dos clases que implementan las interfaces parser, usando dos bibliotecas distintas para tratar con JSON: la biblioteca System.Json de Delphi y la lkJSON

De este modo se amplia la compatiblidad con versiones de Delphi mas antiguas

He incluido algunas reformas, por ejemplo ahora el constructor va a tambien requerir las interfaces parser. De este modo el usuario puede incluir su implementacion si asi lo quiere
Responder Con Cita
  #6  
Antiguo 29-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Aca se puede ver el demo en ejecucion, compilado con Delphi 2010

Ya he solucionado los problemas de compilación (record helper, namespaces de las unidades, TFormatSettings)

Responder Con Cita
  #7  
Antiguo 30-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola nuevamente

He creado un port para FreePascal de esta biblioteca

Hay algunas pequeñas diferencias con la version para Delphi (mas que nada las dependencias, tuve que tocar bastante la biblioteca lkJSON)

Pueden obtenerlo acá

Saludos
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
Factura Electronica - Afip Argentina Joe_Balda Varios 30 30-01-2021 04:10:34
Factura Electrónica AFIP Argentina SergioFrey Noticias 2 19-05-2017 21:02:03
Como informar Factura Electrionica 'B' AFIP ARGENTINA adripugliesso Varios 1 24-08-2015 14:14:28
Ayuda Web Service AFIP Argentina patriciojgf Delphi para la web 1 04-11-2014 17:46:34
Padrón telefónico rruffino SQL 2 09-08-2008 16:27:02


La franja horaria es GMT +2. Ahora son las 15:56:47.


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