Ir al contenido


Foto

Pequeñas y necesarias adiciones y correcciones...


  • Por favor identifícate para responder
6 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 enero 2010 - 02:07

Buen día (o tarde o noche, según sea el caso), compañer@s del foro.

En el tutorial de Egostar http://www.delphiacc...-base-de-datos/ respecto a consumir un webservice con acceso a bases de datos, lo he seguido paso a paso (¡¡¡EXCELENTE ESFUERZO Y TUTORIAL!!!) pero al llegar a la parte de "hagámoslo algo productivo", entramos al área peliaguda del desarrollo.

Es ahora que debo hacer algunas pequeñas precisiones respecto a lo escrito por Egostar.

(Utilizo EMS SQL Manager para Firebird y Delphi 2010)

1.- Cuando se hace la creación de la tabla de trabajo (Clientes), el trigger y el generator se crean en el momento que se le asigna al campo CLIENTE_ID la propiedad de ser Autoincrementable. Al menos a mí me dio muchos problemas al momento de insertar datos si no se hace de la manera que recomiendo :$

2.- Les recomiendo encarecidamente revisar los parámetros que se anexan a los SQLDataSet's a utilizar, ya que al menos para el que efectúa la función de borrar registros, le falta añadirle el parámetro ID. Los demás funcionan de maravilla, pero nunca está de más hacer un "double-checking" de todos los parámetros.  (b)

3.- En la función FieldsToXml le hace falta un ciclo que recorra el dataset recopilando datos. Una vez que lo insertan, la función crea un archivo XML perfectamente utilizable por el standard SOAP, aún en PHP.


  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 enero 2010 - 02:11

Y finalmente...

4.- El ejemplo es EXCELENTE, pero lo pueden mejorar mucho si eliminan los textos de los mensajes y conservan solamente el valor de retorno. Eso le da más elegancia cuando se consume por medio de PHP, además de quitarle un poco de chamba a tu contraparte web.


Si tuviesen algún comentario, me sentiré honrado de recibirlo.
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 enero 2010 - 02:33

Muchas gracias amigo Felipe, me siento honrado de que te hayas tomado el tiempo de analizar e intentar reproducir mi tutorial.

Evidentemente tiene muchas carencias debido al poco conocimiento que se tuvo al crear el tutorial y los comentarios como el tuyo y de los demás compañeros harán de ese tutorial una excelente referencia sobre el tema.

Quiero agregar que debido a la versión que tengo de Delphi no he podido utilizar componentes que ayudan enormemente la creación de webservices "pasando" los datos contenidos en DataSet's directamente y no con archivos XML, por ejemplo usando los Remote DataModule o con DataSnap.

Muchas gracias y todos los apuntes al respecto son bienvenidos.

Salud OS

PD, Bienvenido a la Comunidad DelphiAccess. :)
  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 enero 2010 - 02:50

Muchas gracias amigo Felipe, me siento honrado de que te hayas tomado el tiempo de analizar e intentar reproducir mi tutorial.


jejejejee  La necesidad tiene cara de hereje, Eliseo..., estaba buscando una manera de solucionar un WebService usando una base de datos..., consulté San Google y ¡voilá!, apareció tu tutorial en primera línea. Lo demás, es historia.

... Evidentemente tiene muchas carencias debido al poco conocimiento que se tuvo al crear el tutorial y los comentarios como el tuyo y de los demás compañeros harán de ese tutorial una excelente referencia sobre el tema...


Nadie nace sabiendo, chavito..., y créeme que mientras más estás dentro del ambiente laboral tienes que colaborar con alguien. Y más si estás trabajando para tí mismo.


...Quiero agregar que debido a la versión que tengo de Delphi no he podido utilizar componentes que ayudan enormemente la creación de webservices "pasando" los datos contenidos en DataSet's directamente y no con archivos XML, por ejemplo usando los Remote DataModule o con DataSnap...


Es lo bello de todo..., el standard SOAP E-X-I-G-E que las comunicaciones entre el webservice y la interfaz sean en XML, así que no estás tan "perdido", por eso, después de estudiar el tutorial decidí usarlo.
  • 0

#5 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 05 febrero 2010 - 09:09

Más correcciones al tema de WebService's.

* En un ambiente de trabajo, el proxy de CADA máquina de la intranet que deba consumir el webservice con una aplicación hecha en Delphi, debe necesariamente incluir la IP de la máquina en que reside el webservice. Ejemplo en la ilustración.
* Después de abrir el puerto 80, verificar que la comunicación no "tire" el navegador y los mensajeros (MSN, Yahoo!Messenger, Pigdin), por que la webservice tiende a bloquear ancho de banda.

Gracias por sus comentarios

Archivos adjuntos


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 febrero 2010 - 11:04

Muy interesante observación amigo Felipe, ya que muchas empresas o la mayoría utilizan proxie's para la salida a Internet y claro, esa es la vida real.

Gracias por la retroalimentación sobre este tema que afortunadamente está teniendo mucho éxito a pesar de las limitaciones que se tuvieron al crearlo pero que con todas las aportaciones que se han tenido se está logrando realizar un excelente documento en español.

El siguiente paso es desarrollar un verdadero tutorial digno de esta comunidad y me tomo el atrevimiento de comentar que ya se está cocinando :)

Salud OS
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 febrero 2010 - 11:51

Yo sigo encontrándole mejoras a éste procesito del webservice..., y mientras más lo utilice, mejor quedará.

Por ejemplo, en las funciones que CREAN los archivos XML, debe necesariamente incluirse un bloque de designación de XML, como éste, por ejemplo:



delphi
  1. function TWsdbSQLSrvr.ObtnrEncbzds: widestring;
  2. begin
  3.   dm := TDtMdlWSdbSQLSrvr.Create (nil);
  4.   try
  5.     Result := '';
  6.     dm.ADOQryEncbzd.Open;
  7.  
  8.     if dm.ADOQryEncbzd.RecordCount > 0 then begin
  9.       Result := '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>' + sLineBreak + FieldsToXml('listado', dm.ADOQryEncbzd);
  10.     end
  11.     else
  12.       Result := '<dato>' + sLineBreak + '<lista>' + sLineBreak + '</lista>' + sLineBreak + '</dato>' + sLineBreak;
  13.  
  14.   finally
  15.     dm.ADOQryEncbzd.Close;
  16.     dm.ADOCnnctnProcesac.Connected := False;
  17.     dm.Free;
  18.   end;
  19. end;



Ahora, en los archivos XML creados, hace falta un separador de registro, por así llamarlo, que encuadre cada uno de los conjuntos de datos. Yo lo resolví de ésta manera:


delphi
  1. function FieldsToXml (rootName: string; data: TADOQuery): string;
  2. var
  3.   i: Integer;
  4. begin
  5.   Result := '<' + rootName + '>' + sLineBreak;;
  6.  
  7.   Data.First;
  8.   while not data.Eof do
  9.   begin
  10.     Result := Result +  '<dato>' + ' ' + sLineBreak;
  11.     for i := 0 to data.FieldCount - 1 do
  12.       Result := Result + '  ' + MakeXmlStr(LowerCase(data.Fields.FieldName),data.Fields.AsString) + sLineBreak;
  13.  
  14.     Result := Result +  '</dato>' + ' ' + sLineBreak;
  15.     data.Next;
  16.   end;
  17.  
  18.   Result := Result + '</' + rootName + '>' + sLineBreak;;
  19.  
  20. end;



Y una precisión más. Los nombres de apertura y cierre de tags SIEMPRE deberán ser en minúsculas.

Fascinante el mundo de los WebServices..., los mantendré informados de posteriores adiciones. Creo que un par de usos más y haremos algo REALMENTE poderoso y potente.
  • 0




IP.Board spam blocked by CleanTalk.