Etiqueta

02 julio 2018

Uso del método "$pushdata"

Para dar soporte a las notificaciones "push", disponemos de un nuevo método para instancias "remote form" denominado $pushdata(), con la siguiente sintaxis:

$pushdata(wRow[~&cErrorText])

Usado en conjunción con $clientcommand("openpush";row()). El método provoca una llamada al método $pushed de la instancia "remote form" del cliente, pasando "wRow" como parámetro, su formato debe ser compatible JSON, por lo que solo puede contener tipos:

"character", "boolean", "integer", "number", "date", "list" o "row".

Omnis mantendrá encolados los datos enviados desde cada "remote task", independiente de las llamadas "openpush" que tenga asociadas. Tan pronto como llega una petición "push" de un cliente, Omnis envía los datos a la cola, para que el cliente la procese cuando esté disponible.

Cuando el cliente procesa la respuesta se emite una nueva petición "push", indicándole al servidor que recibió los datos. Esto permite al servidor eliminar de la cola, los elementos de datos ya procesados liberando memoria. La conexión permanece abierta y tan pronto como desde del servidor se ordena la ejecución de "$pushdata", Omnis envía los datos al cliente, puede dar la impresión de que existiese una conexión permanente entre servidor y cliente, pero no es así, sino que simplemente se establece un control de datos enviados y recibidos por los clientes, evitando pérdidas.

La práctica habitual sera que los clientes guarden la información entregada por "$pushdata" en una variable o en subconjunto de variables de ambito instancia, para actualizar su "remote form".

29 enero 2018

Obtener el UUID de la sesión Omnis Studio Web

Entre las muchas cosas que incorporó la versión 8.1 de Omnis Studio para la Web, nos contaba los chico de Omnis, que ahora al establecerse la comunicación desde el cliente con el servidor de aplicaciones web, se genera un UUID de identificación para la sesión, el cual es guardado como una cookie y enviada como parámetro cada vez que se produce un intercambio de datos. La cookie caduca después de un año, tras el cual, se generará un nuevo UUID. Naturalmente las cookies deberán estar habilitadas, tanto en el servidor web, como en los clientes para que esto funcione.



Nada mas leer esto me preguntaba cómo podríamos desde programación Omnis, obtener el UUID asignado y así poder usarlo, para (por ejemplo) guardar y ajustar preferencias relativas a la sesión en uso, la respuesta viene de la mano de javascript, ya sabemos que podemos incluir código javascript, en los métodos de ejecución exclusiva en el cliente, habitualmente usamos el método "$init" en nuestros "remote-form" con éste propósito, a continuación mostramos el código necesario para la obtención del UUID asignado a la sesión:

JavaScript: var getCookie = function (name) {
JavaScript: {    var cookies = document.cookie.split(';');}
JavaScript: {    for (var i = 0 ; i < cookies.length ; ++i) {}
JavaScript: {        var pair = cookies[i].trim().split('=');}
JavaScript: {        if (pair[0] == name) return pair[1];}
JavaScript: {    }}
JavaScript: {    return NULL;}
JavaScript: }
JavaScript: lIDCookie = getCookie("OMNISCLIENTID");
Do method setIDCookie (lIDCookie)
"lIdCookie" es una variable local y "setIDCookie" es el método (de ejecución en el servidor) que recibirá "lIDCookie" como parámetro.



22 enero 2018

Aplicar CSS a las líneas de un pop-menu en Omnis Studio Web

Aún existen esos "tipos raros" que dedican su tiempo libre a investigar como hacer ciertas cosas en programación con Omnis Studio, el reto que me plantee consistía en como conseguir espaciar las líneas que componen un pop-menú en Omnis Studio para la Web, la siguiente imagen describe lo que se pretende conseguir:


Haciendo un poco de investigación, se puede observar que omnis monta una tabla (etiqueta html ≤table≥) a la que asigna un nombre de clase (atributo class) compuesta del siguiente modo: [nombre-del-remoteform]_[id-del-objeto-pop-menu]_clientTable de modo que lo que hice fue incluir un identificador de clase y algunos atributos CSS en el documento "user.css" que Omnis suministra al efecto.

Ejemplo:


.RemoteForm_1001_clientTable {
border-collapse: separate;
border-spacing: 0px 10px;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
}

En el ejemplo, he añadido algo de separación  entre el primero y último elemento del grupo. Les animo a que prueben variantes del código expuesto adaptándolo a sus necesidades.

Otra variante de este CSS podría ser lo siguiente...

.RemoteForm_1001_clientTable td {
     height: 31px; 
}

...esto modificará únicamente las líneas del menú cambian su altura y por tanto también el espacio entre ellas, éste último caso es el que más me gusta y que uso habitualmente para mis menús.

NOTA: Creo que los ingenieros de Omnis se han hecho eco de éste artículo, pues en la versión 8.1.6, ya se incluyen nombres de clases CSS para poder realizar éste tipo de cambios más facilmente, para el caso que nos ocupa, sería cambiar ".RemoteForm_1001_clientTable" por ".omnis-menu-table", de éste modo funcionará para con todos los menús de nuestra aplicación.