24 junio 2015

Las variables de entorno en Omnis Studio

¿Qué son las variables de entorno?


Cuando arranca un proceso en un equipo, éste inicia algunas variables con información sobre su entorno de trabajo. Generalmente se trata de rutas de acceso (como por ejemplo la ruta del programa en ejecución) o de la iniciación de algunas constantes, como el nombre del usuario actual, el nombre del equipo, etc. Dichas variables están (normalmente) accesibles para todos los programas ejecutados en ese mismo entrono de trabajo.

Por supuesto los programas también pueden hacer uso de variables de entorno con información sólo relevante a si mismos. En éstos casos, dichas variables son algo así como los ajustes de preferencias, excepto que no son exclusivos del programa, ya que también son variables globales, (como las preferencias del sistema) aunque su uso está pensado para usuarios individuales y no para todo el equipo.

 

Variables de entorno: Del Sistema y de los Usuarios.


En Windows, disponemos de dos niveles de variables de entorno: Las variables del sistema y las del usuario. Las variables del sistema sólo pueden ser modificadas por un usuario con categoría de administrador. Normalmente no modificaremos éstas variables, ya que, si lo hacemos, será necesario reiniciar el equipo para que el sistema reconozca y use los cambios.

Las variables de usuario, engloban tanto variables definidas por el propio usuario, como las creadas mediante los diferentes programas. Podemos editarlas y utilizar sus nuevos valores sin tener que reiniciar el equipo. El programa desde el cual modificamos una variable de entorno, podrá hacer un uso inmediato del nuevo valor, pero si existen otros programas que quieren hacer uso de esos mismos cambios, deberán ser reiniciados.

 

Diferencias entre plataformas


Dado que, con Omnis Studio podemos escribir aplicaciones multiplataforma, deberemos ser conscientes de las diferencias que se producen entre éstas y sus variables de entorno. Sera absolutamente necesario, que el código escrito para manejar variables de entorno, lo esté del modo esperado para la plataforma en uso, es decir, sobre la que nuestra aplicación esté siendo ejecutada.

Atendiendo a la plataforma Windows, podemos ver (view) (pero no editar) las variables de entorno, mediante la aplicación “System Information”. Accedemos a esta aplicación siguiendo la siguiente ruta desde el menú “inicio” o “Start”: “menu≥Accessories≥System Tools≥System Information”. Podrá ver algo como lo siguiente:


En Windows, las variables de entorno pueden ser gestionadas manualmente, mediante el panel de control del sistema (“System Control Panel”) y su pestaña “Avanzadas” (“Advanced”). Podremos acceder a el, abriendo el directorio de paneles de control, para desde allí ir al panel de control del sistema y seleccionar su pestaña “Avanzadas”, finalmente, tendremos que hacer clic sobre los botones, para ver algo parecido a lo siguiente:


Los usuarios con privilegio de administradores, podrán ver y manipular tanto variables de usuario, como del sistema, mientras que el resto sólo podrán acceder a las de usuario.

Para Mac OS X, las variables de entorno de usuario están registradas en un fichero de tipo “property list” denominado “environment.plist”, localizado en un directorio no-visible denominado “.MacOSX”, ubicado dentro del directorio principal o raíz del usuario. Por defecto, este archivo y su directorio no existen, por lo que deberán ser creados para su uso, pero ha de tener en cuenta, que algunos programas los crean durante su instalación.

Una vez creado, el usuario podrá hacer uso de la aplicación “Property List Editor” (forma parte del conjunto de herramientas para desarrollo Xcode) para editarlo. Debería ver algo similar a los siguiente:


También podremos ver el contenido XML del archivo desde el terminal, escribiendo:

more ~/.MacOSX/environment.plist

En cuanto a las “rutas” o “paths” guardados en las variables de entorno, también (lógicamente) existen diferencias entre plataformas. La mayoría usan rutas de tipo POSIX, que hace uso del carácter barra diagonal (/) para separar los diferentes niveles de directorio. Sin embargo en DOS se hace uso de la barra invertida (\).

 

Valores alternativos


Una variable de entorno puede contener más de un valor. Por ejemplo, una variable que contiene una ruta hacia un archivo, podría contener rutas alternativas para indicar otras posibles ubicaciones. Al ser requerida por un programa, intentará localizar el archivo en la primera ruta indicada, pero si no lo encuentra, hará uso de la ruta alternativa.

Los valores alternativos deberán estar separados entre si, mediante el uso de un carácter delimitador. Aquí nos enfrentamos a otra diferencia entre plataformas. Para las que usan el formato POSIX, el carácter delimitador son los dos puntos (:). En DOS es el punto y coma (;). Por ejemplo y suponiendo una variable de entorno denominada PROGRAMPATH y que va a ser usada para localizar el mismo programa, pero con dos posibles nombres (“miPrograma” y “miOtroPrograma”), su valor podría ser el siguiente:

En Mac OS X: /Applications/miPrograma:/Applications/miOtroPrograma

En Windows: C:\Program Files\miPrograma;C:\Program Files\miOtroPrograma
 

 

¿Cómo usa las variables de entrono Omnis Studio?


El ejemplo más común, es el que tiene que ver con el uso de los componentes Java con Omnis Studio. Omnis Studio necesita saber dónde encontrar las clases Java en cada una de las plataformas, excepto en el caso de Mac OS X. Para ello, consulta las variables de entorno CLASSPATH y OMNIJVM. Podrá obtener más información sobre como configurar y asignar valores a estas variables consulte el Manual de “Programación Omnis” en castellano, a partir de su página 584.

Por defecto, el valor de CLASSPATH apunta al directorio que debería contener las clases de Java no usadas por Omnis Studio, pero, para indicar los directorios que contienen las clases Java que usaremos con nuestras aplicaciones Omnis, disponemos de la variable OMNISCLASSPATH.

Por supuesto, también podemos optar por configurar y utilizar nuestras propias variables de entorno con otros fines. Tal vez para indicar un directorio externo donde alojar archivos de imagen o informes “adhoc”. Por ejemplo, podríamos crear una variable de entorno (llamada CUSTOMPATH o algo similar) su uso se hará de modo similar al de la función sys(). Si no disponemos de herramientas para crear y manipular variables de entorno, podemos crear fácilmente nuestra propia utilidad con Omnis Studio...

 

Funciones para el uso de variables de entorno


Una alternativa a la configuración o ajuste manual de las variables de entorno mediante el Panel de Control (en Windows) o el editor “Property List” (en Mac OS X), podemos optar por hacerlo desde dentro de nuestros programas Omnis. Bajo la pestaña “General” de la ventana “Catalog” de Omnis Studio, encontramos las funciones: listenv(), setenv(), getenv() y putenv().

La función listenv() devuelve una lista con las variables de entorno de usuario, junto con sus correspondientes valores. Tenga en cuenta que no se requieren parámetros para esta función. La lista devuelta, contiene dos columnas denominadas “name” y “value”. Ambas columnas son de tipo carácter. La columna “name” está limitada a 255 caracteres, pero la columna “value” no está limitada. A continuación mostramos lo que típicamente se obtendría bajo la plataforma Mac OS X:



Tenga en cuenta que no todas las variables que se muestran son realmente de utilidad para Omnis Studio. Por ejemplo, con Omnis Studio 4.2, sólo las indicadas en el fichero “odbc.ini” son usadas.

En un entorno Windows, se obtendría algo similar a los siguiente:


Si bien se muestran muchas y diferentes variables, son muy pocas las que podemos utilizar con Omnis Studio, pero eso puede ir cambiando según la versión.

Todo lo que necesitamos saber es el nombre de la variable de entorno que deseamos consultar. Después, podemos usar la función getenv() de modo similar a como usamos la función sys() para recuperar su valor. El nombre de la variable debe ser indicado como parámetro de la función. Por ejemplo, para saber el nombre del usuario actual, usaríamos:

getenv('USERNAME')

Observe que el nombre de la variable de entorno debe ser indicada como una cadena entre comillas, aunque también podría estar contenida en una variable Omnis Studio. Si la variable que solicitamos no existe, la función devolverá un valor vacío.

Pero también puede ser que en algún momento desee modificar el valor de una variable de entorno. La función putenv() permite que lo hagamos. Esta función requiere dos parámetros: el nombre de la variable de entorno cuyo valor queremos modificar y el valor que queremos asignarle. Una ventaja adicional de esta función es que (si no existe) la variable es añadida al conjunto, así que ¡tenga cuidado con la ortografía y el uso de mayúsculas! Por ejemplo, si queremos crear o modificar una nueva variable de entorno denominada “OMNISREPORTPATH” y asignarle el valor “/Users/david/OmnisReports” usaríamos lo siguiente:

putenv('OMNISREPORTPATH','/Users/david/OmnisReports')

Si lo que quisiéramos fuera añadirle una ruta alternativa (cuando sabemos que ya contiene una), podríamos utilizar:

putenv('OMNISREPORTPATH',con(getenv('OMNISREPORTPATH'),':/Users/david/OmnisReports'))

Estos ejemplos son de Mac OS X, pero podrá encontrar con facilidad su equivalente Windows.

 

¿Ha encontrado útil éste artículo?


Recuerde que es necesario configurar manualmente las variables de entorno para utilizar clases Java dentro de nuestras aplicaciones, por lo que podemos utilizar estas nuevas funciones para simplificar el proceso de configuración para nuestros usuarios finales.

Espero con interés sus comentarios al respecto, reciban un saludo.

Como crear una row a partir de una clase "file"

Do miRow.$cols.$sendall(miRow.[$ref.$name].$assign(miClaseFile.[$sendallref.$name]))

17 junio 2015

Creación de códigos de barras en formato “Code 128”

El método que presentamos en éste artículo, requiere del uso de la fuente o tipo de letra “Code 128 Barcode” de IDAutomation. La generación de códigos de barras en formato ”Code 128” permite el uso de números, símbolos, y letras (mayúsculas o minúsculas) en el texto, pero tal flexibilidad hace que todas las fuentes para la generación de códigos de barras “Code 128” requieran un carácter de inicio, el carácter de suma de comprobación, y un carácter de parada, a fin de generar códigos de barras legibles, es decir que puedan ser leídos por cualquier lector con soporte “Code 128”.

Lo que deseamos mostrar en éste artículo, es un ejemplo sobre cómo realizar el cálculo para la composición de dicho código desde Omnis Studio. IDAutomation, dispone de otras fuentes o tipos de letra, más fáciles de usar, como el correspondiente al “Code  39”, que no requiere de sumas de comprobación u otros cálculos.

El código Omnis que mostramos a continuación ha sido escrito para el “Code 128” y la fuente de  IDAutomation de tipo C para Mac.


10 junio 2015

Como programar la impresión de rangos de páginas

Se debe tener en cuenta que (cuando no se especifican rangos de páginas) el administrador de impresión, construye previamente todas las páginas del informe, quedando temporalmente almacenadas en el disco. Sólo entonces son enviadas al dispositivo impresor. De hecho la ejecución del método “$ejectpage” no tiene efecto alguno hasta haber concluido los trabajos previos. Éste comportamiento es ligeramente diferente, cuando no se especifican rangos de páginas, en estos casos, el administrador de impresión expulsará las páginas tan pronto como se completan, excepto si la eyección automática está desactivada.

Algunos dispositivos (según el destino elegido para el informe) no soportan rangos de páginas. De hecho, (aparte de cualquier impresora) sólo los dispositivos de “pantalla” y ”vista previa” soportan actualmente rangos de páginas. Cómo siempre los rangos de páginas puede ser especificadas desde el diálogo de configuración del trabajo de impresión, pero en éste artículo lo que vamos a ver es, cómo hacerlo desde programación.

 

El componente “screen report field”


Éste componente contempla el método “$redirect”, el cual es usado para re-enviar el informe hacia otro dispositivo y la propiedad “$root.$prefs.$pages” puede ser utilizada para especificar el rango de páginas a enviar, a continuación mostramos un ejemplo:

Calculate $cdevice as kDevPrinter
Calculate $prefs.$pages as "20-1"
Do $cobj.$redirect(kFalse)
Calculate $prefs.$pages as ""

 

Rangos posibles


Los rangos de página que pueden ser especificados en “$root.$prefs.$pages” o en “$cinst.$pages”, si queremos que afecte sólo al informe en uso. Son los siguientes:
  • “1,3,5,2,4”
  • Imprimirá las páginas especificadas y en el orden en que se indican.
  • "1-10,30-35"
  • Imprimirá páginas de la 1 a la 10 y después las páginas de la 30 a la 35.
  • "O1-10, E1-10"
  • Imprimirá primero todas las páginas impares que se encuentren entre la 1 y la 10, después todas las páginas en el rango de 1 a 10.
  • "30-1"
  • Imprimirá las páginas de la 1 a la 30, pero en orden inverso.
  • "C"
  • Imprimirá la página en ese momento visible  (obviamente sólo utilizable junto con el método “$redirect” del componente “screen report field”).

Por supuesto podemos realizar cualesquiera combinaciones, basándonos en las reglas anteriores, si una página aparece más de una vez se imprimirá también más de una vez.

03 junio 2015

Uso de ODB en Windows

El manual Omnis sobre ODB (el odb.pdf) explica exhaustivamente el uso de ésta útil herramienta que nos permite construir un servidor de base de datos con nuestros df1, por lo que en éste artículo, sólo mostraré algunos de los últimos cambios introducidos y en concreto para la plataforma Windows. Recordemos que su última versión disponible es la 1.6.5

Uno de éstos cambios es que el ODB para ésta plataforma es ahora una aplicación sólo ejecutable desde la línea de comandos de Windows, habiendo sido eliminada la anterior aplicación denominada ODBService.exe.

Como iniciar ODB en Windows 2000/XP/Vista/7


Una vez actualizado el archivo de configuración con los detalles de los archivos de datos (ver el manual odb.pdf), podremos iniciar el ODB ejecutando el odbridge.exe ubicado en la carpeta ODB.
Abra el símbolo del sistema, (línea de comandos de Windows) sitúese sobre el directorio ODBC y escriba…

odbridge (o odbridge start)

...y pulse retorno.

Si todo ha funcionado como debe, verá lo siguiente:

Executing start...
...see messages.txt for success

Puede ver el contenido del fichero “messages.txt” de la carpeta ODBC para comprobar si el DB se ha iniciado correctamente. Si se ha producido un error este archivo contendrá los detalles del error, o (si todo fue bien) la línea siguiente:

ODB is now listening for requests from your clients

Nota: También es posible iniciar el ODB mediante hacer doble-clic en odbridge.exe mientras esté a la vista en una ventana. En este caso el servidor “data bridge” se iniciará de modo silencioso, pero aún se podrá consultar sobre su resultado en el archivo “messages.txt”.

Como parar el ODB


Para detener el servidor “data bridge”, escriba…

odbridge shutdown

…y pulse retorno.

Si todo ha funcionado como debe, verá lo siguiente:

Executing shutdown...
...see messages.txt for success

Si en el momento del cierre existen usuarios conectados, se producirá un error. En éste caso no es seguro que el ODB haya sido detenido realmente. Deberá asegurarse de que no existan usuarios conectados (es decir, que hayan cerrado sus archivos de datos) antes de volver a intentarlo.

Sin embargo, es posible forzar el apagado del OBD aún cuando existan usuarios conectados. Para ello escriba…

odbridge kill

…y pulse retorno.

Nota: Tenga en cuenta, que con esta acción se corre el riesgo potencial de corrupción del archivos de datos, si coincide que un usuario esté escribiendo en el archivo, durante el cierre.

Como instalar un servicio Windows para lanzar el ODB


Puede instalar el ODB como un servicio Windows, con el fin de que sea iniciado automáticamente junto con el sistema. Para ello, asegúrese primero de que el OBD no este ejecutándose, después, escriba…

odbridge install

…y pulse retorno.

Si todo ha funcionado como debe, verá lo siguiente:

Installing “C:\....\odbridge.exe” as a service
The operation completed successfully.

En caso de producirse un error, en lugar de lo anterior verá el mensaje de error correspondiente. Por defecto, el servicio (denominado “Omnis Data Bridge”) es configurado para iniciarse automáticamente, pero, usted puede modificar dicha configuración desde “Panel de control≥≥Herramientas administrativas≥≥Servicios” si así lo desea.

Como eliminar el servicio Windows


Para detener y eliminar el servicio “Omnis Data Bridge”, escriba…

odbridge remove

…y pulse retorno.

Si todo ha funcionado como debe, verá lo siguiente:

Uninstalling service: odbridge
The operation completed successfully.

En caso de producirse un error, en lugar de lo anterior verá el mensaje de error correspondiente.

Nota: La eliminación del servicio es equivalente a ejecutar el comando “odbridge kill”. Por lo que, (como en el caso anterior) deberá asegurarse de que no existan clientes conectados antes de eliminarlo.