FileMaker es una herramienta de bases de datos que funciona tanto en Windows como en OS X. Es denominada con frecuencia como el Access de macOS. Y al igual que ocurre en gran medida con Access, FileMaker tiene su propio motor de base de datos, diseñador de formularios y también lenguaje de scripts.
Migración
Migrar desde una aplicación de FileMaker es por lo general un proceso de tres pasos, en los que es preciso migrar la base de datos propiamente dicha, los formularios utilizados para manipular los datos y también el código correspondiente a los scripts.
Base de Datos
Cuando se migra una aplicación de FileMaker, es preciso considerar en primer lugar la base de datos propiamente dicha. Aunque puedes conectar con una base de datos de FileMaker utilizando ODBC, tendrás que obtener los controladores apropiados. Como alternativa, puedes migrar tus datos a SQLite (una base de datos rápida y multiplataforma), para lo cual deberás de convertir los datos de FileMaker en primer lugar a XML.
También puedes conectar a una base de datos de FileMaker utilizando la característica Publicación de Web Personalizada (Custom Web Publishing, en inglés) y una API.
Formularios
Es más que probable que los formularios de la solución FileMaker se utilicen para editar los datos en las tablas. Puedes crear dichos formularios como Ventanas (o bien Páginas Web o Vistas de iOS) en tu aplicación Xojo. En la mayoría de los casos utilizaras controles Label, TextField y TextArea para recrear dichos campos de formularios, pero también tendrás a tu disposición una buena cantidad de otros controles adicionales.
En cualquier caso, probablemente quieras que tu aplicación se conecte a la base de datos durante el arranque, rellenando el formulario con el primer registro. También puedes añadir botones Siguiente y Anterior para recuperar y mostrar la información correspondiente desde la base de datos.
Código de script
FileMaker se programa utilizando un lenguaje de scripts que es, en cierto modo, similar al lenguaje de programación Xojo.
Tendrás que volver a escribir tu código, pero al mismo tiempo encontrarás que el lenguaje de programación Xojo te resultará familiar.
Estos son algunos de los comandos de FileMaker y sus equivalentes Xojo:
Comando FileMaker | Comando Xojo |
---|---|
Exit Script | Return |
Set Error Capture | Try…Catch…End Try |
Set Variable | Dim |
If…End If | If…Then…Else…End if |
Loop…End Loop | Loop…Until |
Go to Field | TextField.SetFocus |
Field assignment | TextField.Text = “value” |
FileMaker Library (Xojo.FM)
Para facilitar aun más la transición a los desarrolladores desde FileMaker a Xojo, existe una librería de código abierto en GitHub que implementa muchas de las funciones de FileMaker, de modo que puedan usarse por su nombre en Xojo.
Para utilizar dicha librería, descárgala desde GitHub y abre el proyecto. En el Navegador, selecciona el módulo FM y cópialo. A continuación, cambia a tu proyecto y pega el módulo.
Puedes utilizar cualquiera de estas funciones en el módulo empleando el prefijo FM.
Comandos FileMaker… a comandos Xojo
Esta sección destaca las funciones de FileMaker que tienen un comando o función equivalente disponibles de serie en Xojo. Si no hay una función equivalente, se indica la función disponible en Xojo.FM.
Funciones Agregadas
FileMaker | Xojo | Xojo.FM |
---|---|---|
Average | n/d | FM.Average |
Min | n/d | FM.Min |
Max | n/d | FM.Max |
Sum | n/d | FM.Sum |
Funciones Container
FileMaker | Xojo | Xojo.FM |
---|---|---|
Base64Decode | DecodeBase64 | FM.Base64Decode |
Base64Encode | EncodeBase64 | FM.Base64Encode |
Funciones de Fecha
Fecha, Día, Dïa de la semana, Día del año, mes, año
FileMaker | Xojo | Xojo.FM |
---|---|---|
Date | Xojo.Core.Date | FM.Date |
Day | Xojo.Core.Date.Day | FM.Day |
DayName | n/d | FM.DayName |
DayOfWeek | Xojo.Core.Date.DayOfWeek | FM.DayOfWeek |
DayOfYear | Xojo.Core.Date.DayOfYear | FM.DayOfYear |
Month | Xojo.Core.Date.Month | FM.Month |
MonthName | n/d | FM.MonthName |
WeekOfYear | n/d | FM.WeekOfYear |
Year | Xojo.Core.Date.Year | FM.Year |
Funciones de Finanzas
FV, NPV, PMT, PV
Funciones Get
FileMaker | Xojo | Xojo.FM |
---|---|---|
Get(ApplicationVersion) | XojoVersionString | FM.Get.ApplicationVersion |
Get(CurrentDate) | Xojo.Core.Date.Now | FM.Get.CurrentDate |
Get(CurrentTime) | Xojo.Core.Date.Now | FM.Get.CurrentTime |
Get(CurrentTimestamp) | Xojo.Core.Date.Now | FM.Get.CurrentTimestamp |
Get(DesktopPath) | SpecialFolder.Desktop | FM.Get.DesktopPath |
Get(Device) | n/a | FM.Get.Device |
Get(DocumentsPath) | SpecialFolder.Documents | FM.Get.DocumentsPath |
Get(DocumentsPathListing) | n/a | FM.Get.DocumentsPathListing |
Get(PreferencesPath) | n/a | FM.Get.PreferencesPath |
Get(ScreenHeight) | Screen(0).Height | FM.Get.ScreenHeight |
Get(ScreenScaleFactor) | n/a | FM.Get.ScreenScaleFactor |
Get(ScreenWidth) | Screen(0).Width | FM.Get.ScreenWidth |
Get(SystemDrive) | Volume(0) | FM.Get.SystemDrive |
Get(SystemPlatform) | n/a | FM.Get.SystemPlatform |
Get(SystemVersion) | n/a | FM.Get.SystemVersion |
Get(TemporaryPath) | n/a | FM.Get.TemporaryPath |
Get(UUID) | n/a | n/a |
Get(WindowContentHeight) | Window.Bounds.Height | FM.Get.WindowContentHeight |
Get(WindowContentWidth) | Window.Bounds.Width | FM.Get.WindowContentWidth |
Get(WindowHeight) | Window.Height | FM.Get.WindowHeight |
Get(WindowLeft) | Window.Left | FM.Get.WindowLeft |
Get(WindowTop) | Window.Top | FM.Get.WindowTop |
Get(WindowWidth) | Window.Width | FM.Get.WindowWidth |
Funciones Lógicas
FileMaker | Xojo | Xojo.FM |
---|---|---|
Case | Select…Case | |
Choose | Select…Case | |
Evaluate | FM.Evaluate | |
ExecuteSQL | Database.SQLSelect, Database.SQLExecute | |
If | If…Then, If operator |
Funciones Numéricas
FileMaker | Xojo | Xojo.FM |
|Abs|Math.Abs||
Ceiling | Math.Ceil | FM.Ceiling |
Exp | Math.Exp | |
Floor | Math.Floor | |
Int | CType(value, Integer) | FM.Int |
Ln | Math.Log | FM.Ln |
Mod | Mod | |
Random | Math.RandomInt | FM.Random |
Round | Math.Round | |
Sign | Math.Sign | |
Sqrt | Math.Sqrt | |
Truncate | n/a | FM.Truncate |
Funciones de Texto
FileMaker | Xojo | Xojo.FM |
Char | Text.FromUnicodeCodePoint | FM.Char |
Code | Text.Codepoints | FM.Code |
Exact | Text.Compare | FM.Exact |
Filter | n/a | FM.Filter |
FilterValues | n/a | FM.FilterValues |
GetAsDate | Xojo.Core.Date.FromText | FM.GetAsDate |
GetAsNumber | Integer.FromText, Integer.Parse, Double.FromText, Currency.FromText | FM.GetAsNumber |
GetAsText | Integer.ToText, Double.ToText,Currency.ToText | FM.GetAsText |
GetAsURLEncoded | EncodeURLComponent | FM.GetAsURLEncoded |
GetValue | Arrays | |
Left | Text.Left | FM.Left |
LeftValues | n/d | FM.LeftValues |
LeftWords | n/d | FM.LeftWords |
Length | Text.Length | |
Lower | Text.Lowercase | FM.Lower |
Middle | Text.Mid | FM.Middle |
MiddleValues | n/d | FM.MiddleValues |
MiddleWords | n/d | FM.MiddleWords |
PatternCount | RegEx | |
Position | Text.IndexOf | FM.Position |
Proper | Text.Titlecase | FM.Proper |
Quote | n/d | FM.Quote |
Replace | Text.Replace | FM.Replace |
Right | Text.Right | |
RightValues | n/d | FM.RightValues |
RightWords | n/d | FM.RightWords |
Substitute | Text.ReplaceAll | FM.Substitute |
Trim | Text.Trim | |
TrimAll | n/d | FM.TrimAll |
Upper | Text.Uppercase | FM.Upper |
ValueCount | CountFields | FM.ValueCount |
WordCount | n/d | FM.WordCount |
Funciones de Formato de Texto
FileMaker | Xojo | Xojo.FM |
RGB | Color.RGB | |
TextColor | Cambiar la propiedad TextColor del control. | FM.TextColor |
TextFont | ||
TextSize |
Funciones Horarias
FileMaker | Xojo | Xojo.FM |
Hour | Date.Hour | |
Minute | Date.Minute | |
Seconds | Date.Seconds | |
Time | Date | |
n/d | Ticks | |
n/d | Microseconds |
Funciones de Trigonometría
FileMaker | Xojo | Xojo.FM |
Acos | Math.Acos | |
Asin | Math.Asin | |
Atan | Math.Atan | |
Cos | Math.Cos | |
Degrees | n/d | FM.Degrees |
Pi | n/d | FM.Pi |
Radians | n/d | FM.Radians |
Sin | Math.Sin | |
Tan | Math.Tan |
Miscelánea
FileMaker | Xojo | |
Base64Decode | DecodeBase64 | |
Base64Encode | EncodeBase64 | |
Date | Xojo.Core.Date; esta es una clase | |
Day | Xojo.Core.Date.Day |
Hola Javier,
Antes de poder migrar la base de datos, en mi caso, creo que requiere una modificación de la propia estructura. Normalmente para el ID utilizamos Get(UUID) que nos puede dejar algo parecido a esto “A80BFA3E-EB41-4C57-BC1B-950D87A42DFD”. Habrá que sustituirlo en todas las tablas y relaciones por un Número serial, y esto puede llevarte una mañana o más, depende del tipo de aplicación que tengas hecha..
Por eficiencia tenemos la costumbre de tener datos duplicados, como el nombre del cliente, se tendrán que eliminar de todas las tablas. A parte de campos globales utilizados en relaciones o para mostrar el mismo valor en todas las presentaciones.
En los formularios creo que también se tendrá que utilizar el ListBox, me parece lo más parecido a nuestros portales. En cuanto a la librería de FileMaker, puede ser bastante interesante al principio.
Carles