Vamos a avanzar en esta ultima parte de la serie, como prometimos, e intentaremos abordar -paso a paso-, con el máximo detalle, la puesta en marcha de este escenario que planteamos, toda vez que nuestra primera entrada nos permitió dar una introducción rápida pero no pudimos ver el detalle de pasos a seguir, que sin duda... Leer más →
Taller práctico: Curioseando en AWS y DataSnap (1/2)
Mis saludos en este principio de semana lluvioso y tristón, acompañado de esa llovizna ligera y unas nubes bastante grises y plomizas. ¿Qué tal, compañeros? Cualquier fecha es buena para retomar la actividad. 🙂 Así pues, me reencuentro con vosotros con esta entrada que abre el año 2014, tras un periodo de algunos meses... Leer más →
¡Felicidades Septiembre!
¿Qué tal estais? 🙂 Espero y deseo que bien. Hoy retomamos oficialmente, tras estas semanas de descanso, la actividad de la página, eso sí, 🙂 ya con las pilas cargadas y llenos de energia. Y digo oficialmente, porque durante los días anteriores sí que había estado publicando comentarios y remarcando algunos enlaces interesantes en Facebook y Twitter (a partir de ahora... Leer más →
Failover Server in DataSnap and Delphi 2010
Recientemente ha editado un pequeño video, Andreano Lanusse, con el título que encabeza la entrada, y en donde se da continuidad a los distintos artículos que ha publicado sobre DataSnap, aunque en este caso no ya referidos a las novedades y primeros pasos, sino al uso de las características o funcionalidades que pueden ser menos conocidas. En este caso concreto, aborda Andreano la parte que afecta a como dar respuesta desde nuestro servicio a los fallos y se puede ver a modo de ejemplo como redireccionar el cliente ante la caída de uno de los servidores).
Un día con los mayores (5) y Parte B
Lo primero que tenemos que tener en cuenta es que la clase TRejilla, nos debería proveer la funcionalidad básica para manipular los datos de forma sencilla. Eso es lo que siempre se ha buscado. Así que la clave, en este punto puede estar en valernos de Acciones, que podrán ser asignadas en tiempo de diseño durante la etapa de creación de los módulos de trabajo. Es decir, que nuestro trabajo consistiría básicamente en decidir a tenor de cada uno de ellos, cuales acciones van a quedar disponibles, en la etapa de diseño, sin tener que estar reinventando la rueda continuamente. Esta sería mas o menos la mecánica de trabajo para nosotros a este nivel, durante el desarrollo de nuestra aplicación: Creamos un módulo descendiente de la clase TBrowser, añadimos un componente TRejilla en su interior y ¡voila!, asignamos las acciones que vamos a permitir en aquellos elementos del interfaz que las requieran. Si a este punto añadimos que Ian, hacia formar parte del browser una ToolBar que puede ser receptor de las acciones, el trabajo se simplifica aun mas.
Más recursos…
El día 7 de Diciembre, os apuntaba en la entrada "Colección de recursos “on line” sobre D2010 (Pawel Glowacki)" la página de Pawel Glowacki, desde la que día antes se compartía con la comunidad una buena colección de recursos. Aunque más modesta, la entrada de Michael Rozlog con fecha6 de Enero del presente año, nos traslada una recopilación de una docena de videos creados por el sobre diversos temas. Los temas figuran al lado de cada url. Esta es la dirección la entrada en su blog: http://blogs.embarcadero.com/michaelrozlog/2010/01/06/37126 y las direcciones que incluye en su interior...
Un día con los mayores (5) Parte A
En esta quinta entrada de la serie, tenemos que abordar la clase TRejilla, que como ya comentabamos en las dos entradas previas, iba a servir de enlace entre la rejilla de datos y el formulario de edición (las clases TBrowser y TDialogo).
Un día con los mayores (4)
Vamos a dar otro paso más... En la tercera entrada de esta pequeña serie, nos centrábamos en la clase TAncestro, y pudimos ver como se convertía en la piedra angular del framework de Ian, de la que iba a heredar cualquier tipo de ventana que pudieramos pensar o necesitar. Ian valora en sus ejemplos, dos arquetipos de ventanas diferenciados: el que representa a la clase TBrowser y el que representa a la clase TDialogo. Es su idea, dicho sea de paso, muy razonable, de acuerdo a su experiencia como experto y en ese intento de simplificar. Quizás en vuestro caso, mientras leéis estas lineas imaginéis otros contextos que hagan necesaria la creación de otros descendientes, de acuerdo a criterios mas selectivos, como por ejemplo pudiera ser la seguridad, donde ciertas ventanas pudieran necesitar un tratamiento especial. Nada es descartable y el framework debería ser una propuesta de trabajo que muchos van a adaptarse de acuerdo a sus necesidades. De hecho, os comento que en mi caso concreto y en lo que respecta a la funcionalidad del Framework, descarté algunas partes que no estaba utilizando, como era la posibilidad de arrastrar registros mediante drag&drop, que Ian sí introduce y pone en práctica. Respecto a las ventanas, al final no me fue necesario crear ningún tipo adicional aunque hubiera momentos en los que sí pude habérmelo planteado.
De la mano del Dr. Bob
Bob Swart, o Dr. Bob que es como comunmente le conocemos, dejaba conocer desde la tribu de Delphi, la posibilidad de descargar un nuevo documento en el que el tema central son los datos y DataSnap. Este documento de mas de 50 páginas, unido a la guía de Rad Studio 2010, tambien con un numero similar, puede descargarse libremente, con el único requisito de rellenar un pequeño formulario.
Un día con los mayores (3)
Se podría decir que, al iniciar esta tercera parte de la serie, en la que vamos a razonar sobre el framework de los cursos de Ian Marteens, nos introducimos en una de las areas más bonitas del mismo, donde los razonamientos formales y la abstracción se destacan sobre otros aspectos más mecánicos y menos atractivos (visto ésto como desarrolladores). No se si coincidireis o no, pero no existe demasiado "mérito" en hacer la asignación de una propiedad ni resulta algo demasiado creativo, salvo que lo vivamos desde la perspectiva del creador de componentes. Más bien, forma parte del elenco de actividades repetitivas, que hacemos diariamente de forma mecánica. Sin embargo, en este caso, establecer relaciones de herencia y uso entre las entidades, es un ejercicio estimulante y enriquecedor. Marteens inicia su periplo al definir una clase base (TAncestro), en la cuspide de la jerarquía que define el dominio de la aplicación. Y conviene decir esto ya que TAncestro no nace de la nada puesto que hereda el comportamiento de la clase TForm, de la cual desciende. Lo cual, nos permite disponer de toda la funcionalidad de los formularios que vamos a manipular. ¿Y por que es conveniente que sea así? Pues como bien explica en los primeros parrafos del ejercicio 3 de la serie c :
Un día con los mayores (2)
Veamos cual es el siguiente paso... En este segundo capítulo vamos a para dar un paso más en la construcción del framework de Ian, creando la estructura del mismo, un esqueleto vacío en el que todavía no vamos a tener en cuenta ni a concretar nada que haga referencia a la lógica real de los datos sino que todavía nos movemos en un nivel abstracto, con acciones que pertenecen al mundo de las ideas como: Guardar, Descartar, Confirmar, etc.
JSon y el vellocino de oro…
Ahhh Perdon... ¡Que esto no tiene nada que ver con los Argonautas! 🙂 Como estos días va a escucharse y leerse esto de "JSon", que es el acrónimo de (JavaScript Object Notation - Notación de Objetos de JavaScript), vamos a colocar el enlace para que sepamos de que va...
Disponibles los videos del último seminario web hispano
Parece que no nos equivocábamos. 🙂 No han pasado ni seis días y ya tenemos disponibles los vídeos del último seminario. Ni falta hace decir que es así como se hace Comunidad. Comunidad con mayúsculas.
Un día con los mayores (1)
De estas últimas semanas, la mayor parte del tiempo se me ha ido en dos puntos que tienen relación con la serie que vamos a compartir. ¡Es verdad!: El tiempo se escapa de nuestras manos. La expresión es fugaz como el tiempo hace justicia y con razón, porque no podemos hacer nada por retenerlo. Nos queda simplemente el consuelo de que haya servido para algo. En fin... Algo es algo. 🙂
Por curiosidad (y Parte III)
Tanto la propiedad Data como Delta se definen como OleVariants, y se organizan internamente como un array de bytes, y es esta característica la que va a dotar de flexibilidad a las dos estructuras, que soportaran por un lado los datos, el contenido real, en el caso de la propiedad Data, y un registro de actualizaciones que representa a la propiedad Delta. Dicho registro, logicamente es de solo lectura, dado que es la unica forma de garantizar que es tan solo manipulable por el propio dataset. Tambien es por esa razón, ya que no nos es permitido modificarlo, es por la que existen metodos que nos permiten limpiar esa cache de datos que contiene los registros de cambios.
Por curiosidad (Parte II)
Seguimos el experimento, intentado satisfacer nuestra curiosidad. 🙂 Vamos a hacer lo siguiente: * En el modulo de datos eliminamos los dos componentes TClientDataSet que contienen los detalles. Es decir, cdsComposicion y cdsComponentes desaparecen. Tambien eliminamos todos los campos persistentes del dataset maestro cdsArticulos Logicamente, una vez hecho esto, los dos componentes TDataSource ligados a los mismos (a cdsComposicion y a cdsComponentes) ahora han perdido las referencias a los dataset y apuntan a nil.
Por curiosidad (Parte I)
Por curiosidad, ya que hablamos de AdoExpres y Datasnap, vamos a perder unos minutos en un par de comentarios que me parecen interesantes y que me hicieron reflexionar varios días de la semana que ha acabado. Como muchos de los comentarios que hemos compartido, han surgido a raiz del trabajo diario. En este caso, concretamente al modificar la ficha de Clientes ya que se consideraba la implementación de un proceso que recalculara las comisiones, que era uno de los detalles de la misma. Aquella pestalla mostraba las comisiones generadas por las compras de dicho cliente y era otro mas de los detalles de la ficha. Veamos... el proceso iba a disparar un procedimiento en la base de datos cuya misión era recalcular las comisiones que se mostraban en la rejilla y, en principio, no iba a retornar un conjunto de datos sino unicamente el exito en la finalización o el codigo del error de existir éste. Esto era problematico en el sentido de que, dado que nuestro conjunto de datos se ubica en la cache local y el procedimiento es disparado en nuestro servidor, los valores visualizados por el usuario podian en determinados casos diferir de los reales tras la ejecución del proceso, y podríamos necesitar invalidar el contenido de aquel dataset para mostrar los nuevos datos.
Cero contra quinientos sesenta ( Anexo)
No iba a escribir esta entrada pero me ha pasado algo similar a lo que me ocurrió con los comentarios sobre JediVCL, donde despues de haber acabado el segundo artículo, sentía que quedaban cosas que comentar y redacté un pequeño anexo con el que dejaba lo que me parecía mas importante zanjado. El resto de funciones se pueden ver sobre la marcha. Es más cuestión del día a día, a medida que te van surgiendo las dudas. Con este tema, siento que pasa algo similar. Hemos compartido dos entradas donde comentabamos como se generaban, y en base a que criterios, las sentencias sql que el proveedor (TDataSetProvider) finalmente "ejecuta" (o manda ejecutar). Bueno. Ya visteis que no él, sino que se apoya en una clase que crea a demanda, que se llama TSQLResolver. Concretamente, y para entrar un poco mas en detalle se iniciaba todo desde la función CreateResolver.
Comentarios recientes