Etiqueta

Mostrando entradas con la etiqueta #AULAOMNIS. Mostrar todas las entradas
Mostrando entradas con la etiqueta #AULAOMNIS. Mostrar todas las entradas

30 de octubre de 2017

Componentes JSON&JS (Parte 10 de 12)

methods   

Es opcional y permite especificar los métodos "client-executed" que proporciona el control. Cada miembro del grupo identifica un método. El nombre de cada uno es el también el nombre del método, incluyendo su prefijo "$". Los elementos válidos para la definición de un método son:
  • id
Es obligatorio, será el número (entero positivo) del método. Debe ser único dentro del contexto del control. Es utilizado internamente por Omnis.
  • desc
Es obligatorio, y deberá consistir en un texto descriptivo del método. 
  • type
Es obligatorio e indica el tipo de dato que retorna el método. ("integer", "boolean", "character" o "list")
  • parameters
Es opcional. Consiste en una matriz que describe los parámetros del método. Cada miembro de la matriz es un parámetro con los siguientes atributos: 
  • name
Es obligatorio y es el nombre del parámetro. Omnis insertará el carácter "p" al comienzo de este nombre.
  • desc
Es obligatorio y deberá consistir en un texto descriptivo del parámetro. 
  • type
Es obligatorio e indica el tipo de datos que admitirá el parámetro. ("integer", "character", "boolean" o "list").
  • altered
Opcional. Deberá ser booleano. (por defecto "false") Si es "true", el parámetro se marcará como no-alterable.  
  • optional 
Opcional. Deberá ser booleano. (por defecto "false"). Si es "true", el parámetro se marcará como opcional. 
 Ejemplo:
"methods": {
   "$mymethod1": { 
      "id": 1,
      "desc": "This is my method", 
      "type": "integer", "parameters": [
   {
      "name": "p1",
      "type": "character", 
      "altered": true,
      "desc": "The parameter p1"
   },
   {
      "name": "p2",
      "type": "integer",
      "desc": "The parameter p2", 
      "optional":true
    }
   ]
  }
}

25 de octubre de 2017

Componentes JSON&JS (Parte 9 de 12)

events  

Es opcional y permite especificar los eventos que generará el control (además de los indicados en el grupo "flags"). Cada miembro del objeto events identifica un evento. El nombre de cada uno es también el nombre del evento, incluyendo su prefijo "ev". Se pueden incluir ciertos eventos estándar, tales como: "evClick", "evDoubleClick", "evTabSelected", "evCellChanges", "evHeaderClick" y "evHeadedListDisplayOrderChanged". Los elementos válidos de cada objeto-evento son:
  • id
No debe especificarse para eventos estándar, pero, para el resto es obligatorio y debe ser un número entero positivo. Este identificador deberá coincidir con el identificador de evento, usado en la construcción del control JavaScript  y ser único dentro del contexto del mismo. 
  • desc
No debe especificarse para eventos estándar, pero, para el resto es obligatorio y deberá consistir en un texto descriptivo del evento. 
  • parameters
Define los parámetros del evento. Consiste es una lista, donde cada línea de la misma, identifica a cada uno de los parámetros, conformando por los siguientes elementos: 
  • name
Es obligatorio y da nombre al parámetro. No deberá incluirse el prefijo "p". (ya que será agregado por Omnis) Tenga en cuenta que si se usara de nuevo el mismo nombre para definir otro parámetro, se tomará sólo su primera definición, ignorándose el resto, incluyendo su tipo y descripción.
  • type
Es obligatorio e indica el tipo de datos que admitirá el parámetro. ("integer", "character", "boolean" o "list").
  • desc
Es obligatorio y deberá consistir en un texto descriptivo del parámetro. 
 Ejemplo:
"events": {
   "evNetOmnisControlOpened": { 
      "id": 1,
      "desc": "The event sent when the control opens", 
      "parameters": [
         {
            "name": "name",
            "type": "character",
            "desc": "The name event parameter"
         },
        {
           "name": "name2",
           "type": "integer",
           "desc": "The second event parameter"
        }
      ]
     },
     "evClick": {
     "parameters": [
        {
           "name": "zname1",
           "type": "character",
           "desc": "The zname1 event parameter"
        },
        {
           "name": "zname2",
           "type": "integer",
           "desc": "The zname2 event parameter"
        },
        {
          "name": "horzcell",
          "type": "character",
          "desc": "the horz cell event parameter"
        }
      ]
   }

16 de octubre de 2017

Componentes JSON&JS (Parte 8 de 12)

multivalueproperties 

El grupo de propiedades multivalor es opcional y permite configurar propiedades que pueden contener múltiples valores. A continuación describimos cada uno de sus miembros:
  • itemlistproperty
Es obligatorio. Cuando un control admite propiedades con varios valores, éstas son guardadas en una lista. Cada fila de la lista contendrá el conjunto de propiedades de la pestaña o columna en particular. Llamaremos a la pestaña o columna "elemento". Esto significa que éstas propiedades mostrarán una lista de tipos, que se ocultará automáticamente sobre el "Property manager". 
  • itemcountproperty
Es obligatorio y debe ser el nombre de una propiedad "integer" definida en el grupo de propiedades, de modo que se podrá especificar el número de elementos en la lista. Se podrá especificar un valor máximo para esta propiedad, a fin de restringir el número de elementos, de lo contrario se limitará a no más de 256. 
  • currentitemproperty
Es obligatorio y debe ser el nombre de una propiedad "integer" definida en el grupo de propiedades. Identifica al elemento actual seleccionado en el "Property Manager", los cambios aplican sólo a propiedades multi-valor. 
  • moveitemproperty
Es obligatorio y debe ser el nombre de una propiedad "integer" definida en el grupo de propiedades. Es utilizado para mover el elemento actual a una nueva posición en la lista de elementos.
  • properties
Es obligatorio. Permite conformar su lista de valores. Cada miembro ("Property Name") deberá corresponder con el nombre de una propiedad de entre el grupo de propiedades principal; El valor para cada miembro conforma la lista de valores para la propiedad. Es importante no cambiar el orden de las columnas una vez se haya comenzado a utilizar el control.
Ejemplo: 
"multivalueproperties": { 
     "currentitemproperty": "curitem",
     "itemlistproperty": "itemlist",
     "moveitemproperty": "move",
     "itemcountproperty": "itemcount", 
     "properties": {
          "mvprop1": 1,
          "mvprop2": 2
         }
      }
}

constants 

Es obligatorio y permite definir las constantes del control. Cada miembro del objeto constantes es en sí mismo un objeto que contiene los miembros que describen cada constante. Su nombre será también el nombre de la constante. Los elementos válidos para definir cada objeto constante son:
  • value
Es el valor de tipo "integer" de la constante y es obligatorio.
  • desc
Descripción de la constante. Un texto obligatorio, utilizado por el IDE como información adicional para la herramienta "catalog". 
  • group
Identifica al grupo en el "catalog" al que pertenece la constante y es opcional. De forma predeterminada, todas las constantes pertenecerán al grupo "RF:jsControls-≤control name≥". Todas las constantes que figuren a continuación de la que contenga un nombre del grupo, se entenderá como pertenecientes a ese grupo, hasta que se especifique un nuevo nombre de grupo (si procede).
Ejemplo: 
"constants": { 
     "kNetOmnisControlHeaderColor": {
         "value": 123,
         "desc": "The description of this constant"
     },
     "kNetOmnisControl1Range1": { 
        "value": 3,
        "desc": "Range constant 1”, 
        “group": “Ranges"
     },
     "kNetOmnisControl1Range2": { 
        "value": 5,
        "desc": "Range constant 2"
     }
}

9 de octubre de 2017

Componentes JSON&JS (Parte 7 de 12)

properties

Éste grupo es obligatorio. Contiene el conjunto de propiedades específicas del control. Cada uno de sus miembros es una propiedad y es en sí mismo un objeto que a su vez contiene los elementos que la describen. El nombre de cada miembro constituye el nombre de la propiedad, sin el prefijo "$".
Los miembros válidos para cada propiedad son los siguientes:

  • id
Es el identificador de la propiedad. Un entero positivo. Es obligatorio y es un campo crítico ya que Omnis usa éste dato para identificar la propiedad. Lo cual significa que no deberá cambiar estos valores de ID una vez que se ha comenzado a hacer uso del control. Id, debe ser único para todas las propiedades del control. Cuando "jsControls" carga el control, validará su unicidad. Normalmente se comenzar a numerar las propiedades desde 1. 

  • desc
Es la descripción de la propiedad. Un texto obligatorio, utilizado por el IDE, por ejemplo, como "tooltip" de la propiedad en el "Property Manager". 

  • tab
Es opcional y es el texto que identifica la ficha a la que pertenece en el "Property Manager". "custom" será la ficha predeterminada, si se omite. De lo contrario, deberá usarse uno de los siguientes valores: "custom", "general", "data", "appearance", "action", "prefs", "text", "pane", "sections", "java" o "column".

  • type
Es obligatorio. Identifica el tipo de la propiedad. Puede ser uno de los básicos (integer, character, boolean o list) o uno específico como (color, dataname, font, icon, pattern, fontstyle, linestyle, multiline, set, o remotemenu). 

  • runtimeonly
Es opcional y booleano, si es "true" indica que la propiedad es "runtime only". Su valor predeterminado si es omitido es "false". 

  • findandreplace
Es opcional y booleano, si es "true" indica que la propiedad puede ser localizada mediante "find and replace". Su valor predeterminado es "false". 

  • extconstant
Es opcional y booleano, si es "true" indica que la propiedad está restringida a un rango de constantes predefinidas para este control. Esto afectará al menú emergente en el "Property Manager". Puede usarse tanto con propiedades de tipo "integer" como con las de tipo "set"; En este último caso, el primer miembro del rango deberá ser una constante con valor cero, para representar al "set" vacío. 

  • intconstant
Es opcional y booleano, si es "true" indica que la propiedad está restringida a un rango de constantes predefinidas desde el núcleo de Omnis. Esto afectará al menú emergente en el "Property Manager". Puede usarse tanto con propiedades de tipo "integer" como con las de tipo "set"; En este último caso, el primer miembro del rango deberá ser una constante con valor cero, para representar al "set" vacío. "extconstant" y "intcontant" no deben ser "true" al mismo tiempo. 

  • constrangestart y constrangeend
Ambos deben existir si "extconstant" o "intconstant" son "true". En el caso de "intconstant", son "idents" (identificadores) de constantes que conformarán el rango de constantes a usar (podrá saber cuales son los "idents" de las constantes de núcleo Omnis, consultando el grupo "$constants" mediante el "Notation inspector"). En el caso de "extconstant", serán los nombres de las constantes definidas para el control; El conjunto estará entre "constrangestart" y "constrangeend" y en el orden en que figuren en el fichero "control.json". Tenga en cuenta que cuando se utiliza con un "set", los valores de las constantes deberán corresponderse con el "bit mask" (máscara) usada para representar el "set". 

  • min  y 
--> max
Son opcionales y solo se aplican cuando el tipo es "integer". Especifican los valores mínimos y máximos de la propiedad. 

  • initial
Es opcional y puede ser utilizado para indicar el valor inicial de la propiedad. Para los tipos "character", deberá ser un texto. Para tipos "integer", deberá ser un número entero. Para tipos "boolean" deberá ser un valor booleano.
Ejemplo:
"properties": { 
     "headercolor": {
          "id": 1, 
          "desc": "The header color of the control", 
          "type": "color",
          "tab": “appearance”,
          "initial": 255
     },
     "headericon": { 
          "id": 2,
          "desc": "The header icon of the control", 
          "popuptype": "icon",
          "tab": "appearance"
     },
     "rangeofexternalconstants": { 
       "id": 3,
       "desc": "Range of external constants", 
       "type": "integer",
       "extconstant": true,
       "constrangestart": "kNetOmnisControl1Range1",
       "constrangeend": "kNetOmnisControl1Range3",
     }
}

2 de octubre de 2017

Componentes JSON&JS (Parte 6 de 12)

JSON Control Object


Cada control posee un archivo JSON denominado "control.json" conteniendo su definición. A continuación describiremos en detalle cada uno de los miembros de este objeto según sus secciones:

name


    El nombre es obligatorio; Determina el nombre del control como componente externo y también el nombre de la clase JavaScript en la forma "ctrl_≤nombre≥", por ejemplo para...
     "name": “net_omnis_control1"
    ...la clase JavaScript sería ctrl_net_omnis_control1. 

     flags


      El grupo "flags" es obligatorio. Permite configurar ciertas características del control. Cada miembro de éste grupo es opcional y si son omitidos su valor por defecto será "false", siendo sus miembros válidos los siguientes:
      • beforeafterevents y beforeevents  (excluyentes mutuamente
      Indica si el control admite el uso de "evAfter" y "evBefore", o sólamente "evBefore", respectivamente. Si ambos son omitidos, indicará que el control no soporta ninguno de éstos eventos (véase "events")
      •  backcolorandalpha
      Indica si el control admite las propiedades "backcolor" y "backalfa". 
      •  noenabled
      Indica si el control puede no tener habilitada la propiedad. 
      •  transparentbackground
      Indica que el control posee fondo transparente y que no hace uso de las propiedades "backcolor" y "backalfa". No puede ser usado con "backcolorandalpha" a "true". 
      •  hasdefaultborder
      Indica si la propiedad "$effect" del control, puede contener el valor "kJSborderDefault". 
      •  hasdisplayformat
      Indica si el control contiene propiedades en formato de fecha y número. 
      •  hasdragevents
      Indica si el control permite eventos de arrastrar y soltar (véase "events"). 
      Ejemplo:
      "flags": {
          "beforeafterevents": true, 
          "backcolorandalpha": true, 
          "noenabled": true, 
          "hasdefaultborder": false, 
          "hasdisplayformat": true, 
          "hasdragevents": true
      }, 

       standardproperties



        El grupo "standardproperties" es opcional. Contiene las propiedades estándar soportadas por el control; La inclusión de cualquiera de sus miembros significa que el control admitirá la propiedad. Se trata de propiedades básicas aplicables a todos los controles.
        Miembros válidos del grupo son: "“dataname", “effect", “bordercolor", “borderradius", “linestyle", “font", "textcolor", "align", “fontstyle", “fontsize", “horzscroll", “vertscroll", "autoscroll" y “dragmode”.
        Ejemplo:
        "standardproperties": [
             "dataname", 
             "effect", 
             "bordercolor", 
             "borderradius", 
             "linestyle",
        ],
          

          25 de septiembre de 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 de septiembre de 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?