Etiqueta

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').

27 enero 2016

Uso de las funciones strpbrk() y strspn()

Encuentro especialmente útil su uso para comprobar si los valores almacenados en una variable cumplen con un determinado patrón.

El formato de la primera función es strpbrk(cadena1,cadena2), ¿Qué hace?


Devuelve una subcadena de cadena1, desde el punto en que cualquiera de los caracteres de cadena2 sea localizado en cadena1. Si ninguno de los caracteres de cadena2 coincide con los de cadena1, la función nos devolverá una cadena vacía.

Veamos un ejemplo:

Supongamos que disponemos de un campo de entrada en el que sólo deseamos permitir el uso de letras no acentuadas, números y comas, es decir sin caracteres especiales. Un modo de impedirlo sería mediante el método siguiente:

On evKey
    If len(strpbrk(upp(pKey),'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,'))=0&len(pKey)>0
        Quit event handler (Discard event)
    End If


Si pKey contiene (por ejemplo) el caracter #, la función strpbrk() anterior devolvería una cadena vacía, ya que el caracter # no está contenido la cadena: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,

El uso de "Quit event handler (Discard event)" anulará la introducción del caracter #. La comparación "len(pKey)>0" se ha añadido para evitar el uso de "SystemKey events" o dicho de otro modo, la generación de eventos del sistema mediante el teclado.

El formato de la segunda es strspn(cadena1,cadena2), ¿Qué hace?


Devuelve el índice del primer carácter de cadena1, no coincidente con los contenidos en cadena2. Si todos los caracteres son coincidentes, la función devolverá el valor correspondiente al "len(cadena1)+1", es decir la longitud de cadena1 más uno.

Si (por ejemplo) quisiéramos comprobar que todos los caracteres contenidos en una determinada cadena coincidan con los permitidos, podríamos usar lo siguiente:

If strspn(upp(NumeroDeTelefono),'0123456789() -/')>len(NumeroDeTelefono)
    ; Todos los caracteres de variable NumeroDeTelefono
    ; pertenecen o están contenidos en el grupo 0123456789() -/
End If


Suponiendo que NumeroDeTelefono="01\5551234", la función strspn() anterior devolvería '3', ya que el tercer carácter no está entre el grupo de los permitidos, pero si su valor fuera NumeroDeTelefono="01/5551234" la función strspn() devolvería '11', ya que su longitud es '10'.