Etiqueta

25 septiembre 2017

Componentes JSON&JS (Parte 5 de 12)

JSON Control Definition


En esta entrada describiremos las diferentes propiedades que pueden ser definidas en el archivo JCD, todas ellas editables mediante el "JSON Control Editor" (recuerde que también pueden ser editadas mediante cualquier otro editor de textos externo).

La nueva carpeta "html/controls", contiene a su vez una subcarpeta por cada control JSON ya definido. Los nombres de estas subcarpetas no son críticos, pero tiene sentido usar el mismo nombre que el usado para el control.

El "JSON Control Editor" creará la carpeta "html/controls" tras construir su primer control, de lo contrario (si está usando un control ya existente) necesitará crear esta carpeta manualmente. (IMPORTANTE: No confundirse con la carpeta "htmlcontrols" la cual contiene los controles definidos para su uso con el objeto oBrowser)

Cada carpeta de control, contendrá un archivo denominado "control.json". Además, podrá contener archivos PNG, con cualquier nombre pero siempre incluyendo los archivos PNG: "16x16", "16x16_2x", "48x48" y "48x48_2x", ya que serán los usados como icono representativo del control, en el "Component Store" y en los formularios remotos. Los archivos PNG deberán tener la extensión ".png".

Un nuevo componente externo denominado "jsControls", (situado sobre la carpeta "jscomp") es el encargado de gestionar todos los controles JSON, éste realiza la carga y validación de cada uno de los controles durante el arranque. Todos los que pasan la validación son mostrados en el "Component Store". Si un control no pasa la validación, "jsControls" abre el registro de seguimiento (log) y agrega un mensaje para indicar que existe un problema con el control. El problema exacto se podrá consultar en un archivo denominado "control_errors.txt" situado sobre propia carpeta del control.

Cada control deberá tener un nombre único y estar indicado dentro del fichero "control.json" (ver más adelante), podrá usarse una convención similar a Java, excepto que Omnis utiliza el carácter de subrayado en lugar del punto, por ejemplo. "net_omnis_control1", ya que el uso de puntos causaría problemas de incompatibilidad con la sintaxis de notación usada en Omnis.

21 septiembre 2017

Nuevo Servidor de Aplicaciones Omnis para Linux

Puedo decir que Omnis expande sus oportunidades de negocio, así como la robustez de su plataforma para el despliegue de aplicaciones en la Web, con la nueva versión "headless" del "Omnis App Server" para Linux, ya que permite la ejecución de aplicaciones web y móviles basadas en su tecnología jsClient bajo el entorno de comandos linux y sin necesidad de interface gráfica alguna, aunque permitiendo su administración remota desde un navegador Web. El denominado servidor "headless" está disponible sólo para Linux.

Todas las opciones del servidor podrán ser controladas remotamente desde la línea de comandos del terminal de la máquina Linux o (como ya hemos comentado) hacer uso de su herramienta "Admin" para la Web, incluida en el directorio "clientserver\server".

Consideraciones


Comandos de consola


Encontraremos un nuevo parámetro boleano en el fichero "config.json" denominado "headlessAcceptConsoleCommands". Puesto a "true" (su valor predeterminado), el servidor dejará disponible para su uso la interfaz de línea de comandos.

Funciones


Cuando el servidor está funcionando en modo línea de comandos, la nueva función "isheadless()" devolverá "true", "sys(231)" devolverá cero y "sys(233)" devolverá una cadena vacía, de otro modo devolvería el título de la ventana situada en primer plano sobre el Servidor Omnis.

Java


En caso de usarse el modo comandos y para iniciar la (Maquina Virtual Java) JVM deberá fijar a "ture" el elemento "startjvm" del fichero "config.json".


Creación de clases desde código Omnis


Si en su código Omnis crea nuevas clases dinámicamente mediante notación, ahora dispone de un mecanismo para crear objetos nuevos mediante plantillas, las cuales deberán estar ubicadas bajo la carpeta "componenttemplates" de "Studio". Las carpetas son...

"componenttemplates/window"
"componenttemplates/remoteform"
"componenttemplates/report"

...éstas contiene respectivamente los archivos de plantilla para la creación de ventanas, formularios remotos e informes. Cada nombre de plantilla deberá tener la forma "complibrary_compcontrol.json", con _ (subrayado) en lugar de espacios: Son copias de los archivos "object.json" con sus propiedades. "complibrary" y "compcontrol" identifican respectivamente un componente y un nombre de control.

Restricciones


Existen varias diferencias o (mejor dicho) restricciones en comparación con el Servidor de Aplicaciones Omnis convencional o de entorno gráfico y son las siguientes:

  • La inclusión de imágenes en un PDF está sólo permitido con PNG's (o a imágenes compartidas "true-color").
  • No está soportado el uso de "port".
  • Deberá usarse la entrada "start" bajo la sección "server" del "config.json" para iniciar el servidor en modo "multi-threaded"
  • El comando "Test if running in background" siempre devolverá "true".
  • Algunos comandos y métodos de notación producirán error si son ejecutados, tales como:  open window $open sobre una clase-ventana, etc.
  • Las funciones de conversión de imágenes no están soportadas: pictconvto, pictconvfrom, pictconvtypes, pictformat pictsize (producirán un error).
  • Los mensajes estándar generados por el servidor ("OK messages" y mensajes de error) se enviarán al archivo de "log" del servidor o bien al Terminal si fuese necesario.

Instalación


Descargue el instalador desde: www.omnis.net/download/

Esta instalación supone que se está ejecutando como "root" o utilizando "sudo".

Actualice su versión de Linux usando los siguientes comandos, según el entorno linux de que disponga:

  • Centos/redhat: sudo yum update
  • Suse: sudo zypper update
  • Ubuntu/debian: sudo apt-get update


Una vez actualizado, tendrá que instalar las dependencias que Omnis requiere para su ejecución y que son las siguientes:

  • Centos/redhat: cups, pango
  • Suse/Debian: Runs out of box
  • Ubuntu: cups, libpango1.0


Una vez instalados, deberá iniciar el instalador del siguiente modo:

./Omnis-Headless-App-Server-8.1-x64.run

Siga los pasos que le mostrará el instalador, tal y como lo haría en una instalación normal de Omnis Studio, asegurándose de que su número de serie sea el correcto, de otro modo, la instalación fallará.

En caso de Centos 7 o Redhat el servicio omnis no se iniciará automáticamente tras un reinicio, necesitará agregar manualmente Omnis a la lista "autostart" del siguiente modo:

sudo /sbin/chkconfig --add homnis
sudo /sbin/chkconfig --list homnis
                (Esta línea es para verificar que se ha agregado correctamente "homnis")
sudo /sbin/chkconfig homnis on

Ahora deberemos configurar el servidor utilizando la herramienta "Admin", tal y como mostramos a continuación y para según que plataforma:

CENTOS7 y REDHAT


Comandos necesarios para que Omnis funcione en Centos:

sudo yum update
sudo yum install cups
sudo yum install pango
sudo /sbin/chkconfig --add homnis
sudo /sbin/chkconfig --list homnis
sudo /sbin/chkconfig homnis on

SUSE


El servidor debe funcionar fuera del "box" de SUSE, pero recomendamos su actualización por si acaso:

sudo zypper update

Ubuntu 16.04, 17.04 y DEBIAN 9


sudo apt-get update
sudo apt-get install unzip
sudo apt-get install libpango1.0
sudo apt-get install cups

Herramienta Web de Administración


Disponemos de una herramienta "Admin" para configurar y mantener el servidor: la herramienta "Admin" se implementa por medio de un "remote-form" ubicado en la carpeta "clientserver\server" y puede ser cargado desde un navegador web, mediante abrir la página web llamada "osadmin.htm". Deberá tener en cuenta que, (para poder abrir esta página) deberá configurar antes en el servidor, el parámetro "data-webserverurl" de la página html mencionada, (URL, dirección IP o nombre y número de puerto, por ejemplo, http://192.1.1.68.5000), además de colocar el archivo html, bajo una ubicación que le permite abrirlo desde un navegador web.


La herramienta Administrador tiene varias pestañas que le permiten ver o configurar el servidor Activity, Logs, Settings y Users. Cuando abre la herramienta por primera vez en su navegador, se le pedirá que inicie la sesión: use el nombre de usuario predeterminado: omnis, contraseña: 0mn1s (el primer carácter es un cero). Una vez iniciada la sesión, podrá cambiar la contraseña predeterminada y crear otros usuarios.

Activity


La pestaña "Activity" le permite ver todas las librerías abiertas en el servidor. Puede utilizar el botón "Refresh" para actualizar la lista.

El botón "Open" le permite abrir una librería sobre el servidor; tenga en cuenta que eso ocasionará la ejecución de su método "construct". Puede hacer clic sobre cualquier librería para cerrarla con el botón "Close"; tenga en cuenta que al cerrar una librería se perderán todos las conexiones de los posibles clientes conectados a ella.

La pestaña "Active Tasks" mostrará todas las instancias "task" actualmente activas o (lo que es lo mismo) todas las conexiones de clientes actuales; mediante seleccionar una "task" o conexión, podrá ver sus detalles. También podremos matar o cerrar una instancia "task" o conexión mediante el botón "Kill Task"; tenga en cuenta que al eliminar una tarea o conexión se perderán las acciones en curso para ese cliente.

Logs


La pestaña "Logs" nos permite ver la siguiente información:

  • Server. Muestra un registro de la actividad del servidor (su ubicación puede indicarse en la pestaña "Settings")
  • Monitor. Muestra un registro de todas las conexiones de cliente activas (instancias "task")
  • Service. Muestra un registro de todos los errores o mensajes generados por el servidor, incluyendo cualquier mensaje de rastreo o información sobre cualquier solicitud "Web Service".


Bajo la pestaña "Service", el botón "Configure" le permite configurar los mensajes que se guardarán en el registro, incluyendo los atributos "folder" de "logToFile", los cuales indican la ruta hacia el lugar donde se encuentran los ficheros de registros en el servidor. Estos ajustes están localizados en el "config.json" del servidor, bajo el miembro "log", del siguiente modo:

"log": {
        "logcomp": "logToFile",
        "datatolog": [
            "restrequestheaders",
            "restrequestcontent",
            "restresponseheaders",
            "restresponsecontent",
            "tracelog",
            "seqnlog",
            "soapfault",
            "soaprequesturi",
            "soaprequest",
            "soapresponse",
            "cors",
            "headlessdebug",
            "headlesserror",
            "headlessmessage",
            "systemevent"
        ],
        "overrideWebServicesLog": true,
        "logToFile": {
            "stdout": true,
            "folder": "logs",
            "rollingcount": 10
},
        "windowssystemdragdrop": true
    }

Settings


Bajo la pestaña "Settings" podremos especificar la ubicación de los ficheros de registro del servidor y del monitor, además del período (temporizador) y el tamaño de los mismos. También podremos configurar el puerto que deberá usar el servidor ("Server Port"), el número de pilas de ejecución ("Server Stacks") y su "Timeslice" (todo quedará guardado en el archivo "config.json"), también podremos reiniciar el servicio desde aquí.

El nombre de servicio predeterminado es "homnis" y es especificado bajo la entrada "server" del archivo "config.json" del siguiente modo:

{
     "server": {
          …
               "service": "homnis"

Users


Bajo la pestaña "Users" podremos tanto modificar usuarios, como crear nuevos. El usuario predeterminado es "omnis" y podremos cambiarlo desde aquí. La selección, de la opción "Re-start Option" permite que un usuario reinicie el servidor.

Nota del autor


Decíamos al principio de éste artículo que "Omnis expande sus oportunidades de negocio" y la razón es que (en mi opinión) el nuevo servidor "headless", resulta en una opción muy apropiada, para poner en marcha un servicio "hosting" para el despliegue de aplicaciones Omnis en la Web, algo que me consta ha sido demandado por los desarrolladores de aplicaciones Omnis Studio.

Aunque aún no he tenido oportunidad de probarlo, parece sencillo el disponer de una o más máquinas virtuales Linux con servicios OAS (Omnis Application Server) instaladas en nuestro Data Center. ¿Que os parece la idea?


18 septiembre 2017

Componentes JSON&JS (Parte 4 de 12)

Uso de componentes JSON&JS ya preparados


Para hacer uso de componentes JSON&JS ya preparados, (es decir los obtenidos de terceros) deberá comenzar por agregar los archivos con extensión ".js" a la carpeta "html/scripts", así como cualesquiera otros archivos CSS y de imagen necesarios para el correcto funcionamiento del control sobre las carpetas correspondientes. También necesitaremos disponer de las propiedades, métodos y eventos del control, contenidas en el fichero JSON de definición y creado mediante el "JSON Control Editor".

Una nota técnica en el sitio web de Omnis describe con detalle el procedimiento a usar, siguiendo como modelo un componente JSON&JS disponible para descargar e instalar libremente:

También necesitará consultar la guía "JavaScript Control Reference" del "JS SDK" y que podrá encontrar aquí:


11 septiembre 2017

Gestión de licencias del Servidor de Aplicaciones Omnis versión 8.1 y Web Service

Desde la versión 8.1, las conexiones hacia el Servidor de Aplicaciones Omnis (mediante jsClient) realizadas desde un mismo navegador del cliente, ahora cuentan como un solo uso de licencia para el servidor. Anteriormente se contaba cada conexión como usuarios independientes, lo que incluía el consumo adicional de licencias de servidor.

La tecnología "jsClient" ahora genera automáticamente un UUID de identificación, el cual guardará como una cookie (denominada OMNISCLIENTID) y que se enviará como parámetro con cada conexión. La cookie caducará tras un año, generando entonces un nuevo UUID. Las cookies deben estar habilitadas tanto en el servidor web, como en cualquier cliente que desee conectarse, para que esto funcione.

En cuanto al uso de la extensión "Web Services", mencionar que ya no necesitamos un número de serie para hacer uso de servicios web basados en REST, no obstante recuerde que si hacemos uso del objeto "HTTPClientWorker" para generar un cliente de Servicios Web (WSDL), necesitaremos instalar y configurar Java (no será necesario con los nuevos objetos de OW3 CURL).

Componentes JSON&JS (Parte 3 de 12)

Propiedades


Para establecer las propiedades del control, disponemos de los apartados siguientes:

  • Flags
Permiten indicar que eventos estarán o no habilitados, si el control tendrá fondo transparente, si se permite la capacidad de arrastrar-soltar y otros por el estilo.

  • Standard properties
Tabla de propiedades estándar soportadas por el control además de las básicas, tales como su nombre.

  • Properties
Permite la definición de un objeto con las propiedades específicas del control; La columna nombre, (name) determina cada uno de los miembros del "object-properties" es el nombre de la propiedad, la cual deberá escribirse sin el símbolo "$". El resto de las columnas determinarán cada aspecto de la propiedad.

  • Multivalue properties
Permite configurar posibles valores (múltiples valores) para las propiedades que así lo requieran.

  • Constants
Permite la definición de un objeto con las constantes que tendremos disponibles para su uso con el control. (Name, Value y Desc) 

  • Events
Permite definir que eventos generará el control (además de los especificados en el grupo "Flags") e incluye eventos estándar como "evClick"; Note que sus nombres incluyen el prefijo "ev" 

  •  Methods
Permite indicar los nombres de los métodos de tipo "client-executed" (ejecución del lado del cliente) proporcionados por el control; El nombre del método deberá incluir el prefijo "$".

  •  Html
Permite indicar cómo deberá generarse el HTML que enviará el control al cliente.

La opción "Save" creará el archivo JSON del control sobre la carpeta "html/controls". La opción "Build" creará el archivo JavaScript correspondiente al control, sobre la carpeta "html/scripts" (localizable sobre el directorio raíz de instalación Omnis). También se le preguntará sobre la idónea inclusión de una referencia al archivo JavaScript del control, en el archivo "jsctempl.htm", lo cual garantizará que el control esté disponible para probarlo con cualquier formulario remoto que pueda contenerlo.

Tras la creación de cualquier control JSON, deberá reiniciarse Omnis, a fin de que esté disponible para su uso. Después del reinicio, el control aparecerá sobre la pestaña "JSON Components" del "Component Store" listo para ser usado. Para su entrega con la aplicación final, deberá colocar los archivos JSON y JavaScript sobre las carpetas correspondientes del servidor Web y verificar que se esté haciendo referencia al mismo, desde la página html, encargada de cargar el formulario remoto.







05 septiembre 2017

Indicador de carga personalizado (comando "showloadingoverlay")

Desde la versión Omnis Studio 8.0.2 en adelante es posible agregar un indicador de carga (imagen animada) sobre un determinado componente o bien cubriendo el entero formulario remoto, ésto es posible gracias a un nuevo "clientcommand", denominado "showloadingoverlay".

Esto es realmente útil, pues nos permite mostrar al usuario un indicador de que se está la espera de la conclusión de un proceso largo, hasta que la información deseada aparezca actualizada para ese componente o formulario, al mismo tiempo que se evita posibles acciones del usuario sobre los elementos mostrados en el mismo. Resultará especialmente útil si están realizando operaciones asíncronas, como cargar una lista con valores desde un acceso SQL. Cómo ya sabemos, los llamados comandos-cliente, tales como "showloadingoverlay", deben ser ejecutados mediante el método "$clientcommand", del siguiente modo:

Do $cinst.$clientcommand("showloadingoverlay",rowvariable)

Donde "rowvariable" es "row(show,controlName,message,cssClass)".

  • show
Valor booleano "kTrue" indica que deberá mostrarse, "kFalse" para ocultarlo.

  • controlName
Es el la propiedad "$nombre" del componente en el formulario, sobre el que se deberá mostrar o eliminar el indicador. Dejar éste parámetro vacío, causará que el indicador se muestre sobre el entero formulario. 

  • message
(Opcional) Texto para mostrar junto con el indicador.

  • cssClass
(Opcional) Clase CSS para aplicar al indicador. Nos permite personalizar su apariencia.
De forma predeterminada, el indicador oscurecerá lo que haya detrás, mostrando una animación, junto con el texto (opcional) incluido. Si desea personalizar su apariencia, puede hacerlo mediante el uso de CSS. Cree una clase CSS sobre el archivo "user.css" y pase su nombre de clase como parámetro cssClass.

El indicador de carga estará contenido en un "div" de tipo "toplevel", a la que se le asignará el nombre de su clase CSS. Este div tiene como nombre de clase "indicator", la clase CSS tiene el nombre "container", además de un elemento "p" con "message" como nombre de clase . Son los nombres que deberemos usar al aplicar los estilos CSS.

La clase "omnisLoadingOverlay" contenida en el fichero "omnis.css" puede servirnos como base.


04 septiembre 2017

Componentes JSON&JS (Parte 2 de 12)

JSON Control Editor


Un control o componente JSON&JS, es definido mediante un archivo JSON, denominado "JSON Control Definition" (en adelante JCD), el cual podrá ser creado o editado mediante cualquier editor de textos JSON o bien mediante una nueva herramienta disponible desde el menú "Tools>>Add Ons", denominada "JSON Control Editor".


El "JSON Control Editor" muestra una plantilla con todas las propiedades necesarias para crear un JCD básico. El editor nos permite fijar las propiedades del control bajo cada pestaña, para finalizar haciendo clic sobre la opción "Save", la opción "Build" nos permitirá llevar a cabo la creación del control así definido, la opción "Reset" permite eliminar los cambios realizados sobre la plantilla predeterminada, haciendo posible comenzar de nuevo. Antes de configurar las propiedades y los métodos de nuestro control, necesitaremos conocer sus definiciones, cosa que iremos desgranando en sucesivas entregas de éste blog.

Control Name


El nombre del control debe ser único, por lo que la primera cosa será cambiar su nombre (o simplemente aceptar el nombre predeterminado, si es que sólo estamos probando el editor). El nombre de control predeterminado tiene el prefijo "net.omnis" para mostrar la convención de nomenclatura preferida, la cual deberemos cambiar por el correspondiente a nuestro propio nombre de empresa, por ejemplo: "com.miempresa.micontrol1", o cualquier otra convención de nomenclatura apropiada. Note que utilizamos puntos en el nombre del control, pero Omnis finalmente los sustituirá por caracteres de subrayado, ya que los puntos causan problemas con la sintaxis de notación usada en la programación con Omnis.