Etiqueta

19 diciembre 2016

Gráficas combinadas con Graph2

Una particularidad del componente Graph2, es la de poder trabajar con capas, lo cual nos permite (por ejemplo) combinar dos o más tipos de gráficas en una misma muestra de datos, tal y como se puede ver a continuación:

 

Sin embargo, la incorporación de sucesivas capas en una misma gráfica, (según se puede desprender tras una rápida lectura del manual para el componente Graph2) parece supeditado al uso del evento evPreLayout, por lo que (al menos en mi caso) se me escapaba el modo de componer éste tipo de gráficas cuando queremos usarlas en informes impresos y no para su representación en pantalla.

Hasta que una lectura más detenida del manual antes citado y en su página 39, me hizo tropezar con el párrafo que cito textualmente a continuación: "When using an object variable based on the Graph2 component you can use the $prelayout() method in the object to add layers"

De esto se desprende que cuando hacemos uso del componente Graph2 en su modo "no-visual", es decir asignado a una variable de tipo objeto, se lleva a cabo la invocación de un posible método $prelayout, desde donde poder añadir capas y cualesquiera otras alteraciones que deseemos sobre la gráfica en composición, como por ejemplo, cambiar el grosor predefinido para la líneas que componen la segunda y tercera capa.

Adjunto una librería que ilustra con detalle lo explicado en éste artículo. No he encontrado mucha información sobre esto en los foros de programación con Omnis Studio, por lo que creo que compartir ésta experiencia con vosotros puede resultar útil. Espero vuestros comentarios al respecto, saludos cordiales.



17 noviembre 2016

Omnis Studio 8 y la localización con jsClient

En ésta entrada nos ocuparemos de mencionar un cambio que se ha producido desde la versión 6.1 de Omnis y la localización a otros idiomas de los mensajes que de forma nativa puede recibir el usuario en su navegador, cuando desarrollamos aplicaciones con jsClient.

En versiones anteriores de Omnis Studio, hemos estado haciendo uso del fichero "Studio.stb", con éste propósito, pero desde la versión 6.1 en adelante ha dejado de ser operativo, en nuestros desarrollos para la Web, decir que para otros entornos todo sigue siendo igual.

Es decir, "Localization" y "StringTables" siguen funcionando como antes, pero para los mensajes que se envían desde de núcleo del cliente JavaScript, se necesita hacer otra cosa, decir que aparece parcialmente documentado en el manual "Omnis_WebDev.pdf", bajo el apartado "Localization for the JavaScript Client" en la página 187, pero desafortunadamente, resulta difícil de entender y la información es incompleta (Omnis Software a prometido corregir esto pronto).

En mi caso tropecé con ésta "falta de información" al tratar de localizar al castellano el mensaje que Omnis muestra sobre el navegador del usuario, cuando el tiempo de conexión a expirado, el mensaje en ingles dice: "You have been disconnected. Refresh or restart application to reconnect"

Centrándonos en la localización para éste texto, mostraremos las dos opciones de que disponemos para resolverlo:

1) Agregar las siguientes líneas al archivo HTM inicial (marcamos en rojo las líneas que ya existen en el fichero:

<!-- The following placeholder is replaced with either a script tag for the remote task string table or nothing when there is no remote task string table -->

jOmnisStrings.en = {"disconnected":"You have been disconnected. Refresh or restart application to reconnect" };
jOmnisStrings.es = {"disconnected":"Ha sido desconectado. Refresque el navegador o vuelva a cargar la aplicación para conectarse de nuevo" };

<title></title>
</head>
Sin embargo, esto puede resultar algo incómodo si son muchas los textos y el número de idiomas a traducir (Existen más de 30 textos de error), por lo que se recomienda hacer lo siguiente:

2) En la carpeta o directorio HTML del raiz de instalación Omnis, crear una nueva carpeta a la que denominaremos "strings" y agregar a ella un archivo denominado "Error_Strings.js" con el siguiente contenido:

jOmnisStrings.en = {"disconnected":"You have been disconnected. Refresh or restart application to reconnect"};
jOmnisStrings.es = {"disconnected":"Ha sido desconectado. Refresque el navegador o vuelva a cargar la aplicación para conectarse de nuevo.(es_es)"};

Ahora necesitaremos modificar el archivo HTML indicado en el punto 1 (o el jsctemp.htm) para que lea como sigue:

<!-- The following placeholder is replaced with either a script tag for the remote task string table or nothing when there is no remote task string table -->
<script type="text/javascript" src="strings/Error_Strings.js"></script>

<title></title>
</head>
Obviamente, tanto la nueva carpeta como el archivo htm modificado deberán ser llevados al Servidor Web.

13 julio 2016

Como convertir caracteres Apple MacRoman a Unicode

Aunque "raras", existen las ocasiones en que vamos a necesitar obtener el correspondiente carácter en formato unicode, partiendo de su codificación no-unicode. En mi caso la razón es que dispongo de una fuente de caracteres Mac OS X para representación de códigos de barras, en formato no-unicode y necesito usarla desde su correspondencia unicode.

Buscando en internet, encontré una tabla con las diferencias que se pueden encontrar entre sus códigos ascii y que extracto a continuación...

...como se puede observar existen diferencias entre la codificación Mac y Unicode, por ejemplo alcaracter ê le corresponde el código 144 (no-unicode) y el 234 en formato unicode.

La manera de obtener dicho carácter en su formato unicode, partiendo de su ascii 144, sería la siguiente...
Do byteset(lBin,0,144)
Do uniconv(kUniTypeNativeCharacters,lBin,kUniTypeCharacter,lChar,kFalse,lErrorText)
...donde lBin es una variable local de tipo binario, mientras que lChar y lErrorText son de tipo carácter. La ejecución de éste código de notación, almacenará en la variable lChar el caracter ê convertido a unicode.