¿Utiliza FileMaker las preferencias locales del usuario?

¿Utiliza FileMaker las preferencias locales del usuario? Sí, si quiere. Versión 19.1.2 de FileMaker Pro introdujo dos funciones que le permiten determinar qué preferencias regionales ha especificado el usuario en su dispositivo. En este artículo te muestro cómo usar estas funciones.

En la versión 19.1.2 de FileMaker Pro Claris introdujo dos funciones útiles que le permiten hacer uso de las preferencias que el usuario ha establecido en su computador. Las dos funciones son:

  • Get ( SystemLocaleElements ).
  • Get ( FileLocaleElements ).

La función Get (SystemLocaleElements) devuelve un objeto JSON que enumera las preferencias que el usuario ha guardado en su computador: la configuración regional del sistema. La función Get (FileLocaleElements ) devuelve un objeto JSON que enumera las preferencias del computador en el que se creó el archivo: la configuración regional del archivo. Usando estas dos funciones, puede asegurarse de que la respuesta a nuestra pregunta original – ¿utiliza FileMaker las preferencias locales del usuario? – la respuesta es sí, incluso más que antes.

Déjame mostrarte cómo, pero antes de hacerlo, te recomiendo que visite la página de ayuda de Claris para Get ( SystemLocaleElements ) y/o la página de ayuda de Claris para Get ( FileLocaleElements ) para ver un ejemplo de los datos contenidos en el objeto JSON devuelto por las dos funciones. Y si no estás familiarizado con JSON, consulta esta página de ayuda de Claris para obtener una explicación de JSON y FileMaker Pro.

El objeto JSON devuelto por cualquiera de las funciones incluye:

  • El idioma utilizado.
  • El formato de los números: por ejemplo, el separador utilizado para decimales y miles.
  • El símbolo de moneda predeterminado (por ejemplo, ‘$’ o ‘£’ o ‘€’) y si se coloca antes o después del número.
  • El formato de las fechas cortas y largas: por ejemplo, el separador utilizado, si los días y los meses tienen un cero anterior y los nombres de los meses.
  • El formato de los tiempos: por ejemplo, el separador utilizado, si los números de un solo dígito tienen un cero anterior y si se utiliza un reloj de 12 o 24 horas.

¿Por qué es Útil?

Puede que estés pensando que los campos de número, fecha y hora ya se pueden formatear utilizando el panel de datos del Inspector cuando estás en Modo Presentación.

Captura de pantalla del formato de datos en inspector de FileMaker.

Formato de datos en inspector de FileMaker. Captura de pantalla: Anthony Lambert/WISSPA.

Este panel le permite especificar, por ejemplo, que se debe mostrar un campo de fecha utilizando el formato de fecha corto establecido en las preferencias del computador, es decir, la configuración regional del sistema, como se muestra en la captura de pantalla anterior. Entonces, ¿de qué sirven estas dos nuevas funciones Get?

Porque…

Hay casos en los que es posible que desee mostrar un número, una fecha o una hora sin poder utilizar un objeto, como un campo o un bloque de texto, al que se puede aplicar un formato. Por ejemplo, es posible que desee mostrar un cuadro de mensaje personalizado a un usuario que esté editando una factura que indique algo como:

La cantidad pagada en la factura es corta en $3.000,65; ¿quieres volver a comprobar lo que has escrito?

O es posible que desee mostrar un cuadro de mensaje personalizado a un usuario cuando se abra una aplicación personalizada de mantenimiento que indique algo como:

Todavía hay 3 fallos abiertos a partir del 3 de abril de 2022; ¿quieres verlos?

Para dar formato al número en el primer mensaje, podrías codificar el símbolo de moneda, el separador decimal, el número de decimales y el separador de mil. Del mismo modo, en el segundo mensaje podrías codificar el formato de fecha. Si la aplicación personalizada o la base de datos de FileMaker en la que está trabajando solo va a ser utilizada por un grupo de personas que sabe que utilizan la misma configuración regional, este enfoque puede estar bien, además de ser el más simple.

Sin embargo, no es un enfoque fácil de usar. Los usuarios especifican sus opciones en las preferencias de su sistema y codificando los formatos de número, fecha y hora, está ignorando sus opciones. Y si su aplicación personalizada va a ser utilizada por personas de diferentes países, debe tener en cuenta las preferencias locales del usuario.

Extracción de Información Regional

Para extraer información de configuración regional, debes hacer dos cosas:

1. Comprobar qué Configuración Regional se está Utilizando

Comprueba si la aplicación personalizada o base de datos está utilizando la configuración regional del sistema o la configuración regional del archivo. Esto se hace evaluando un valor específico dentro del objeto JSON devuelto por cualquiera de las dos funciones. No importa cuál uses. El objeto JSON contiene una sección que tiene este aspecto:

{
	…
	"Misc" : 
	{
		"Active" : true,
		"Metric" : true
	},
	…
}

La clave “Active” nos dice qué configuración regional se está utilizando: ‘true’ (verdadero) significa que se está utilizando la configuración regional del archivo, ‘false’ (falso) significa que se está utilizando la configuración regional del sistema.

Usar la función JSONGetElement (la página ayuda de Claris) para extraer el valor de la clave “Active”:

JSONGetElement ( Get ( SystemLocaleElements ) ; "Misc.Active" )

El valor será 1 (verdadero) o 0 (falso).

2. Extraer la Información Pertinente

Si el valor de la clave “Activa” es 1, se está utilizando la configuración regional del sistema. Así que usa Get ( SystemLocaleElements ) con la función JSONGetElement, de la misma manera que se usaron en el paso 1, para extraer el valor relevante.

Para ilustrar esto, hay una sección en el objeto JSON que se ocupa del formato numérico:

{
	…
	"Num" : 
	{
		"1000s" : ".",
		"Decimal" : ",",
		"Lead0" : true
	},
	…
}

Para saber cómo mostrar un número al usuario, utiliza este cálculo para determinar cómo separar miles:

JSONGetElement ( Get ( SystemLocaleElements ) ; "Num.1000s" )

Y utilizas este cálculo para determinar cómo separar los decimales:

JSONGetElement ( Get ( SystemLocaleElements ) ; "Num.Decimal" )

Uso de Funciones Personalizadas

Puedes envolver lo que necesites en un grupo de funciones personalizadas para que la lógica se mantenga en un solo lugar. Las funciones personalizadas que utilizo son las siguientes:

Get Locale Elements

La función personalizada GetLocaleElements calcula cuál de las dos funciones de configuración regional usar. La función personalizada es:

/*
#######################################################################
GetLocaleElements
RESULTADO
	(objeto) El objeto JSON devuelto por la función de elementos de locale relevantes.
PARÁMETROS:
	Ningunos.
DEPENDENCIAS
	Función de Get ( FileLocaleElements ).
	https://help.claris.com/es/pro-help/content/get-filelocaleelements.html.
	Función de Get ( SystemLocaleElements ).
	https://help.claris.com/es/pro-help/content/get-systemlocaleelements.html.
NOTAS
	Ningunos.
HISTORIA
	9 de marzo de 2022 | Anthony Lambert de WISSPA | Creado.
ORIGEN
	Ningunos.
#######################################################################
*/

Let ( 
	usa_sistema = JSONGetElement ( Get ( SystemLocaleElements ) ; "Misc.Active" ) 
; 
	If ( usa_sistema ; Get ( SystemLocaleElements ) ; Get ( FileLocaleElements ) ) 
)

(He incluido toda la función para ilustrar las convenciones de nomenclatura que utilizo. Consulta mi artículo anterior sobre esto para obtener más información.)

Mira la función Let y verás que primero extrae el valor de la clave “Misc.Active” y luego aplica la función LocaleElements correspondiente. El resultado de la función personalizada es el objeto JSON de la función correspondiente.

Locale Number Separator Decimal

Tengo una serie de funciones personalizadas que extraen valores específicos. El función LocaleNumberSeparatorDecimal extrae el carácter que se utilizará como separador decimal en números y contiene este cálculo:

JSONGetElement ( GetLocaleElements ; "Num.Decimal" )

Observa cómo la función JSONGetElement se refiere a mi función personalizada GetLocaleElements.

Locale Number Separator Thousands

La función LocaleNumberSeparatorThousands extrae el carácter que se utilizará como separador de miles en números y contiene este cálculo:

JSONGetElement ( GetLocaleElements ; "Num.1000s" )

Aplicación de estas Funciones

Echemos un vistazo de nuevo a ese cuadro de mensaje personalizado que queríamos mostrar a un usuario cuando editaba una factura que dice algo como:

La cantidad pagada en la factura es corta en $3.000,65; ¿quieres volver a comprobar lo que has escrito?

Es necesario formatear el número ‘$3.000,65’, pero no hay forma de aplicar reglas de formato dentro de la ventana de cálculo del cuadro de mensaje personalizado de FileMaker Pro. Utilizo una función personalizada que está disponible en un sitio web llamado FileMaker Custom Functions (inglés), un recurso fantástico alojado por Brian Dunning. La función personalizada se llama, de forma algo poco elegante:

cf_num2txtSdStUO ( num ; precise ; sepDec ; sepThsd ; unit ; order)

En el sitio web de Brian Dunning, esta función personalizada se puede encontrar aquí. Los parámetros son:

  • num – el número al que quieres formatear, por ejemplo 3000,65.
  • precise – el número de dígitos que deben seguir al separador decimal, por ejemplo 2.
  • sepDec – el carácter que se utilizará como separador decimal, por ejemplo una coma.
  • sepThsd – el carácter que se utilizará como separador de miles, por ejemplo un punto.
  • unit – la unidad a usar, por ejemplo, ‘$’ en nuestro caso, para una moneda, o ‘kg’ para una masa.
  • order – dónde colocar la unidad: ‘a’ para al principio, o ‘z’ para al final.

En nuestro script que muestra el cuadro de mensaje personalizado, supongamos que hemos resuelto la discrepancia entre el importe de la factura y el importe pagado y hemos puesto esa discrepancia en una variable llamada ‘$discrepancia’. Entonces el cálculo del cuadro de mensaje personalizado tendrá este aspecto:

"La cantidad pagada en la factura es corta en " &
cf_num2txtSdStUO ( 
	// num
	$discrepancia ; 
	// precise
	2 ; 
	// sepDec
	LocaleNumberSeparatorDecimal ; 
	// sepThsd
	LocaleNumberSeparatorThousands ; 
	// unit
	"$" ; 
	// order
	"a" 
) & 
"; ¿quieres volver a comprobar lo que has escrito?"

Por Último

El uso de las preferencias de configuración regional establecidas por el usuario garantiza que una aplicación personalizada o base de datos presente los datos de la manera que el usuario espera. Y las funciones personalizadas proporcionan una forma de mantener la lógica en un solo lugar y aplicar más fácilmente esa lógica en toda la aplicación o base de datos.

Si hay algo que le gustaría que cubriera en estos artículos, o si desea contribuir con un artículo propio, ¡póngase en contacto con nosotros!