Etiqueta

06 marzo 2019

Firmado y localización de aplicaciones (Parte 3 de 3)

En esta última parte de la serie, tan sólo incluir una punte sobre nuestras aplicaciones "serverless" para dispositivos móviles.


Como ya sabemos, cuando creamos aplicaciones que van a trabajar sin necesidad de conexión con un servidor y que serán instaladas en dispositivos tales cómo teléfonos o tabletas, hacemos uso de la propiedad "$serverlessclientstringtable" para especificar qué "string table" a utilizar junto con nuestro "SCAF", en ella indicamos el nombre del fichero ".tsv", que deberá usarse.

Un par de apuntes


Recordamos que podemos hacer referencia desde el modo "execut on client" al "string table" actual, mediante la función "stgettext()", y asignar textos mediante el prefijo "$st". Además, los métodos de ejecución en el servidor también pueden hacer uso de "stgettext()" para localizar textos en el entorno local del cliente, ya sea mediante la configuración regional recibida desde el dispositivo del cliente, o mediante lo indicado en la propiedad "$stringtablelocale". Teniendo esto en cuenta, indicar que, en caso de que no sea posible localizar la columna para el lenguaje indicado, en el "string table", "stgettext ()" va a retornar los valores que encuentre en la segunda columna de la tabla, sin importar en que idioma se encuentren.

Otro apunte (ya explicado en otro artículo de éste blog) tiene que ver en cómo traducir a diferentes idiomas, los mensajes estándar, que Omnis envía al cliente, mencionar que todos ellos están por defecto en idioma inglés, pero que desde la versión 6 de Omnis Studio, se nos proporciona un mecanismo mediante el cual localizar a cualquier idioma dichos mensajes.

En la dirección https://developer.omnis.net/documentation/webdev/index.jsp podemos encontrar un listado de estos mensajes, aunque debemos tener en cuanta que muchos de ellos nunca llegarán a ser mostrados, ya que corresponden más a errores de programación que a fallos del sistema o la comunicación, por lo que no todos, deberán ser traducidos.

Para anular modificar cualquiera de los textos de error predeterminados, si se trata de una aplicación Web, bastara con incluir nuestra propia traducción en la página HTML que contiene el código JavaScript de cliente, pero para el caso que nos ocupa, deberemos colocar los textos en un archivo independiente.

05 marzo 2019

Uso de iconos en Omnis Studio (Parte 1 de 2)

Desde la versión 8.0.1 de Omnis Studio, disponemos de un nuevo procedimiento para la incorporación de iconos a nuestras librerías, denominado "Iconset Studio" y ubicados bajo la carpeta "inconsets", dentro de la cual podremos indicar las sub-carpetas donde localizar los iconos con los que trabajaremos en nuestra librería. Ahora cuando hagamos referencia a un icono para su uso con cualquier componente (por ejemplo, mediante asignar la propiedad "$iconid" de un componente "button"). Nuestra librería lo buscará automáticamente en todo el conjunto "Iconset Studio", según la ruta especificada por nosotros mediante la propiedad "$iconset", o en cualquier otra ubicación para iconos. El orden de búsqueda ahora queda establecido del modo siguiente:


  1. En el "Iconset Studio" personalizado para nuestra librería, una sub-carpeta de "inconsets", ruta indicada en su propiedad "$iconid".
  2. En la tabla #ICONS de nuestra librería. (si existe)
  3. En los archivos de datos para iconos, los llamados ".df1", excepto "omnispic" y "userpic", (si existen)
  4. En la sub-carpeta denominada "studio" situada dentro de "inconsets"
  5. En los archivos "Omnispic.df1" y "Userpic.df1".

El cuadro de diálogo "Select Icon", (que se muestra tras hacer clic en "$iconid" desde el "Property Manager") permite seleccionar un icono para nuestro componente, ahora mostrará los ubicados en "studio" y en la carpeta indicada mediante la propiedad "$iconset" de nuestra librería, (si se especifica).

Un apunte que añadir a éste nuevo concepto, es que la carpeta "html/icons" tambien es compatible con el "Iconset Studio", pero se espera que poco a poco, todos los conjuntos de iconos sean ubicados bajo el directorio "/iconsets" localizable bajo el directorio principal de instalación Omnis.

Ahora podremos crear íconos HD desde cualquier software para la edición de imágenes y colocarlas directamente en el directorio Omnis, en la carpeta "inconsets". El icono o los archivos de imagen deben guardarse utilizando el tipo de archivo PNG y colocarse en una subcarpeta de "inconsets". Cada subcarpeta representa lo que se llama un "Iconset Studio", que es una colección de iconos con nombre. El nombre de la sub-carpeta se convierte en el nombre del "Iconset Studio" que luego aparecerá en el cuadro de diálogo de selección de iconos y cuya ruta es especificada bajo la propiedad "$iconset", de nuestra librería. 

Deberemos tener en cuenta que un "Iconset Studio" no puede denominarse igual que uno de nuestros "datafile" de iconos, o mediante alguno de los nombres reservados: "lib", "studio" o "studioide".

Mas adelante publicaré un artículo en este blog, explicando como crear y usar imágenes, teniendo en cuanta los diferentes tamaños (16x16, 32x32, 48x48) y resoluciones para soportar los monitores "retina" (_2x, _15x, etc)

Es posible que queramos utilizar algunos de los iconos actualmente ubicados en los archivos de datos o bien agregar o reemplazar algunos de ellos con versiones de mayor resolución. Para permitirnos exportar los existentes, se dispone de una herramienta en el menú "Tools>>Add Ons", denominada "JS Icon Export", disponible desde el cuadro de diálogo "Web Client Tools" (desplácese hasta el final de la lista "Web Client tools").

La herramienta ‘JS Icon Export’ exportará todos los iconos contenidos del archivo seleccionado y los colocará en una sub-carpeta de "iconsets", aplicando los nombres de archivo correctos. Tenga en cuenta que (tras esto), la propiedad "$iconid" de un control, ahora hará referencia al archivo externo y no a la imagen en el archivo de datos y que Omnis ahora buscará los iconos, según el orden que ya hemos mencionado.

Si el mismo conjunto de iconos es incluido en otra carpeta, (después de que se haya encontrado) se ignoraran las carpetas subsiguientes y se escribirá un error en "iconsetlog.txt", ubicado en la carpeta "Studio".

Si se está usando un servidor omnis web, todos los conjuntos de iconos deberán estar en la carpeta "html/icons" del servidor web.

04 marzo 2019

Uso de iconos en Omnis Studio (Parte 2 de 2)

Importante indicar en primer lugar, que los procedimientos que permite guardar iconos en #ICONS o en archivos (como “Omnispic”) asignándoles un ID ($iconid), por compatibilidad hacia atrás, continúan funcionando, pero ahora sólo resultarán útiles con iconos en 16x16 pixeles. Debemos tener en cuenta, que si nuestras aplicaciones son ejecutadas en una pantalla HD y nuestras librerías aún usan éste tipo de iconos, Omnis intentará localizar un ícono correspondiente en 32x32, de no existir se usará la imagen 16x16 pero su apariencia visual resultará muy pobre. Para conseguir que sus antiguos iconos 16x16 se vean bien en alta definición, deberá crear una nueva versión de cada imagen a 32x32 píxeles e importar cada una de ellas al archivo de datos o #ICONS, bajo la sección 32x32 que encontrará en la misma página de iconos, usando los mismos identificadores o ID, que los usados con la versión 16x16.


Si ha estado ya utilizando iconos en 32x32 o 48x48 píxeles en sus librerías y lo que quiere es que se vean correctamente en pantallas HD, deberá adaptar sus actuales librerías para su uso con el nuevo “Iconsets Studio”, lo cual implica disponer de archivos de imagen separados y ubicados en carpetas, las cuales permiten la inclusión de imágenes para iconos de hasta 96x96 píxeles (es decir, 2 veces el tamaño del icono más grande el de 48x48. Los “iconsets” son compatibles tanto con las clases “remote-form”, como con las habituales clases “window”, pero no podrán usarse con los antiguos plug-in ”’Web Client”, e 'iOS Client’.

Denominación de archivos imagen


Cada archivo de imagen dentro de un conjunto de iconos, deberá seguir la siguiente convención: 

texto_id_tamañoyestado_resolución.png

  • "texto" Es el nombre de la imagen. Aparecerá en el cuadro de diálogo del selector de iconos, mientras asigna el “$iconid” de un objeto.
  • "id" es el ID (valor entero positivo) utilizado como ID del icono. Deberá estar en el rango de 1 a 10.000.000 
  • "tamaño" es el tamaño expresado en píxel CSS de la imagen independiente de su resolución, lo que significa que éste valor no cambiará, para con todas sus diferentes resoluciones. Su valor debe ser expresado en la forma “x”, los valores 16x16, 32x32 y 48x48 deberán existir siempre, ya que corresponden a los tamaños estándar admitidos por Omnis.
  • "resolución" es el factor que identifica su densidad de píxeles, la cual deberá expresarse del modo siguiente:  
    • "_ 2x" para dispositivos HD o pantalla Retina.
    • "_15x" para ciertos dispositivos, como por ejemplo teléfonos con una densidad de píxeles de 1.5x. no será necesario especificar valor alguno para dispositivos con una resolución estándar, o equivalente a _1x

Los archivos (o nombres de carpetas) que no cumplan con las convenciones especificadas serán ignorados.

Ejemplos válidos de nombres de archivo son: 

pencil_1657_16x16.png 
Icono con "estado" normal, de tamaño 16x16, con ID 1657, para dispositivos con resolución estándar
pencil_1657_16x16_2x.png 
Icono con "estado" normal, de tamaño 16x16, con ID 1657, para dispositivos con resolución HD
check_1658_32x32c_2x.png 
Icono con estado “c”, de tamaño 32x32, con ID 1658, para dispositivos con resolución HD (ver más abajo lo que significa su "estado"

Se deberá tener en cuenta que los nombres de los archivos de imagen no distinguen entre mayúsculas y minúsculas y deben ser únicos para con todas la plataformas y sistema de archivos (los nombres repetidos serán ignorados).

Iconos para casillas de verificación


Como caso especial, es posible implementar iconos que permiten diferentes estados, tales como casillas de verificación y botones-radio.

  • "estado" es el estado en que se encuentra el icono (“marcado”, “resaltado” o “normal”) y puede ser uno de los siguientes: (dejarlo en blanco indica su estado “normal”).
    • “c” corresponde a la situación de “marcado” del icono
    • “h” corresponde a la situación de “resaltado” del icono
    • “x” corresponde a la situación de “marcado” y “resaltado” del icono
Si no está seguro de que iconos necesitará crear y cual será su denominación, puede optar por examinar los contenidos en la carpeta “iconsets/studioide”, aquí podrá encontrar archivos de imágenes de diferentes tamaños, tal y como son requeridos para su uso con Omnis Studio. Pero tenga en cuenta que no puede usar los iconos de esta carpeta, sin adquirir antes la licencia adecuada. Use un esquema de nombres similar a éste para con sus propias creaciones.

Imágenes escaladas


No es estrictamente necesario crear una imagen del icono para cada una de las posibles resoluciones, aunque sería recomendable hacerlo si se desea obtener una mejor apariencia. No obstante Omnis puede hacer uso de la imagen que mas se acerque a la resolución deseada, escalando la misma, en éstos casos es mejor forzar a que sea el propio Omnis quien efectúese el escalado en lugar de hacerlo nosotros mismos. En estos casos, lo mejor será proporcionar a Omnis la imagen con la mayor resolución posible, para dejar que Omnis reduzca las imágenes de resolución más baja, pero tenga en cuenta que el escalado puede producir resultados no esperados.

Cuando se produce una conexión (aplicaciones Web), el cliente envía su resolución al servidor de aplicaciones Omnis. Lo cual permite a Omnis hacer uso  del ícono apropiado.

Preguntas frecuentes


¿Cómo hacer uso de Imágenes con tamaños “no estándar”?

Naturalmente podemos disponer de imágenes de tamaño diferente al estándar (16x16, 32x32, 48x48) siempre y cuando incluyamos en su nombre de archivo las especificaciones de tamaño. Por ejemplo, podemos crear una imagen de 100x200 píxeles, nombrándola como "midibujo_1688_100x200.png", su versión en alta resolución (a 200x400 píxeles), tendría como nombre ”midibujo_1688_ 100x200_2x.png”, (esto sería equivalente a una “Icon Page” de Omnis )

¿Cómo agregar “Iconsets” al servidor de aplicaciones web?

Cuando se trate de una aplicación que queremos hacer disponible en la Web, necesitaremos copiar todos los “inconsets”utilizados en nuestros formularios desde el directorio “/iconsets” en de nuestra versión “developer” a la carpeta “/icons” situada al mismo nivel que nuestros archivos “.htm” de nuestra aplicación, es decir, en el lugar donde estén ubicados nuestros ficheros “.htm” en el servidor web: cada “iconsets” deberá aparecer como una sub-carpeta de la carpeta “/icons” y deberá contener todos los archivos PNG que precise nuestra aplicación.

¿Cómo configuro mi librería para el uso de “inconsets”?

Las librerías poseen una preferencia denominada “$iconset” ($libs.LIBRERIA.$Prefs) y es aquí donde deberá figurar el nombre del “iconset” que usaremos con nuestra librería, de éste modo Omnis sabrá dónde buscar los identificadores de nuestros iconos. En cada ocasión que trabajemos con esta librería, Omnis buscará los iconos dentro del “iconset” especificado para ella, antes de hacerlo en el resto de posible ubicaciones.

¿Cómo gestiona Omnis los posibles errores al asignar un ID?

Cualquier error causado al configurar el ID de un icono para los objetos, será enviado a un archivo de errores denominado “iconsetlog.txt” ubicado en la carpeta “html”.

¿Puedo hacer uso de imágenes mediante la indicación de una URL?

Al asignar el “$iconid” para un objeto bajo “jsClient”, podemos optar por indicar una URL. Si el valor asignado consiste en una cadena de caracteres que contiene al menos un carácter ”/“, Omnis lo tratará como una URL generada por la función “iconurl”, esto significa que podremos referenciar archivos de iconos alternativos, según las diferentes resoluciones de pantalla de los clientes, Omnis elegirá el icono correcto. En caso de hacerse la asignación mediante programación y siempre que el valor asignado no sea un ID de icono (un entero o un entero + una constante de tamaño), Omnis entenderá que se trata de una URL generada por la función “iconurl” eligiéndose el correspondiente a la resolución del cliente. Las URL’s que necesite podrán ser generadas mediante el uso de la función “iconurl()” en el método “$construct()” del “remote-form” y ser guardadas en una variable de tipo “list” en el ámbito de la instancia, con el fin de usarlas en el código que realice la asignación de imagen a los diferentes objetos.

¿Cómo gestionar dinámicamente la asignación de imágenes, para (por ejemplo) un componente “tree lists”?

Los “Tree control” de jsClient, han sido modificados, de modo que su columna “iconid” ahora es “iconurl”, y su propiedad “$iconurlprefix” ahora resulta redundante, aunque se sigue manteniendo por compatibilidad hacia atras. La columna “iconurl” deberá ser definida como de tipo carácter y rellenarse utilizando una función “iconurl(iconid)”, que devuelve una cadena URL con el nombre del archivo de imagen o bien una lista separada por punto y coma, con los nombres de los archivos en caso de iconos con varias resoluciones. Esto es lo que permite a Omnis elegir el icono correcto según la resolución de pantalla del cliente conectado.