Construir una App iOS paso a paso

Hola amigos, en ésta ocasión vamos a desarrollar una aplicación para iOS paso a paso, para éste artículo usaremos la interfaz de un iPhone5, pero bien pueden hacerlo para iPhone estándar y/o para iPad.

Antes de comenzar éste tutorial, quiero comentar, que es requisito contar con una MAC o al menos un servicio como el macincloud para poder compilar y ejecutar nuestra aplicación móvil.

Como ya es mi costumbre, vamos a desarrollar un cliente que consuma un Servicio Web pero desde un dispositivo móvil, vamos a tomar el ejemplo que publiqué hace unos meses (Probando Delphi for iOS) del cual no pude hablar más a fondo debido a que aún era un producto beta pero que me sirvió mucho para aprender un poco de ésta nueva característica que cuenta la más reciente versión de Delphi.

Lo primero que vamos a hacer es crear una aplicación Delphi para Móvil con Firemonkey como se muestra en la siguiente imagen:

Acto seguido, Delphi nos muestra una ventana con diferentes  plantillas de aplicaciones móviles con FireMonkey, donde elegiremos para efectos de éste ejercicio, la plantilla que contiene encabezado y pié de página.

Posteriormente y antes de comenzar a desarrollar nuestra aplicación,  Delphi nos muestra un experto que  nos ayudará a configurar el ambiente de desarrollo para la construcción de aplicaciones móviles para iOS, es decir, como configurar la MAC y RAD Studio para trabajar en conjunto.

Pueden seguir éste excelente artículo de mi buen amigo Germán Estévez (Neftalí) para configurar el entorno de trabajo iOS.

Minimizamos o cerramos el experto y tendremos ya nuestra forma lista para comenzar a escribir nuestra primera aplicación móvil para iOS.

Comenzamos por elegir el dispositivo para el cual vamos a desarrollar nuestra aplicación móvil. En mi caso elegí el iPhone5.

También colocamos un texto en el encabezado de nuestra forma, éste ejemplo será un conversor de monedas a través del consumo de un Servicio Web creado por el Banco de México, el cual nos proporciona el tipo de cambio de algunas monedas.

Ahora necesitamos decidir que objetos vamos a colocar en nuestra forma, en mi caso decidí colocar los siguientes:

  • 1 TListBox
  • 7 TListBoxItem’s
  • 2 TListBoxGroupHeader’s
  • 5 TLabel’s
  • 2 TEdit’s

También conseguí 6 banderas de los países que vamos (en éste ejemplo) a disponer de paridad cambiaria contra el peso mexicano.

Después de agregar los objetos y acomodarlos según me pareció adecuado, nos ha quedado como se muestra en la imagen.

  El primer paso es agregar el TListBox a nuestra forma y configuramos las siguientes propiedades:

  • GroupingKind = gsGrouped
  • StyleLookup = transparentlistboxstyle

Damos clic derecho del mouse en el ListBox donde nos mostrará un menú emergente donde seleccionaremos la opción AddItem y agregamos:

  • 7 TListBoxItem’s
  • 2 TListBoxGroupHeader’s

Continuamos agregando imágenes a los TListBoxItem; en éste ejemplo utilizaremos banderas de cada país del cual se tiene paridad cambiaria con el Peso mexicano, damos clic en la propiedad ItemData del TListBoxItem, damos clic en la propiedad BitMap y nos mostrará una ventana donde podrémos seleccionar la imagen que deseamos. También editamos el texto que se va a mostrar en la propiedad Text.

Adicionalmente colocamos los 2 TEdit y las 5 TLabel como se muestra en la imagen siguiente:

El siguiente paso es  generar nuestra clase que consumirá el Servicio Web del Banco de México y que nos proporcionará las paridades o tipos de cambio de las monedas que vamos a utilizar en nuestra aplicación, el WSDL de éste servicio web es el siguiente:

http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL

Vamos a utilizar la forma tradicional de importar el WSDL a nuestra aplicación con el importador de WSDL como se muestra a continuación:

Éste importador genera el código necesario para poder consumir el servicioWeb y ya sólo nos resta escribir el código para que nuestra aplicación se conecte y nos muestre las paridades para cada una de las monedas seleccionadas y usarlas para convertir la cantidad de la moneda extranjera al peso mexicano. Por supuesto, ustedes pueden utilizar otro proveedor de paridades para ajustarlo a su moneda.   Ya tenemos todo para comenzar a escribir nuestro código.

Y como todo lo nuevo, hay algunos detalles que hay que tomar en cuenta a la hora de escribir nuestro código,

por ejemplo:

¿Cómo hacer que nuestra aplicación se ajuste en la pantalla para que no se encime en los contoles donde vamos a capturar el monto a convertir?.

La solución la encontré en uno de los ejemplos que vienen con delphi y se llama «ScrollableForm» el cual se encuentra en el directorio «RAD Studio\11.0\Samples\FireMonkeyMobile».

Se requirió de agregar dos componentes más, un TVertScrollBox y un TLayout para poder ajustar la pantalla cuando se intenta escribir en los controles sin que interfiriera el teclado numérico.

 

{******************************************************************************}
{  código para ajustar los objetos cuando se muestra el teclado en la pantalla }
{******************************************************************************}

procedure THeaderFooterForm.RestorePosition;
begin
  VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0);
  Layout1.Align := TAlignLayout.alClient;
  VertScrollBox1.RealignContent;
end;

procedure THeaderFooterForm.UpdateKBBounds;
var
  LFocused : TControl;
  LFocusRect: TRectF;
begin
  FNeedOffset := False;
  if Assigned(Focused) then
  begin
    LFocused := TControl(Focused.GetObject);
    LFocusRect := LFocused.AbsoluteRect;
    LFocusRect.Offset(VertScrollBox1.ViewportPosition);
    if (LFocusRect.IntersectsWith(TRectF.Create(FKBBounds))) and
       (LFocusRect.Bottom > FKBBounds.Top) then
    begin
      FNeedOffset := True;
      Layout1.Align := TAlignLayout.alHorizontal;
      VertScrollBox1.RealignContent;
      Application.ProcessMessages;
      VertScrollBox1.ViewportPosition :=
        PointF(VertScrollBox1.ViewportPosition.X,
               LFocusRect.Bottom - FKBBounds.Top);
    end;
  end;
  if not FNeedOffset then
    RestorePosition;
end;

procedure THeaderFooterForm.FormCreate(Sender: TObject);
begin
  VertScrollBox1.OnCalcContentBounds := CalcContentBoundsProc;
end;

procedure THeaderFooterForm.FormVirtualKeyboardHidden(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  FKBBounds.Create(0, 0, 0, 0);
  FNeedOffset := False;
  RestorePosition;
end;

procedure THeaderFooterForm.FormVirtualKeyboardShown(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  FKBBounds := TRectF.Create(Bounds);
  FKBBounds.TopLeft := ScreenToClient(FKBBounds.TopLeft);
  FKBBounds.BottomRight := ScreenToClient(FKBBounds.BottomRight);
  UpdateKBBounds;
end;

procedure THeaderFooterForm.CalcContentBoundsProc(Sender: TObject;
  var ContentBounds: TRectF);
begin
  if FNeedOffset and (FKBBounds.Top > 0) then
  begin
    ContentBounds.Bottom := Max(ContentBounds.Bottom,
                                2 * ClientHeight - FKBBounds.Top);
  end;
end;
{******************************************************************************}

Scroll Vertical para reajustar la pantalla

Otro detalle era pasar el monto, la bandera y el texto de cada moneda, lo cual fué algo simple de resolver pasando las propiedades al seleccionar la moneda deseada hacia el objeto destino.

 
procedure THeaderFooterForm.lbDolarUSAClick(Sender: TObject); 
begin 
  TC := StringReplace(label1.Text,'

Escribimos el código necesario en el evento OnExit del Edit donde capturamos la cantidad a convertir para que nos muestre el valor en peso de acuerdo a la moneda seleccionada.

 
procedure THeaderFooterForm.Edit2Exit(Sender: TObject);
begin
  valorME := StringReplace(edit2.Text,'

Compilamos y Delphi XE4 hace su trabajo generando todo lo necesario para que nuestra aplicación sea ejecutada en el simulador.

Convertimos dólares a pesos

Convertimos Euros a pesos

Con ésto hemos terminado el primer artículo de una serie que intentará demostrar que se puede desarrollar 4 aplicaciones diferentes utilizando los mismo componentes y el mismo código, espero no defraudarlos 🙂

Los otros tres artículos son:

Happy coding!!!!

Descargas


Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.

Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.


Lanzamiento RAD Studio XE4

2013-05-21 08.59.40

Hola,

El día de ayer (21 Mayo 2013) estuve en el lanzamiento de RAD Studio XE4 en la Ciudad de México. Una presentación que me ha dejado muy satisfecho con lo que los chicos de Embarcadero han hecho para proporcionarnos la opción de crear aplicaciones para dispositivos móviles iOS.

En ésta ocasión el encargado de darnos los pormenores de ésta nueva versión de RAD Studio fué Anders Ohlsson a quien podemos ver preparando su equipo antes de iniciar el evento, cabe mencionar que tuve la oportunidad de charlar un poco con él (mi inglés es muy pobre :)) y puedo asegurarles que es una persona muy agradable y atenta.

2013-05-21 08.34.11

Dió inicio la presentación de RAD Studio XE4 «la primera solución de desarrollo de aplicaciones nativas multi-dispositivo»

2013-05-21 09.18.26

Las ventajas de contar con una sólo herramienta de desarrollo son enormes ya que se traduce en un sólo código base, un sólo equipo y una sóla agenda, aúnado a la reducción de gastos que serían mucho más altos si se tuviera que desarrollar con diferentes herramientas para diferentes dispositivos.

2013-05-21 09.21.50

2013-05-21 09.25.58

Y ésto se logra con Firemonkey, la plataforma para la creación de aplicaciones de múltiples dispositivos realmente nativas para iOS, Windows y Mac que usa un solo código base y que de acuerdo a su arquitectura podrá acceder al popular sistema operativo Android, algo muy esperado por muchos….

2013-05-21 09.24.35

Algunas de las caracteristicas más relevantes de RAD Studio:

2013-05-21 09.28.18     2013-05-21 09.35.23

2013-05-21 09.32.42     2013-05-21 12.04.21   2013-05-21 10.02.55

2013-05-21 09.35.37

La asistencia fué de 100 personas exactamente, aunque es un buen número, seguimos extrañando aquellas presentaciones con mas de 200 asistentes, estoy seguro que la presentación de Android regresará esos números.

2013-05-21 09.36.25

En general la presentación fué muy interesante y algo peculiar en ésta ocasión fué que hubo pocas caras conocidas y muchas caras nuevas, algo que pudiera tener dos aristas, sin embargo, me reservo el comentario hasta ver la respuesta de la comunidad cuando Android salte a escena.

Hasta pronto

Consumir un Servicio Web de terceros

A petición de uno de mis lectores, he creado un pequeño cliente que consume un servicio web de terceros, en éste caso el mismo que usé para mi entrada anterior Probando Delphi for iOS  pero en una aplicación de escritorio.

El proceso es muy simple.

– Creamos una nueva aplicación VCL.

– Importamos el WSDL del Servicio Web en éste caso de Banxico.

Éste importador nos genera una clase con la definición del Servicio Web lista para ser consumida, como lo podemos apreciar en la siguiente imagen.

– Agregamos los objetos que deseamos para que nuestra interfáz gráfica se vea un poco decente 🙂

– Agregamos el código necesario para consumir el método que obtiene el tipo de cambio de las diferentes monedas y ejecutamos nuestra aplicación.

Cabe mencionar que por el poco tiempo que dispongo no pude utilizar el XML Data Binding para crear las clases que representan el esquema del documento XML por lo que tuve que «trabajar» con algo más simple para serializar el XML que nos regresa el Servicio Web.

Enjoy!!!

Nota: Desarrollado con Delphi XE2


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Probando Delphi for iOS

Logo Delphi MVP

Como algunos saben, estoy muy involucrado en la creación y consumo de servicios web y desde hace tiempo había querido desarrollar un cliente que consumiera un servcio web desde dispositivos móviles tal y como lo hago en las aplicaciones de escritorio y puedo asegurarles que Delphi for iOS es inigualable, estoy muy entusiasmado por la rapidéz, facilidad y poderío al hacerlo con mi herramienta preferida.

Pues bien, he desarrollado un pequeño cliente para consumir un servicio web que nos proporciona el tipo de cambio de algunas monedas (USD Dólar, Dólar Canadiense, Euro, Yen y Libra Esterlina) con relación al peso mexicano y con ello poder hacer la conversión ya sea de pesos mexicanos a monedas extranjeras o al contrario.

El desarrollo de ésta app fué muy simple.

  • Importamos el wsdl de servicio web, en éste caso del Banco de México (http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL)
  • Colocamos los componentes visuales necesarios.
  • Consumimos el método «tiposDeCambioBanxicoRequest» del servicio Web para mostrar los diferentes valores en pesos de las monedas extranjeras.
  • Escribimos las operaciones básicas para realizar la conversión de divisas.
  • Compilamos y ejecutamos la App en el simulador de iPhone instalado en mi MacBook Air.

 

vcl

La App funciona muy bien en el simulador de iPhone, se puede seleccionar la moneda que se deseé y se puede ingresar la cantidad que quieres convertir ya sea en pesos o en la moneda extranjera seleccionada. Como un pequeño detalle, la bandera de la moneda extranjera cambia de acuerdo a la moneda seleccionada en la parte superior.

iOS

Como ven es una App muy básica, pero las opciones son inmensas, por supuesto que no estoy descubriendo el hilo negro, ya hay muchas aplicaciones de éste tipo para dispositivos móviles, sin embargo, como prueba inicial, puedo asegurar que Delphi for iOS no me decepcionó, al contrario, me ha despertado un interés muy fuerte y sólo estoy en espera de que sea liberado.

Por hoy es todo, espero que ésta App les haya sido interesante e ilustrativa como lo fué para mi. Seguiremos probando Delphi for iOS, aún hay muchas cosas que quiero ver y el tiempo es poco 🙂

Hasta la próxima.

Importante: Considere que todo lo que se expresa en ésta publicación es acerca de un producto Beta por lo que los detalles finales pueden llegar a cambiar en el lanzamiento oficial.

Los únicos medios oficiales acerca de éste producto se encuentran en el sitio de embarcadero, puede acceder a los detalles en los siguientes enlaces :

Develop iOS applications with Delphi y en su mapa de ruta.

Ésta entrada sólo intenta mostrar de forma simple y sin entrar en detalles técnicos las facilidades que nos podría proporcionar el nuevo Delphi for iOS

Delphi para iOS. Vista previa.

 

Logo Delphi MVP

Hola amigos, en ésta entrada hablaremos un poco acerca de la vista previa de Delphi para iOS y que nos ha sido mostrada a través del webinar de ayer 27 de Febrero de 2013.

Personalmente estoy muy ansioso de contar con éste tipo de soluciones, tanto para iOS como para Android. En éste webinar se ha mostrado el desarrollo de aplicaciones para iOS y se comenta que para el 3er cuarto de 2013 se tendrá la plataforma para Android.

 

Una de las cosas que me parecieron relevantes y por demás interesantes son los cambios que se han hecho al compilador y que muestro en la siguiente imagen:

 

cambio_Comp

 

También se han agregado algunos componentes nuevos

New_Comp

La presentación me gustó y una de las cosas que se deben aclarar para el desarrollo de aplicaciones iOS es que se necesita una MAC, y no es un requerimiento de Delphi, es una regla de la compañia de la manzana para poder generar dichas aplicaciones.

Yo ya veo maduro el producto y casi listo para ser lanzado al mercado, lo que falta, y se que es el siguiente paso, es generar aplicaciones para Android (asunto del cual estoy realmente ansioso de probar).

Bien por la vista previa, gracias Diego, gracias Fernando y gracias Allison.

 

Nos vemos en la siguiente entrada.

 

¿Cómo depurar un Servicio Web?

Índice

● Introducción
● Crear Aplicación SOAP Servidor
● Crear la aplicación Cliente
● Probando la depuración de nuestro Web Service
● Descargas


Introducción


 

Hace tiempo escribí dos pequeños tutoriales acerca de los Servicios Web, el primero Crear y consumir un WebService con Delphi (Parte I, II y III) y el segundo  Consumir WebService con acceso a Base de Datos.

Ahora he creado una tercera entrega a raíz de un hilo de mi amigo y colega Marc en los foros de la Comunidad DelphiAccess, donde preguntaba ¿Un WebService no puede usar Componentes no gráficos? , y durante las preguntas y respuestas, vi la necesidad de desarrollar un nuevo tutorial aprovechando la experiencia que he adquirido en la creación y consumo de Servicios Web y específicamente por la necesidad de contar con documentación de cómo depurar y encontrar de una forma «amable» problemas que no se pueden ver a simple vista.

Dado que éste tutorial no se centra en el desarrollo del Servicio Web, sino en como depurarlo, vamos a utilizar lo que ya vimos en el primer tutorial de ésta serie, usando las operaciones aritméticas básicas, Suma, Resta, Multiplicación y División y por tal razón me tomo el atrevimiento de hacer un «copy&paste» de dicho tutorial para enfocarnos en el tema de la depuración.

Éste tutorial fué desarrollado con XE3 pero puede realizarse con XE y XE2 también, para versiones anteriores a XE se desarrollará otro tutorial ya que se crea de forma diferente, en breve lo publicaré.

Como siempre, agradeceré todos los comentarios y críticas (en cualquier sentido) de éste tutorial.

regresar al Índice


Crear Aplicación SOAP Servidor


 

Comenzaremos creando nuestra Aplicación Servidor siguiendo los pasos que ya habíamos visto: File, New, Other, WebServices, seleccionamos SOAP Server Application y finalmente presionamos OK.

En Delphi XE2 y XE3 se mostrará una ventana donde elegiremos la opción Stand-Alone VCL application la cual es un servidor Web que es mostrado en una aplicación VCL y que utiliza el componente Indy HTTP Server. Presionamos el botón [Next>>] para continuar.

La versión XE de Delphi nos proporciona dos opciones para crear el depurador, en éste tutorial vamos a ver sólo la creación de una aplicación Stand Alone y elegiremos la opción Indy VCL Application, la otra opción llamada Web App Debuguer executable, la trataremos en un tutorial aparte ya que su funcionamiento es diferente y un poco más elaborado y es la que las versiones anteriores a XE traen por omisión.

La siguiente ventana nos preguntará que puerto queremos usar para que la aplicación Web escuche las peticiones del programa cliente, cuenta con un botón [Test Port] para asegurarnos que el puerto seleccionado no esté en uso por otra aplicación. Si se desea se puede utilizar un puerto seguro HTTPS, para éste tutorial utilizaremos el puerto 8080. Para continuar presionamos el botón [Finish].

En esta parte ya podemos ver que Delphi nos creó una aplicación VCL con todo lo necesario para iniciar y detener el servicio Web y nos preguntará si queremos crear la interfaz del módulo SOAP, presionamos el botón [No] ya que vamos a aprovechar el código que se tiene del primer tutorial que realizamos (Si ya cuentas con un servicio web, utiliza las unidades de implementación y de interfáz; si no, al final encontrarás un enlace donde prodrás descargar el código de éste tutorial).

Con el clásico Copy&Paste, agregamos a nuestro proyecto las unidades del servicio Web que creamos en nuestro primer tutorial y copiamos específicamente las unidades de Interfaz y de Implementación, en éste caso wsServerIntf.pas y wsServerImpl.pas respectivamente.

Finalmente agregamos las unidades que copiamos a nuestro proyecto y estamos listos para ejecutar nuestro depurador, una vez en ejecución, podemos ver que tiene un botón para iniciar y otro para detener nuestro servicio Web, una caja de texto para asignar el puerto http que queremos utilizar en nuestro depurador y un botón que nos abrirá el explorador de internet para ver la estructura de nuestro servicio Web.

Presionamos el botón [Start] y es posible que Windows te pida autorización para desbloquear la aplicación, como lo muestro en la siguiente imagen, presiona el botón [Permitir acceso] para continuar.

Una vez que hemos permitido el acceso a nuestra aplicación, presionamos el botón [Open Browser] e inmediatamente nos mostrará la página de información de nuestro Servicio Web. Damos clic en el enlace al WSDL del tipo de puerto IwsServer como se muestra en la siguiente imagen y como preparación de nuestro siguiente capítulo Crear la aplicación Cliente

regresar al Indice


Crear la aplicación Cliente


 

Después de dar clic al enlace WSDL, veremos una página con la definición de los métodos de nuestro servicio Web, seleccionamos la url de la página y la copiamos para utilizarla en la creación de la aplicación cliente que consumirá nuestro sevicios Web.

Abrimos otra instancia de Delphi para crear la aplicación cliente y creamos un nuevo proyecto VCL, posteriormente importamos el WSDL y para ello damos clic en File –> New –> Other –> WebServices –> WSDL Importer, éste «asistente» importa el documento WSDL y genera todas las definiciones de clases necesarias para llamar los servicios Web usando un objeto de interfaz remota llamado THTTPRIO. Presionamos el botón [OK] para continuar.

La siguiente pantalla no permitirá especificar la dirección URL donde está publicado el documento WSDL, como ya tenemos la ubicación del WSDL en el portapapeles, sólo pegamos la URL copiada. También nos permite especificar los datos de autenticación para acceder al documento WSDL, como son, Usuario, Contraseña y Proxy si tuviese. Para continuar presionamos el botón [Next>>].

La siguiente pantalla nos permitirá seleccionar la versión SOAP que es usada por el documento WSDL, ésta puede ser 1.1 o 1.2, pero también podemos permitir que se seleccione la versión automáticamente. Para prevenir un error porque la versión no coincida, se recomienda elegir la opción Automatic SOAP versioning

Finalmente se nos muestra la pantalla de Opciones de importación del WSDL, donde se podrá configurar la forma como el «asistente» generará el código para representar las definiciones del documento WSDL, por lo general, se debe de utilizar las opciones que por defecto están seleccionadas, ya que dichos valores proporcionarán la forma más segura de importar documentos WSDL. Para terminar el asistente presionamos el botón [Finish]

Ya tenemos la clase que nos permitirá consumir los métodos de nuestro servicios Web. Ahora sólo nos queda crear la interfaz de usuario, para no aburrirlos sólo les mostraré la aplicación después de agregar los componentes necesarios (Si desean ver el detalle pueden leer la sección correspondiente del primer tutorial de ésta serie donde se muestra el paso a paso). De cualquier forma, al final de éste tutorial podrán acceder al código fuente de todo el ejercicio.

A continuación les muestro el código para cada método del servicio Web, es realmente simple.

 

 
unit Unit1;

interface

uses
  Vcl.Forms, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Controls,
  System.SysUtils, System.Classes,
  IwsServer2;

type
  TForm1 = class(TForm)
    btnSuma: TButton;
    btnResta: TButton;
    btnMultiplica: TButton;
    btnDivide: TButton;
    leValor1: TLabeledEdit;
    leValor2: TLabeledEdit;
    btnCerrar: TButton;
    leResultado: TLabeledEdit;
    procedure btnSumaClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnRestaClick(Sender: TObject);
    procedure btnMultiplicaClick(Sender: TObject);
    procedure btnDivideClick(Sender: TObject);
    procedure btnCerrarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Server: IwsServer;

implementation

{$R *.dfm}

procedure TForm1.btnSumaClick(Sender: TObject);
begin
  leResultado.Text := format('%f',[Server.Suma(strtofloat(leValor1.Text),
                                           strtofloat(leValor2.Text))]) ;
end;

procedure TForm1.btnRestaClick(Sender: TObject);
begin
  leResultado.Text := format('%f',[Server.Resta(strtofloat(leValor1.Text),
                                            strtofloat(leValor2.Text))]) ;
end;

procedure TForm1.btnMultiplicaClick(Sender: TObject);
begin
  leResultado.Text := format('%f',[Server.Multiplica(strtofloat(leValor1.Text),
                                                  strtofloat(leValor2.Text))]);
end;

procedure TForm1.btnDivideClick(Sender: TObject);
begin
  leResultado.Text := format('%f',[Server.Divide(strtofloat(leValor1.Text),
                                              strtofloat(leValor2.Text))]);
end;

procedure TForm1.btnCerrarClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Server := GetIwsServer();
end;

end.

regresar al Índice


Probando la depuración de nuestro Web Service


 

Ya tenemos nuestro proyecto terminado, Servidor y Cliente, ahora sólo nos resta probar que realmente funciona. Para ello, abrimos nuestro proyecto «Server» y agregamos «BreakPoints» en los 4 métodos como se muestra en la siguiente imagen.

Antes de ejecutar nuestros proyectos, vamos a agregar unas líneas a la clase generada por el importador WSDL en nuestra aplicación cliente que en éste caso se llama IwsServer1.pas, dado que los servicios Web reciben las peticiones y su respuesta es de inmediato, es necesario agregar timeouts para que no se reciban errores por estar depurando nuestro servicio Web, basta con agregar tres lineas a dicha clase.

 

      RIO.HTTPWebNode.ConnectTimeout := 120000;
      RIO.HTTPWebNode.SendTimeout := 120000;
      RIO.HTTPWebNode.ReceiveTimeout := 120000;

 

Éstas líneas deben agregarse en la función GetIwsServer como se muestra en la siguiente imagen.

Ya podemos ejecutar nuestro servicio web en modo de depuración (F9) y nuestra aplicación Cliente sin depurador (Ctrl+Shift+F9).

Asignamos los valores a cada uno de los campos de edición y presionamos la operación que se desea depurar, en éste caso se ha presionado el botón de división y una vez que se ha presionado, el servicio Web es detenido en el método correspondiente, podemos entonces ir paso a paso por cada una de las líneas y ver qué es lo que se está ejecutando en cada una.

Con ésto hemos terminado éste sencillo ejercicio, espero que les proporcione las bases para poder crear sus propios depuradores de servicios Web.

regresar al Índice


Descargas


Si lo deseas puedes descargar el código fuente de éste tutorial, espero te sea de utilidad.

[download id=»1″]
[download id=»2″]


 

———-Éste tutorial y su código fuente son libres para su uso y publicación, lo único que te pido es mencionar la fuente.

 

Delphi y la WinRT

Hay un tema que se está propagando rápidamente en la comunidad acerca del uso de WinRT bajo el nuevo sistema operativo de Microsoft y que está próximo a liberarse.

Recupero el tema tal cual se presentó en una de las discusiones que suelen generarse dentro de los foros de Embarcadero y que Allen Bauer Embarcadero Chief Scientist responde a una pregunta directa de Brandon Staggs de la compañia StudyLamp Software LLC

Q.- Brandon Staggs
Is there any indication that Embarcadero wants to support native Metro development using the unmanaged API?

A. – Allen Bauer
Yes. We are very keen on supporting WinRT with native Delphi & C++ code. Right now, the issues surrounding the WinRT space center around the fact that many OS-supplied APIs which are required by anyone implementing their own language RTL are actually off-limits unless you’re the VC++ RTL DLL. You know, little things like RtlUnwind for exception processing and VirtualAlloc (et. al.) for memory management… Any calls to those APIs from your application will automatically disqualify your application from being an «official» WinRT application capable of delivering through the MS app store.

Right now the VC++ RTL DLL is given special dispensation since that is the library that makes the calls to those forbidden APIs and not directly from the user’s app. We’re currently rattling some cages at MS to find out how or if they’re going to allow third-party tools to target WinRT. Until we can get past that, targeting WinRT isn’t actually possible from a deliverable product sense. We are able to build WinRT applications with Delphi that work with a developer certificate, however they all fail the application qualification checks because of the aforementioned (an other) APIs.

Like the APIs I mentioned above, there are lots of changes with WinRT that make targeting it a little more tricky. For instance, you cannot merely open any file, access the registry, and even use the loopback (127.0.0.1) adaptor. LoadLibrary cannot be used to load any arbitrary DLL; you must call LoadPackageLibrary and only on a DLL that is present in the digitally signed appx package. WinRT is a seriously locked down sandbox or «walled-garden» with some extremely high walls.

This is a little known or understood «feature» of Windows 8. I see no press that even talks about this at all. IOW, it’s Windows 8’s «dirty little secret.»

Mi opinión es que MS no podrá sustentar su política restrictiva por mucho tiempo y finalmente tendrá que modificarla y/o ser menos cerrada como sucedió con el tema de su Visual Studio Xpress cuando quiso restringirlo a sólo aplicaciones Metro, Web, Azure y WinPhone. Finalmente tuvo que modificar su proyecto y permitir aplicaciones de escritorio y de linea de comandos, cosa que no les ha de haber gustado mucho.

Mientras tanto, sigamos trabajando con nuestra herramienta preferida, por supuesto, estoy hablando de Delphi 🙂

Seguimos en contacto.

The Embarcadero MVP Program

Como se publicó no sólo por ésta bitácora sino por varias más, se inició un programa conocido como «Embarcadero Evangelist Program» ahora éste programa cambia de nombre y oficialmente se llamará «The Embarcadero MVP Program».

Esto ha sido anunciado por Anders Ohlsson en su bitácora The Hacker’s Corner, por supuesto aún se está trabajando con la imagen del programa y con el diseño de una página de lanzamiento oficial del programa.

Se muestra una lista de los actuales miembros del programa y pronto crecerá con algunos compañeros que están en espera de ser confirmados.

Por último Anders Ohlsson abre la convocatoria para que la comunidad postule a más compañeros que son apasionados de las herramientas de Embarcadero y que deberían ser un MVP.

Sólo puedo decir que es un honor estar en la lista al lado de profesionales indiscutibles. 🙂

Seguimos en contacto.

EMBT Community Evangelist Program

MVP Embarcadero Program

Tengo el gusto de anunciar el nuevo programa de Embarcadero denominado «Embarcadero Community Evangelist» al cuál he sido invitado a participar.

Éste programa ha sido creado para motivar a miembros de la comunidad de desarrolladores que están involucrados y apasionados por las productos de Embarcadero y a su vez construir un vínculo más estrecho con la comunidad.

Puedo decir que éste es un programa muy interesante y novedoso ya que nos permitirá estar al día con las últimas versiones de los productos de Embarcadero y de esa forma poder transmitir nuestras experiencias, en nuestro caso, a la Comunidad Hispana.

Se que hay miembros muy valiosos que deberían estar en éste lugar y por lo mismo me siento honrado de pertenecer al aún pequeño grupo de compañeros que ya forman parte de éste programa, como lo son mis amigos Juan Antonio Castillo (jachguate), Salvador Jover (Delphi Básico) y Germán Estévez (Neftali) a quienes la mayoría ya conoce y de sobra por sus excelentes aportaciones a la comunidad.

Quiero agradecer a Allison DiLauro por su invitación. a Anders Ohlsson que me ha permitido ser parte de éste programa  y a Andreano Lanusse con quien conviví en todas las presentaciones que realizó en México desde el año 2007 y que me dieron certidumbre en los tiempos difíciles.

Solo me resta decir que tengo un gran reto por delante y espero pronto estar a la altura de las circunstancias.

Saludos y nos leemos pronto.