Migrar a Xojo desde FileMaker

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 FileMakerComando Xojo
Exit ScriptReturn
Set Error CaptureTry…Catch…End Try
Set VariableDim
If…End IfIf…Then…Else…End if
Loop…End LoopLoop…Until
Go to FieldTextField.SetFocus
Field assignmentTextField.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

FileMakerXojoXojo.FM
Averagen/dFM.Average
Minn/dFM.Min
Maxn/dFM.Max
Sumn/dFM.Sum

Funciones Container

FileMakerXojoXojo.FM
Base64DecodeDecodeBase64FM.Base64Decode
Base64EncodeEncodeBase64FM.Base64Encode

Funciones de Fecha

Fecha, Día, Dïa de la semana, Día del año, mes, año

FileMakerXojoXojo.FM
DateXojo.Core.DateFM.Date
DayXojo.Core.Date.DayFM.Day
DayNamen/dFM.DayName
DayOfWeekXojo.Core.Date.DayOfWeekFM.DayOfWeek
DayOfYearXojo.Core.Date.DayOfYearFM.DayOfYear
MonthXojo.Core.Date.MonthFM.Month
MonthNamen/dFM.MonthName
WeekOfYearn/dFM.WeekOfYear
YearXojo.Core.Date.YearFM.Year

Funciones de Finanzas

FV, NPV, PMT, PV

Funciones Get

FileMakerXojoXojo.FM
Get(ApplicationVersion)XojoVersionStringFM.Get.ApplicationVersion
Get(CurrentDate)Xojo.Core.Date.NowFM.Get.CurrentDate
Get(CurrentTime)Xojo.Core.Date.NowFM.Get.CurrentTime
Get(CurrentTimestamp)Xojo.Core.Date.NowFM.Get.CurrentTimestamp
Get(DesktopPath)SpecialFolder.DesktopFM.Get.DesktopPath
Get(Device)n/aFM.Get.Device
Get(DocumentsPath)SpecialFolder.DocumentsFM.Get.DocumentsPath
Get(DocumentsPathListing)n/aFM.Get.DocumentsPathListing
Get(PreferencesPath)n/aFM.Get.PreferencesPath
Get(ScreenHeight)Screen(0).HeightFM.Get.ScreenHeight
Get(ScreenScaleFactor)n/aFM.Get.ScreenScaleFactor
Get(ScreenWidth)Screen(0).WidthFM.Get.ScreenWidth
Get(SystemDrive)Volume(0)FM.Get.SystemDrive
Get(SystemPlatform)n/aFM.Get.SystemPlatform
Get(SystemVersion)n/aFM.Get.SystemVersion
Get(TemporaryPath)n/aFM.Get.TemporaryPath
Get(UUID)n/an/a
Get(WindowContentHeight)Window.Bounds.HeightFM.Get.WindowContentHeight
Get(WindowContentWidth)Window.Bounds.WidthFM.Get.WindowContentWidth
Get(WindowHeight)Window.HeightFM.Get.WindowHeight
Get(WindowLeft)Window.LeftFM.Get.WindowLeft
Get(WindowTop)Window.TopFM.Get.WindowTop
Get(WindowWidth)Window.WidthFM.Get.WindowWidth

Funciones Lógicas

FileMakerXojoXojo.FM
CaseSelect…Case
ChooseSelect…Case
EvaluateFM.Evaluate
ExecuteSQLDatabase.SQLSelect, Database.SQLExecute
IfIf…Then, If operator

Funciones Numéricas

FileMakerXojoXojo.FM

|Abs|Math.Abs||

CeilingMath.CeilFM.Ceiling
ExpMath.Exp
FloorMath.Floor
IntCType(value, Integer)FM.Int
LnMath.LogFM.Ln
ModMod
RandomMath.RandomIntFM.Random
RoundMath.Round
SignMath.Sign
SqrtMath.Sqrt
Truncaten/aFM.Truncate

Funciones de Texto

FileMakerXojoXojo.FM
CharText.FromUnicodeCodePointFM.Char
CodeText.CodepointsFM.Code
ExactText.CompareFM.Exact
Filtern/aFM.Filter
FilterValuesn/aFM.FilterValues
GetAsDateXojo.Core.Date.FromTextFM.GetAsDate
GetAsNumberInteger.FromText, Integer.Parse, Double.FromText, Currency.FromTextFM.GetAsNumber
GetAsTextInteger.ToText, Double.ToText,Currency.ToTextFM.GetAsText
GetAsURLEncodedEncodeURLComponentFM.GetAsURLEncoded
GetValueArrays
LeftText.LeftFM.Left
LeftValuesn/dFM.LeftValues
LeftWordsn/dFM.LeftWords
LengthText.Length
LowerText.LowercaseFM.Lower
MiddleText.MidFM.Middle
MiddleValuesn/dFM.MiddleValues
MiddleWordsn/dFM.MiddleWords
PatternCountRegEx
PositionText.IndexOfFM.Position
ProperText.TitlecaseFM.Proper
Quoten/dFM.Quote
ReplaceText.ReplaceFM.Replace
RightText.Right
RightValuesn/dFM.RightValues
RightWordsn/dFM.RightWords
SubstituteText.ReplaceAllFM.Substitute
TrimText.Trim
TrimAlln/dFM.TrimAll
UpperText.UppercaseFM.Upper
ValueCountCountFieldsFM.ValueCount
WordCountn/dFM.WordCount

Funciones de Formato de Texto

FileMakerXojoXojo.FM
RGBColor.RGB
TextColorCambiar la propiedad TextColor del control.FM.TextColor
TextFont
TextSize

Funciones Horarias

FileMakerXojoXojo.FM
HourDate.Hour
MinuteDate.Minute
SecondsDate.Seconds
TimeDate
n/dTicks
n/dMicroseconds

Funciones de Trigonometría

FileMakerXojoXojo.FM
AcosMath.Acos
AsinMath.Asin
AtanMath.Atan
CosMath.Cos
Degreesn/dFM.Degrees
Pin/dFM.Pi
Radiansn/dFM.Radians
SinMath.Sin
TanMath.Tan

Miscelánea

FileMakerXojo
Base64DecodeDecodeBase64
Base64EncodeEncodeBase64
DateXojo.Core.Date; esta es una clase
DayXojo.Core.Date.Day

 

Un comentario en “Migrar a Xojo desde FileMaker

  1. Carles

    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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *