| Artículos | 01 ABR 1999

Ampliar FileMaker Pro

Compartir

Faustino Forcén.

Por Faustino Forcén (forcen@mail.ddnet.es)

Dado que en la plataforma Macintosh se encuentra una de las mejores herramientas para desarrollo de soluciones para pequeñas y medianas empresas, usuarios individuales o grandes corporaciones (FileMaker), es extraño que no existan más soluciones basadas en dicha herramienta.

Y sabiendo que la razón es, en primer lugar, el desconocimiento de la potencia de dicha herramienta y, en segundo, que "hay muchas cosas que no puede hacer" vamos a hablar aquí de algo que soluciona en parte la segunda razón. Vamos a ver cómo podemos enseñar (como dicen los americanos) trucos nuevos a un perro viejo, o dicho de otra manera, cómo podemos ampliar la funcionalidad de FileMaker Pro.

 

FileMaker Pro 4.0 Developer Edition

Con este curioso nombre, Claris lanzó en su momento una serie de utilidades que permitían generar soluciones cerradas con FileMaker Pro, tanto para Mac como para Windows, de manera que los desarrolladores podían distribuirlas sin necesidad de incluir una copia de FileMaker. El proceso es similar al que usan todos los sistemas que "compilan" una aplicación generada con una base de datos: el archivo de FileMaker se une a una versión reducida del propio FileMaker Pro (no permite crear campos ni formatos, editar formatos, etc.). Y ya tenemos una aplicación sobre la que se puede hacer doble-clic y que se puede distribuir libremente (aunque en la versión 3 era necesario pagar unos royalties a Claris por distribuir el "runtime", la versión reducida).

Con la versión 4, Claris, ahora FileMaker Inc, dio dos pasos adelante y un paso atrás. El paso atrás consistió en eliminar el soporte de red de la versión runtime, de manera que, mientras que antes se podía tener una aplicación compilada que usaba los datos almacenados en el servidor de la empresa o en otro ordenador, ahora los datos tienen que ser, por fuerza, locales. Los dos pasos adelante fueron, respectivamente, eliminar el pago de royalties y permitir a los desarrolladores añadir nuevas funciones a las ya existentes en FileMaker Pro (FMPro en adelante). Mediante un sencillo mecanismo incorporado en FMPro versión 4.0 y posteriores, es posible que un desarrollador genere una extensión o plugin que contenga una o más Funciones Externas, que puedan ser llamadas desde dentro de un guión de FMPro o utilizadas en un campo calculado.

Confesiones de un programador

El kit de desarrollo de Funciones Externas de FileMaker Pro es, a primera vista, decepcionante. Para un usuario, a quien la vida y los fabricantes han acostumbrado a esperar acceso a estructuras más o menos opacas, funciones que alteran el aspecto, tamaño, color y sabor de los datos manejados por la aplicación, (o incluso, como hacía Quark en los tiempos del THINK C, acceso a los símbolos de la aplicación para poder depurar las XTensions) se enfrenta a la escasez de medios o, más bien, limitación de accesos que impone FileMaker al desarrollador, con el corazón valiente, pero una cierta desilusión.

La documentación del citado kit parece más bien una nota técnica, tanto por extensión como por contenido. Y es que no da más de sí. FileMaker Inc. únicamente ha definido un mecanismo para hacer llamadas externas pero que no permite acceder ni a la interfaz ni a los datos de FileMaker Pro. El objetivo original, para el cual el sistema es más que suficiente, es extender el juego de funciones incorporadas en el producto mediante funciones externas que manipulan números y textos. Pero, y siempre hay un pero, todos queremos más. Lo que el SDK no proporciona lo suministra la maña, el ingenio y la combinación de técnicas o, como dicen los artistas, técnica mixta.

Qué es un plugin

O mejor, qué se puede hacer con un plugin de FileMaker Pro. Podemos realizar llamadas a la Toolbox, acceder a archivos externos, mostrar nuestros propios diálogos, incluso acceder al espacio de memoria de FMPro usando una serie de funciones proporcionadas por el kit, que nos permitirán manejar memoria sin miedo a destrozar los datos de nuestro principal cliente. Y permite, gracias al tipo de fragmento de código que se genera, mantener variables globales. Todo esto, para el observador avezado, es una buena base sobre la que trabajar.

¿Qué no permite? Un plugin no permite acceso directo al FileMaker, ni a sus datos ni a su interfaz. Una Función Externa no puede acceder directamente al contenido de un campo, aparte del texto en bruto si se pasa como parámetro del plugin. Pero un guión de ScriptMaker sí que puede. Los plugin que manipulan el contenido de los campos se aprovechan de las funciones que Copian y Pegan campos a memoria, para coger los datos que necesitan directamente de la memoria del ordenador, manipularlos y devolverlos a memoria, como resultado o a disco, según lo que haga la función. En este guión de ScriptMaker se ve la ya mencionada técnica mixta en funcionamiento:

  Copiar["Campo"]
  Establecer Campo["gError" ;"External¬
("FFT-Styler-SetColor";"003300|10|15")"]
  If[gError = "0"]
    Pegar["Campo"]
  End If

Teoría de funcionamiento

FMPro, además de proporcionar una docena de funciones para gestión de memoria, versiones de las funciones del Memory Manager que se pueden usar con seguridad, proporciona un mecanismo estándar por el cual un guión de ScriptMaker o un campo calculado de FMP puede invocar a una función externa (el nombre oficial de los plugins).

FMPro llamará a nuestro código en cinco ocasiones distintas (para cada una de las cuales incorporaremos la correspondiente función): al activar y desactivar el plugin, cuando arranca o se detiene FMPro o cuando el usuario activa o desactiva nuestro plugin usando el panel de preferencias. También nos enviará un mensaje cuando el usuario pulse el botón de ¿Configurar? en el citado panel de preferencias.

Por último, nuestro plugin puede ser invocado en otras dos ocasiones: cuando no se esté realizando ninguna actividad, y cuando la función es llamada específicamente por el usuario. Estas son las declaraciones de las funciones que tendríamos que incluir si nuestro plugin necesitase todos estos mecanismos.

static long Do_Init(short version);
static void Do_Shutdown(void);
static void Do_Idle(FChar unsafeCalls);
static void Do_External(long functionId, FHandle¬ parameter, FHandle result);
static void Do_AppPrefs(void);

El plugin más sencillo (uno o más procesos con los datos que se pasen, sin necesidad de establecer estructuras de memoria propias, sin preferencias) sólo necesitará incorporar dos de estas funciones, Do_Init() para asegurarnos de que la versión de FileMaker soporta plugins (de la 4 en adelante) y Do_External(), donde realmente está el código del plugin.

Do_External(), la función

En realidad, el meollo de nuestro plugin no estará en esta función, ya que esta se suele utilizar como un mero distribuidor,

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información