domingo, 10 de julio de 2011

Lógica del negocio

Es sabido, y existen tutoriales y vídeos que explican como crear métodos en datasnap y consumirlos desde una aplicación cliente, ya sea Delphi, ASP.NET, PHP etc. Existe también muchos tutoriales y vídeos que explican como utilizar la interfaz IAppServer.
Muchos nos sentimos muy tentados a utilizar intensivamente la interfaz IAppServer, principalmente por su facilidad y rapidez. En entradas anteriores dejamos pendiente el tema de los autoincrementales en relaciones maestro-detalle con DataSnap

http://pablosoligo.blogspot.com/2011/07/dbexpressmaster-detail.html

lo que voy a mostrar es por un lado la puerta de entrada es a resolver el problema mencionado, pero es mucho mas que eso.

¿Si utilizo la interfaz IAppServer como y donde genero mi lógica del negocio?

La tentación de usar esta interfaz es muy grande, pero si los componentes generar automáticamente todo, ¿Como puedo yo meter mi lógica en todo este automatismo?
Existen varios lugares pero quiero proponer el que viene acompañado de mas información para la aplicación efectiva


Como muestra la figura el TDataSetProvider tiene dos eventos que nos serán muy útiles, BeforeUpdateRecord y AfterUpdateRecord. Tomemos el primero, generemos el código del evento y veamos que podemos hacer.



procedure TSMPedido.dspPedidoBeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
  var Applied: Boolean);
begin
  inherited;



  if (UpdateKind=ukInsert) and (SourceDS=sqlPedido) then begin
    DeltaDs.FieldByName('FechaHora').NewValue := Now();
  end;




end;



Aunque muy simple el código de arriba nos presenta una idea de lo que podemos hacer. El evento como su nombre lo indica se ejecuta justo antes de insertar/modifica/borrar el registro.
En el ejemplo, muy simple, lo único que hacemos es preguntar si es una inserción, de ser así ponemos la fecha hora que nos de el sistema. DeltaDS contiene los registros que cambiaron, la diferencia entre los datos que salieron del servidor y los que volvieron del cliente.
Parándonos sobre un registro y un campo con OldValue, NewValue podemos acceder a esa diferencias, incluso en este caso pisamos la fecha con el valor que nos retorne el sistema. Podemos incluso liberar a la aplicación cliente de esta responsabilidad y dejar que el servidor de aplicación lo haga.

Esto que ponemos aquí es didáctico, pero ya nos da la pauta de que es posible justo antes o justo después de actualizar un registro poner nuestra lógica, modificar valores, remplazar, e incluso tocar otras tablas que estén relacionadas. A modo de ejemplo luego de insertar/modificar/borrar un ítem de un pedido debo actualizar los stocks, luego de actualizar la temperatura de algún sensor puedo generar alguna alarma etc.
Para mejor, los parámetros me dan acceso a los elementos involucrados en la operación e incluso me dejan ver si es un insert, un update o un delete.

2 comentarios:

  1. Hola Pablo, estaría bueno un post sobre como utilizar desde la capa cliente funciones y procedimientos creados en la capa servidor.
    Cordiales saludos.

    ResponderEliminar
  2. Quiero compartir un testimonio sobre cómo el servicio de financiación Le_Meridian me ayudó con un préstamo de 2,000,000.00 USD para financiar mi proyecto de cultivo de marihuana, estoy muy agradecido y prometí compartir esta compañía de financiación legítima a cualquiera que esté buscando la manera de expandir su negocio. project.the company es una empresa de financiación del Reino Unido / EE. UU. Cualquier persona que busque apoyo financiero debe contactarlos en lfdsloans@outlook.com o lfdsloans@lemeridianfds.com. El Sr. Benjamin también está en whatsapp 1-989-394-3740 para facilitar las cosas a cualquier solicitante.

    ResponderEliminar