Etiqueta

15 de julio de 2014

SQL en modo multitarea y multi-hilo (Parte 2 de 8)

Métodos de los objetos “SQL Worker”
Método Descripción
$init() $init(ParamRow). Inicia o restablece un objeto “worker” preparándolo para realizar una tarea.*
$start() Ejecuta una tarea o “worker” como un subproceso (ejecución en segundo plano, tenga en cuenta que el programa continuará su ejecución no se producirá ningún tipo de bloqueo o detención)*
$run() Ejecuta una tarea en modo “único-hilo” (se detienen todos los procesos a la espera de una respuesta). Este método se aporta sólo con la finalidad de que pueda realizar pruebas de ejecución.*
$cancel() Cancela una tarea o “worker”, que está siendo ejecutada como subproceso (en segundo plano).*
$sessionref() $sessionref(ObjectRef). Devuelve la referencia del objeto de sesión, al que pertenece el “worker” en uso.*
$completed() Es ejecutado por el propio “worker”, tras concluirse su ejecución.
$cancelled() Es invocado en el caso de que se produzca la cancelación de un “worker” que se estaba ejecutándose en segundo plano.
*Si es ejecutado con éxito devolverá kTrue o en caso contrario kFalse.


Propiedades de los objetos “SQL Worker”
Propiedad Descripción
$cancelifrunning Si es kFalse (por defecto), se concluirá la ejecución de los “worker” que hayan podido quedar huérfanos. Si es kTrue, se informará sobre su estado.
$waitforcomplete Si es kTrue (por defecto), el “Interface Object” se mantiene a la espera de que el “worker” en ejecución termine, antes de habilitarse para la ejecución de otro. Si es kFalse, el “worker” en ejecución es liberado, permitiéndose la ejecución de otro en su lugar.
$state Devuelve el estado actual del “worker”, el cual podrá ser: kWorkerStateCancelled, kWorkerStateClear, kWorkerStateComplete, kWorkerStateError o kWorkerStateRunning.
$errorcode Contiene el código de error. (Si se produce).
$errortext Contiene el texto del error. (Si se produce).
$threadcount Contiene el número de subprocesos “worker” que están actualmente bajo supervisión del “Thread Timer Object”.  (Control multi-hilo)

14 de julio de 2014

SQL en modo multitarea y multi-hilo (Parte 1 de 8)

Omnis Studio 6 permite el lanzamiento de sentencias SELECT como subprocesos independientes y desligados del hilo principal, hasta que el servidor ha procesado los resultados. Para habilitar esta funcionalidad, los DAM’s posibilitan ahora la creación de “SQL Workers”, denominación otorgada a las instancias creadas con éste propósito mediante el uso de variables objeto (SQL) y disponibles con los nuevos DAM’s para Oracle, ODBC, JDBC, MySQL, PostgreSQL, DB2, Sybase, y SQLite.

Los objetos “SQL Worker” pueden ser (por ejemplo) asignados a los diferentes campos de tipo lista usados en un formulario y que (nótese) serán cargados en modo asíncrono, lo que podría ser usado para conseguir acelerar en gran manera la carga de datos en un formulario, ya que además se hace uso de la característica añadida del multi-hilo (procesamiento en paralelo de sentencia SQL) junto con la capacidad multitarea aportada por los “SQL Workers”.

¿Cómo funciona?

Los objetos “SQL Worker” contienen los siguientes métodos principales:
  • $init()
  • Inicia o restablece un objeto “worker” dejándolo listo para realizar su tarea

  • $start()
  • Ejecuta una tarea o “worker” como un subproceso (ejecución en segundo plano, tenga en cuenta que el programa continuará su ejecución no se producirá ningún tipo de bloqueo o detención)

  • $cancel()
  • Cancela una tarea o “worker”, que está siendo ejecutada como subproceso (en segundo plano)

Esto es sólo una descripción general, por supuesto contamos con una serie de propiedades que nos permiten (por ejemplo) descartar una tarea en ejecución para hacer uso de otra en su lugar, cancelar tareas que se hayan podido convertir en “huérfanas” o simplemente informaros del estado en que se encuentre una determinada tarea o “worker”.

Los objetos “worker” son creados como sub-clases (tipo “SQL Worker”) de una clase objeto Omnis. Después deberemos iniciar el objeto con una sentencia SQL y sus variables vinculadas (bind) que precise. Los datos necesarios para el inicio de una sesión con la base de datos o el nombre del grupo de sesiones (si estamos usando una pila de sesiones) también podrán ser suministrados durante el proceso de iniciación.

Para la instanciación de un subproceso “SQL Worker” se usa el método $start(). Al concluirse su ejecución, se invocará automáticamente al método $completed() o al $cancelled(), al que se pasará el conjunto de resultados o bien la información del error producido.

8 de julio de 2014

jsClient: Cofiguración del wrapper JavaScript

Configuración del wrapper


La estructura del archivo de configuración ha cambiado y ahora se proporciona un formato genérico para todas los dispositivos móviles soportados. El archivo config.xml contiene la dirección URL de la página con el “remote-form” JavaScript y dependiendo de la plataforma, podrá contener un número variable de otros parámetros (esto se  describe en la nota técnica correspondiente). El config.xml está basado en la siguiente estructura:

≤? Xml version="1.0" encoding="UTF-8"≥
≤settings≥
   ≤apptitle≥0≤/apptitle≥
   ≤menuincludesettings≥1≤/menuincludesettings≥
   ≤menuincludeoffline≥1≤/menuincludeoffline≥
   ≤menuincludeabout≥1≤/menuincludeabout≥
   ≤settingsfloatcontrols≥0≤/settingsfloatcontrols≥
   ≤settingsscaleform≥1≤/settingsscaleform≥
   ≤settingsallowhscroll≥0≤/settingsallowhscroll≥
   ≤settingsallowvscroll≥0≤/settingsallowvscroll≥
   ≤settingsmaintainaspectratio≥0≤/settingsmaintainaspectratio≥
   ≤settingsonlinemode≥1≤/settingsonlinemode≥
   ≤serveromnisweburl≥http://172.19.250.25:5911≤/serveromnisweburl≥
   ≤serveronlineformname≥/jschtml/RFonline≤/serveronlineformname≥
   ≤serveromnisserver≥≤/serveromnisserver≥
   ≤serveromnisplugin≥≤/serveromnisplugin≥
   ≤serverofflineformname>rfOffline≤/serverofflineformname≥
   ≤serverappscafname≥mylib≤/serverappscafname≥
   ≤testmodeenabled≥0≤/testmodeenabled≥
   ≤testmodeserverandport≥172.19.250.25:5911≤/testmodeserverandport≥
≤/settings≥

El config.xml contiene las siguientes propiedades estándar:

  • AppTitle
La aplicación mostrará una barra de título en la parte superior.

  • MenuIncludeSettings
La opción de menú “Ajustes” estará disponible en tiempo de ejecución.

  • MenuIncludeOffline
La opción de menú para cambiar al modo “off-line”, estará disponible en tiempo de ejecución.

  • MenuIncludeAbout
La opción de menú “Acerca de” estará disponible en tiempo de ejecución.

  • SettingsFloatControls
Esta propiedad sólo es significativa cuando SettingsScaleForm es "0" (falso). En este caso, el cliente hará uso de la nueva propiedad $screensizefloat presente en cada control de los “remote-forms” jsClient. Al aplicar el tamaño de la pantalla, el cliente hará uso de $screensizefloat para hacer flotar los bordes de los controles, usando para ello las mismas reglas definidas para los $edgefloat (tenga en cuenta que son los valores del componente los que están soportados, sino sólo los valores relacionados con sus bordes). Si el “form” es más ancho o más alto que la pantalla, la flotación se produce sólo si los parámetros SettingsAllowHScroll o SettingsAllowVScroll están en estado falso. El modo en que los controles floten dependerá de la diferencia entre el ancho o la altura de la pantalla actual y el ancho o la altura diseñada en el “remote-form” y siempre según el valor más próximo al de su propiedad $screensize. El valor de $screensizefloat es guardado tras cada ajuste del $screensize del “remote-form”.

  • SettingsScaleForm
Si se ajusta a "1" (true), el cliente escalará el “form” hasta ajustarse al espacio de pantalla disponible. El factor de escala es el ancho de la pantalla o su altura dividido por la anchura o altura del valor más cercano a $screensize. Se usa, el tamaño real de la pantalla, el cual incluyen las áreas reservadas al sistema operativo, tales como la barra de estado.

  • SettingsAllowHScroll y SettingsAllowVScroll
Deberá fijar sus valores a "1" si desea permitir el desplazamiento horizontal o vertical del “form” respectivamente, o "0" en caso contrario.

  • SettingsMaintainAspectRatio
Si se ajusta a "1", el escalado mantiene la relación de aspecto del “form”. Si está activado y en función del estado de SettingsAllowHScroll y SettingsAllowVScroll, será posible reducir el factor de escala en una dirección específica, con el fin de ajustar el “form” y su centrado vertical u horizontal según se requiera.

  • SettingsOnlineMode
La aplicación se iniciará en modo “On-line”.

  • ServerOmnisWebUrl
URL del servidor Omnis o del Servidor Web. Si utiliza un servidor de Omnis debería ser http://:. Si utiliza un servidor web deberá ser la URL raíz de su servidor Web, http://miservidor.com.
  • ServerOnlineFormName
Ruta del “form” en el fichero .htm del ServerOmnisWebUrl. De modo que si usted está testando una aplicación en construcción sobre un servidor de aplicaciones Omnis, será de la forma /jschtml/miform.htm, pero si está utilizando un servidor web, la URL tendrá la forma /omnisapps/miform. (¡Sin añadir la extensión .htm!)
De modo que las propiedades ServerOmnisWebUrl y ServerOnlineFormName son sólo necesarias para “forms” usados en modo “on-line”. El resto de propiedades son sólo para el modo “off-line”.
  • ServerOmnisServer
Servidor Omnis ≤Dirección IP≥:≤Puerto≥.
  • ServerOmnisPlugin
Si se está utilizando un servidor web con plug-in para conectar con Omnis, será la ruta a añadida desde el raíz ServerOmnisWebUrl. Por ejemplo: /cgi-bin/omnisapi.dll

  • ServerOfflineFormName
Nombre del formulario “on-line”. (¡No añada .htm!)
  • ServerAppScafName
Nombre de la aplicación SCAF. Será el mismo nombre que tiene la librería.
  • TestModeEnabled
Permite activar el modo de pruebas (Pulsando Ctrl-M se permitirá testar el “form” sobre el dispositivo remoto)
  • TestModeServerAndPort
Dirección ≤ipaddress≥:≤puerto≥, si se desea hacer uso del modo test mediante Omnis Studio Developer.
También es posible modificar estos parámetros pulsando el botón de menú en el dispositivo móvil y activando las opciones de cambio. La aplicación recuerda el último ajuste realizado a través del menú, por lo que la configuración suministrada mediante el fichero config.xml sólo servirá para suministrar los valores iniciales del wrapper.