25 febrero 2016

Nuevas opciones del Device Control en Omnis Studio

La propiedad $action del "Device Control" es utilizada para acceder a las características hardware o servicios en un teléfono móvil, tales como hacer una llamada, pero (como ya sabemos) dicha propiedad sólo estaba disponible cuando la aplicación es ejecutada en modo autónomo o "sin-conexión".

Sin embargo la última versión de Omnis Studio, nos permite utilizar el correo electrónico, las llamadas telefónicas y los mensajes SMS (Email, Call y SMS) a modo de una aplicación que fuese ejecutada sobre un navegador y no bajo el "wrapper" o aplicación instalada, es decir que será el navegador instalado por defecto en el dispositivo quien ejecute la acción correspondiente, en lugar de nuestra aplicación. Dichas acciones se corresponden con las siguientes constantes de la propiedad $action: kJSDeviceActionSendEmail, kJSDeviceActionMakeCall, y kJSDeviceActionSendSms. Naturalmente el resto de acciones ya conocidas deberán seguir siendo ejecutadas desde dentro del "wrapper".

Cuando es el navegador quien ejecuta la acción de enviar un SMS, se enviará un único mensaje y para el número especificado bajo la propiedad $communicationaddress del "Device Control", el texto del mensaje deberá figurar bajo la propiedad $communicationdata. Consulte el manual "Creating Web & Mobile Apps" para obtener más información sobre cómo utilizar "Device Control" en la construcción de aplicaciones para dispositivos móviles.

Por cierto, me estoy planteando la posibilidad de traducir al castellano el manual al que hacemos referencia en el párrafo anterior ;-)

03 febrero 2016

Paso de parámetros por URL a una "Remote Task" (Antes y después de la 6.1)

Desde la versión 6.1 Omnis puede capturar para nosotros los parámetros adicionales incluidos en la URL de llamada a la página web, donde indicamos la carga del "remote form". Éstos parámetros se hacen disponibles directamente desde la variable de parámetro "row" del método $construct, ya conocido por todos nosotros. Su funcionamiento es el siguiente:

Suponiendo la siguiente URL: http://127.0.0.1:5988/jschtml/rfSetCurField.htm?x=y&a=b

La tecnología jsClient agregará los parámetros indicados en una columna adicional de la variable parámetro "row" denominada "URLparams". Los datos de la "URLparams" se encuentran codificados en formato JSON, en nuestro ejemplo, x = y & a = b, la cadena JSON resultante sería: {"x": "y", "a": "b"}. Pero no nos preocupemos, pues podemos hacer uso de la nueva función "OJSON" para convertir esto a formato "row", del siguiente modo:

Do OJSON.$jsontolistorrow(pRow.URLparams) Returns lRow

...donde "lRow" es una variable "row", tendremos que lRow.x='y' y lRow.a='b'.

Pero... y antes de la versión 6.1, ¿Cómo podríamos capturar los parámetros de la URL? ¿Sería posible hacerlo con JavaScrip? Pues la respuesta es, si.

Tan sólo deberemos incluir en la sección "head" de nuestra página web, la siguiente función:

<script>
     function gup( name ){
          var regexS = "[\\?&]"+name+"=([^&#]*)";
          var regex = new RegExp ( regexS );
          var tmpURL = window.location.href;
          var results = regex.exec( tmpURL );
               if( results == null )
                    return"";
               else
                   return results[1];
       }
<script>

Con esta función podemos obtener cualquiera de los parámetros incluidos en la URL, simplemente pasándole en su llamada a al misma, el nombre del parámetro a obtener, por ejemplo:

<script>
     var x=document.getElementById("omnisobject1");
     x.dataset.param1=gup('x');
     x.dataset.param2=gup('a’);
<script>

El ejemplo anterior, pasaría el valor 'y' a la columna "param1" y el valor 'b' a la columna "param2" de la variable parámetro "row", tan sólo deberemos tener en cuanta colocar éste ultimo script, detrás del div donde invocamos al "remote form".

NOTA: Si trabajamos con versiones de Onnis Studio anteriores a la 6, deberemos usar la notación x.attributes.param1.value=gup('x') en lugar de x.dataset.param1=gup('x').