Etiqueta

Mostrando entradas con la etiqueta jsClient. Mostrar todas las entradas
Mostrando entradas con la etiqueta jsClient. Mostrar todas las entradas

19 noviembre 2014

Aplicaciones para iOS (el "wrapper") (Parte 5 de 9)

Añadir iconos y pantallas de transición personalizadas


Las imágenes utilizadas para el proyecto como iconos y pantallas iniciales, se guardan en la carpeta: OmnisJSWrapper/Resources. Deberá sustituirlos (manteniendo sus mismos nombres) por los de su propia versión.

Sus tamaños y usos son los siguientes:

Iconos de Aplicación:


  • Icon.png (57x57) - iPhone/iPod No-retina. 
  • Icon@2x.png (114x114) - iPhone/iPod Retina. 
  • Icon-72.png (72x72) - iPad No-retina. 
  • Icon-72@2x.png (144x144) - iPad Retina.

Iconos de búsqueda y parámetros:


  • Icon-Small.png (29x29) - iPhone/iPod No-retina. 
  • Icon-Small@2x.png (58x58) - iPhone/iPod Retina. 
  • Icon-Small-50.png (50x50) - iPad No-retina. 
  • Icon-Small-50@2x.png (100x100) - iPad Retina.

Pantallas de transición:


  • Default.png (320x480) - iPhone/iPod No-retina. 
  • Default@2x.png (640x960) - iPhone/iPod Retina. 
  • Default-568h@2x.png (640x1136) - iPhone 5. 
  • Default-Portrait.png (768x1004) - iPad No-retina (orientación vertical). 
  • Default-Portrait@2x.png (1536x2008) - iPad Retina (orientación vertical). 
  • Default-Landscape.png (1024x748) - iPad No-retina (orientación horizontal). 
  • Default-Landscape@2x.png (2048x1496) - iPad Retina (orientación horizontal).

Imágenes para el “App Store” e “iTunes”:


  • iTunesArtwork (512x512) – Dispositivos No-retina. 
  • iTunesArtwork@2x (1024x1024) – Dispositivos Retina.

Si desea obtener más información sobre el uso de estas imágenes, consulte la documentación que proporciona Apple al respecto.

Aplicaciones para iOS (el "wrapper") (Parte 4 de 9)

Cambiar el nombre visible de la aplicación (App Name)


Para cambiar el nombre visible de su aplicación:

  • Sitúese sobre la raíz de su proyecto en el “Project Navigator”. 
  • Seleccione uno de los “Targets” y abra su pestaña “Build Settings”. 
  • Localice el “Product Name” de entre la lista de parámetros y modifique su valor.
    Repita éstos pasos para cada uno de los “targets”.


    12 noviembre 2014

    Aplicaciones para iOS (el "wrapper") (Parte 3 de 9)

    Cambiar el identificador (Identifier)


    El “Identifier” identifica a su aplicación y debe ser único entre todas las aplicaciones del dispositivo. Dos aplicaciones con el mismo identificador serían vistas por el dispositivo como si se tratase de la misma aplicación, por lo que este es un paso muy importante. Se recomienda el uso de una sintaxis de nombre de dominio inverso. Por ejemplo: com.miempresa.omnis.miaplicacion.

    • Sitúese sobre la raíz de su proyecto en el “Project Navigator”.
    • Seleccione cualquiera de los “Targets” y abra su pestaña “Summary”.
    • Modifique su “Bundle Identifier” consignado un valor diferente.



    05 noviembre 2014

    Aplicaciones para iOS (el "wrapper") (Parte 2 de 9)

    Editar del fichero “config.xml”


    El fichero "config.xml" contiene la configuración que utilizará su aplicación para conectarse con el servidor Omnis, además de otras opciones que determinarán su comportamiento.

    Localice el fichero "config.xml" situado sobre el directorio raíz del proyecto y modifique sus valores según sea necesario, tal y como se describe a continuación.

    • AppTitle – Mostrará o no, la barra de estado de iOS. 1 para cierto, 0 para falso.
    • SettingsFloatControls - Permite o no, que el “form” pueda cambiar su tamaño/posición, de acuerdo a su propiedad $edgefloat y en relación con la diferencia entre el tamaño de la pantalla del dispositivo y lo consignado en $screensize. 1 para cierto, 0 para falso. Funcionará sólo si el parámetro “SettingsScaleForm” contiene el valor 0.
    • SettingsScaleForm - De ser cierto (1), el “form” será escalado hacia arriba o hacia abajo, hasta ajustarse al tamaño de pantalla del dispositivo del cliente. 1 para cierto, 0 para falso.
    • SettingsAllowHScroll y SettingsAllowVScroll - Si es cierto, se permitirá el desplazamiento horizontal o vertical del “form”. 1 para cierto, 0 para falso.
    • SettingsMaintainAspectRatio - Si el parámetro “SettingsScaleForm” contiene el valor 1, el “form” se escalará de acuerdo a su aspecto original. 1 para cierto, 0 para falso.
    • SettingsOnlineMode - Determina si la aplicación se abrirá en modo “On-line” (1) o en modo “Off-line” (0).
    • TestModeEnabled - Determina si el modo de pruebas (opción Ctrl-M para testar “forms” en dispositivos) estará habilitado para su aplicación. 1 para cierto, 0 para falso.
    • TestModeServerAndPort – Es la ≤direccionip≥:≤puerto≥ usada con la versión Omnis Studio Developer durante el modo de pruebas. 
     
      • ServerOmnisWebUrl - URL del servidor Omnis o servidor Web. En caso de un servidor Omnis su formato debería ser: ≤direccionip≥:≤puerto≥ y si se trata de un servidor web, debería ser la raíz de su servidor Web: http://miservidor.com.
      • ServerOnlineFormName - Ruta hacia el fichero .htm correspondiente al “form” inicial, alojado en el servidor “ServerOmnisWebUrl”. Si se esta desarrollando la aplicación, es decir usando el “Omnis Studio Developer”, su formato será /jschtml/miform. Si se está utilizando un servidor web, será el resto de la URL necesaria para llegar hasta el fichero, por ejemplo, /omnisapps/miform. (¡Sin añadir la extensión .htm
     
      ServerOmnisWebUrl y ServerOnlineFormName, sólo son necesarios si se usarán “forms” en modo “On-line”. El resto de parámetros “Server...” se necesitarán si la aplicación también será ejecutada en modo “Off-line”. 
       
      • ServerOmnisPlugin - Si se está usando un plugin para establecer la comunicación entre el servidor web y el servidor Omnis, éste parámetro deberá indicar la ruta donde éste se encuentra, partiendo de “ServerOmnisWebUrl”. Por ejemplo /cgi-bin/omnisapi.dll.
      • ServerOmnisServer – Indica el camino hacia el Servidor Omnis, su formato es ≤direccionip≥:≤puerto≥. Sólo es necesario si se está usando un servidor web con el “Omnis Web Server Plugin” instalado. Si el servidor Omnis, se está ejecutando en la misma máquina que el servidor web, sólo necesitará indicar el puerto en uso. Ejemplo 194.168.1.49:5912.
      • ServerOfflineFormName - Nombre del “form” para uso en modo “off-line”. (¡No añada .htm!), Por ejemplo rfOffline.
      • ServerAppScafName - Nombre de la aplicación “SCAF”. Deberá coincidir con el nombre de su librería. Por ejemplo: milibreria. Nota: el nombre es sensible al uso de letras mayúsculas y minúsculas, por lo que le recomendamos usar sólo minúsculas).

    28 octubre 2014

    Aplicaciones para iOS (el "wrapper") (Parte 1 de 9)

    Primeros pasos


    • Primero, descargue la última versión del proyecto “iOS Wrapper Project”, desde la web de Omnis Studio.
    • Descomprima el fichero zip del “wrapper” sobre una carpeta y asegúrese de no dejar espacios intermedios en la ruta hacia la carpeta extraída.
    • Haga doble-clic sobre el fichero “OmnisJSWrapper.xcodeproj”, para abrir el proyecto con xCode. 

    Personalización de aplicaciones iOS


    Una vez importado el “wrapper project” sobre xCode, deberá personalizarlo para su aplicación en particular. Este proceso comprende los siguientes pasos:

    1. Renombrar el proyecto
    2. Editar el fichero “config.xml”
    3. Cambiar el identificador (Identifier)
    4. Cambiar el nombre visible de la aplicación (App Name)
    5. Añadir iconos y pantallas de transición personalizadas
    6. Localizar su aplicación
    7. Eliminar elementos no requeridos
    8. Agregar SCAFs (sólo para aplicaciones “off-line”)
    9. Agregar bases de datos para funcionamiento “off-line”

    Renombrar el proyecto


    Una vez abierto el proyecto “wrapper” en xCode, es probable que desee cambiar su nombre por otro, que designe de modo más apropiado a su aplicación en particular.

    La modificación del nombre del proyecto no ejerce efecto alguno sobre la aplicación resultante, pero si le permitirá registrar sus proyectos del modo más apropiado, especialmente si pretende crear diferentes aplicaciones ya que deberá usar proyectos independientes para cada una de ellas.

    • Escoja la vista “Project Navigator”, desde la barra lateral del proyecto (podrá hacerlo mediante hacer clic sobre el icono en forma de carpeta situado sobre la barra de herramientas).
    • Seleccione el nombre del proyecto, situándose sobre el nivel superior de la vista, y luego pulse la tecla “Entre” para cambiar su nombre.
    • Cambie el nombre y presione de nuevo “Enter”. Se le preguntará si también desea cambiar el resto de lugares donde también es usado. Deberá seleccionar la opción “rename all” para cambiar todas sus apariciones.
    • La versión actual de xCode (en el momento de escribir esto) parece omitir el cambio del los “Prefix Header” en los “targets”. De modo que deberá hacerlo manualmente:
      • Sitúese sobre el nivel raíz del proyecto en el “Project Navigator” – para que pueda ver la configuración del proyecto sobre el panel principal.
      • Seleccione uno de los “Targets”, para ver sus “Build Settings”.
      • Localice el ajuste “Prefix Header” (si lo desea puede usar para ello la caja de búsqueda) y asegúrese de que el nombre del archivo con extensión .pch figure con el formato -Prefix.pch.
      • Repita el paso anterior para los 3 “Targets”.

    Aplicaciones para iOS (requerimientos, instalación y configuración de xCode)

    Requerimientos iOS


    Para construir y desplegar aplicaciones iOS necesitará lo siguiente:

    • Mac OS X 10.7 o superior
    • xCode 4.5 o superior
    • $99 - $299 (cuota anual)

    Instalación de xCode


    Para la construcción de aplicaciones iOS, es imprescindible instalar xCode. Si lo desea puede descargarlo (para OS X 10.7 o posterior) a través de Mac App Store.

    Configuración como desarrollador autorizado


    Para la correcta creación de aplicaciones iOS, es necesario que su código esté firmado y hacerlo en el momento de su compilación. El primer paso del proceso será inscribirse en uno de los programas para desarrolladores de Apple iOS.

    Apple ofrece 3 diferentes opciones de inscripción en el “iOS Developer Program”:

    • Free - Permite descargar el SDK de iOS y probar las aplicaciones sobre el simulador, pero no podrá instalarlas sobre un dispositivo real.
    • Standard ($99 anuales) - Permite subir aplicaciones en la tienda “AppStore”, he impone un máximo de 100 dispositivos "Ad-Hoc" (modo test). 
    • Enterprise ($299 anuales) - Esta es la opción para compañías grandes, las cuales dispondrán de un “Dan & Broadstreet Number” (DUNS). Al igual que en el caso anterior, se permite la distribución de aplicaciones a través de la AppStore, y no impone límite en el número de dispositivos "Ad-Hoc".

    Seguramente la gran mayoría de los desarrolladores Omnis se inscribirán en el programa “Standard”, las indicaciones incluidas a continuación suponen el uso de ésta modalidad.

    Independientemente de la modalidad elegida, podrá registrarse como empresa o como individuo. La inscripción como empresa le ofrece la posibilidad de agregar miembros al equipo, mientras que la inscripción como individuo no lo permite.

    Una vez registrado como desarrollador iOS, deberá iniciar una sesión en el “iOS De Center” y seguir los pasos que le mostramos a continuación:

    Certificados


    • Abra la sección “Certificates” de su cuenta “iOS Dev Center” y seleccione el tipo “Production”.
    • Pulse sobre el botón + para abrir el asistente que le guiará durante la creación del certificado.

    • Cuando se le pida que seleccione el tipo de certificado, deberá elegir dentro de “Production” el tipo “App Store and Ad Hoc”.
      • En caso de que no tenerlo ya instalado, use el enlace que aparece en esta misma página para descargar e instalar el “Intermediate Certificates” (Worldwide Developer Relations Certificate Authority).
    • El asistente le guiará a través del resto del proceso de creación.
    • Una vez creado el certificado (y asociada su clave privada), es importante que guarde una copia del mismo en un lugar seguro.
      • Abra el “Keychain Access” localizado en “Applications/Utilities/”.
      • Pulse sobre la categoría “Certificates” localizada en la barra lateral y después sobre el certificado que acaba de crear.
      • Pulse botón-derecho sobre el certificado y escoja la opción “Export”.
      • Manténgalo en lugar seguro - si cambia de hardware o por cualquier otra razón pierde el certificado, podrá importarlo de nuevo desde esta copia de seguridad. Cualquier actualización posterior de sus aplicaciones, deberá ser firmada con el mismo certificado, de modo que esto es muy importante.

    Identificadores


    Un “App ID” (identificador de aplicación) determina los que podrán ser usados para realizar firmas mediante su perfil.
    • Abra la sección “Identifiers” de su cuenta “iOS Dev Center” y seleccione “App IDs”.
    • Pulse sobre el botón + para abrir el asistente que le guiará durante la creación del “App ID”.
    • Puede optar por crear un “Explicit App ID” (permite firmar un único identificador de aplicación) o un “Wildcard App ID” (permite firmar cualquier aplicación cuyo identificador coincida con el formato especificado).
      El formato para los identificadores de aplicación consiste en un nombre de dominio inverso. Por ejemplo “com.entidad.aplicacion”. De modo que deberá crear el identificador siguiendo éste patrón, tanto si está creando un “Explicit App ID”, como un “Wildcard App ID”. Está permitido el uso del carácter “*”, para indicar que se usará cualquier nombre, por ejemplo “com.entidad.*”.
      Sea cual sea el nombre elegido, téngalo siempre a mano, ya que tendrá que hacer uso de él más tarde, cuando tenga que asignar un identificador a su aplicación.
    • Las aplicaciones o “wrapper’s” Omnis, no requieren “App Services”.

    Dispositivos


    Si va a desplegar sus aplicaciones directamente (Ad-Hoc) y no a través de la “App Store”, deberá registrar cada dispositivo susceptible de ejecutar su aplicación.

    • Abra la sección “Divices” de su cuenta “iOS Dev Center”.
    • Pulse sobre el botón + para abrir la página que le permitirá añadir el dispositivo.

    • Los diferentes dispositivos deberán ser añadidos con su UDID (Ónique Device Identifier). Podrá localizar el UDID del dispositivo mediante conectarlo a iTunes y hacer clic sobre su número de serie. En la dirección http://whatsmyudid.com/ podrá encontrar una práctica explicación sobre como hacer esto.

    Aprovisionamiento de perfiles (Provisioning Profile)


    Un “Provisioning Profile” posibilita la unión de un Certificado (Certificate) con un “App ID” (también la de un grupo de dispositivos (Devices) con un “Ad Hoc Provisioning Profiles”). Es mediante el “Profile” resultante, con el que podrá firmar su aplicación (combinado con el “certificate/private key” almacenada en su llavero).

    • Abra la sección “Provisioning Profiles” de su cuenta “iOS Dev Center” y seleccione “Distribution”.
    • Pulse sobre el botón + para abrir el asistente que le guiará durante la creación de un nuevo “Provisioning Pofile”.

    • Podrá crear un “Distribution Provisioning Profile” de tipo “Ad Hoc” (despliegue directo) o bien de tipo “App store”.
      Deberá seleccionar en cada momento el que coincida con el modo de distribución elegido. Asegúrese de crear perfiles de tipo “Distribution”  y no del tipo “Development”.
      Es posible la creación de varios “Provisioning Profiles”, a fin de poder hacer uso de uno o más tipos, si así lo desea.
    • Siga los pasos del asistente. Una vez completado, podrá descargar el “Provisioning Profile”, para después hacer doble-clic desde el Finder sobre el archivo descargado, haciendo posible su incorporación a xCode.


    09 octubre 2014

    Construcción de aplicaciones para iOS, Android y BlackBerry con Omnis Studio

    Además de utilizar la nueva tecnología “JavaScript Client” en la construcción de aplicaciones ejecutables sobre el navegador de cualquier ordenador, tablet o dispositivo móvil, podemos usarla en la creación de aplicaciones totalmente terminadas para dispositivos iOS, Android y BlackBerry. Dichas aplicaciones podrán incluso operar completamente “off-line”, es decir, sin necesidad de conexión a ningún tipo de servidor, en éste caso tan sólo requerirá de un número de serie especial instalado en su SDK Omnis, el “Serverless Client Serial”.

    Para la construcción de dichas aplicaciones terminadas, disponemos de tres aplicaciones "esqueleto" construidas a medida de cada sistema, denominadas “wrapper” y presentadas en la forma de proyectos JavaScript: una para iOS, una para BlackBerry10 y otra para Android.

    Dichos proyectos posibilitarán la creación de aplicaciones personalizadas, mediante una sencilla integración de clases “remote-form”, que permitirán a su vez el acceso a gran parte de las funcionalidades implementadas de modo nativo en el dispositivo, tales como la lista de contactos, función GPS y cámara de fotos.

    Mediante las sucesivas entregas que iré publicando en éste blog, comprenderemos los diferentes pasos necesarios para crear y desplegar aplicaciones personalizadas para cada una de las plataformas móviles mencionadas. Estudiaremos paso a paso, todo lo que necesitaremos saber, tanto para la creación de la aplicación, como para su despliegue a los usuarios finales, ya sea que se haga a través de la tienda de aplicaciones del propio dispositivo o de manera autónoma.

    Les sugiero que se suscriban a "Aula Omnis" a  través de cualquiera de las redes disponibles Facebook, Twitter, Linkedin, Google+, RSS FeedBurner o como seguidores de éste blog, a fin de no perderse las sucesivas entregas.

    Reciban un cordial saludo.

    08 julio 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.

    02 julio 2014

    jsClient: Testando “remote-forms” incluidos en un wrapper JavaScript

    Durante el desarrollo es posible la apertura de un “remote-form” JavaScript incluido en un wrapper, mediante la opción “Test Form Mobile” (Ctrl-M), siempre que el wrapper esté configurado y habilitado para ello (de lo contrario sólo podrá testar los “forms” sobre un navegador de tipo escritorio y antes de la configuración del wrapper). Esta opción aparece debajo de la opción “Test Form” en el menú contextual del “remote-form”. La opción “Test Form Mobile” se mostrará sólo bajo las siguientes circunstancias:
    1. Que esté habilitado el "modo test" en el dispositivo remoto (ver el menú de aplicación en caso de Android, y el de configuración del sistema en caso de iOS)
    2. Que estén habilitadas las opciones correspondientes sobre el servidor de aplicaciones Omnis, mediante los parámetros para el modo “test form”.

    La propiedad $designshowmobiletitle determinará si será o no visible el título de la aplicación wrapper, mientras se esté utilizando la opción “Test Form Mobile” (Ctrl-M). Para su implementación deberá consignar el título a mostrar sobre el fichero config.xml.

    23 junio 2014

    jsClient: Uso del wrapper JavaScript

    Cuando nuestra aplicación no requiera de una bases de datos


    Si la aplicación de cliente remoto no requiere del apoyo de una base de datos, la aplicación deberá unirse con la librería dbNoSQL. Esta proporciona el código auxiliar necesario para el correcto funcionamiento de cualesquiera otras funciones del dispositivo. En éste caso, cualquier intento de usar el "objeto SQL" del jsClient fallará.

     

    El Wrapper y JavaScript


    La wrapper incluye un WebView, que a su vez, aloja una aplicación JavaScript. La aplicación se inicializa mediante el archivo config.xml suministrado y que informa a al wrapper sobre cual es la página HTML desde donde cargar la aplicación.
    El wrapper puede ser configurado para que se conecte a Omnis sólo con propósitos de testeo. Esto se logra a través de la opción de menú “Test Form” de Omnis Developer. El wrapper también proporciona acceso independiente al dispositivo remoto, con funciones específicas para el control del GPS, la cámara o la interfaz de audio (consulte el manual para obtener más información sobre cómo acceder a las funciones del dispositivo).

    Para permitir el uso de éstas operaciones sin necesidad de conexión alguna con un servidor, el WebView deberá ejecuta secuencias de comandos locales, es decir que deberán estar contenidas en métodos que sólo pueden ser ejecutados del lado del cliente. Antes de compilar su aplicación, tendremos que personalizar el archivo config.xml de modo que pueda cumplir con éste propósito.
    Cuando el cliente opera en el modo “on-line” se hará uso del parámetro URL del archivo de configuración, para cargar el “remote-form”, pero cuando es ejecutado en modo sin conexión, (modo “off-line”) los parámetros de configuración son utilizados únicamente para (si así se desea) actualizar su copia local de la aplicación o bien para ejecutar localmente los “remote-form”.

     

    El wrapper para iOS


    El wrapper iOS, incorpora tres modos de uso, para según la base de datos local a soportar. Estos son:  

    OmnisJSWrapper            No hay soporte para base de datos local.
    OmnisJSWrapper_SQLite     Se utiliza SQLite como soporte de base de datos local.
                              Sincronización con un servidor Omnis.
    OmnisJSWrapper_UltraLite  Se utiliza UltraLite como soporte de base de datos local.
                              Sincronización con un servidor MobiLink.

     

    Un apunte sobre UltraLite 


    Deberá tenerse en cuenta que debido a restricciones de licencia, no es posible incluir como tal, el archivo "libulrt.a" del que depende UltraLite, lo que significa que cada vez que se desee incluir una nueva versión de UltraLite, tendremos que incluir este archivo manualmente. Para hacer esto, deberemos primero instalar SQLAnywhere 12, después y sobre el directorio ultralite/iphone de la instalación SQLAnywhere12, podremos encontrar el código fuente, etc., y un archivo léeme que nos guiará a través del proceso de construcción. (TigerLogic no proporciona ningún tipo de soporte sobre la compilación de este archivo).

    Una vez construido el fichero "libulrt.a" (bien sea para su uso con el dispositivo o con un simulador), tendremos que situarlo sobre la carpeta correspondiente (-iphoneos o -iphonesimulator) bajo el directorio dbInterface del wrapper.

    Los ficheros del wrapper


    El código fuente de los diferentes wrapper's ya no se incluye junto con Omnis. Deberán descargarse desde el sitio web de Omnis: www.tigerlogic.com/omnis. Los archivos ZIP contienen los ficheros config.xml, junto con el resto de archivos que lo conforman. Existen diferentes notas técnicas disponibles en el sitio web Omnis, sobre el uso y la personalización de los wrapper's, como, por ejemplo las siguientes:
    • TNJS0001: “Building & Customizing the Android Wrapper App
”
    • TNJS0002: “Building & Customizing the iOS Wrapper App”

    • TNJS0004: “Building & Customizing the BlackBerry Wrapper App”

    El proceso de compilación para cada plataforma se describe en la respectivas notas técnicas.

    20 junio 2014

    jsClient: El objeto SQL (Sincronización con SQLite)

    Si queremos hacer uso de SQLite en modo “off-line” y sincronizar una base de datos SQLite desde el dispositivo del cliente en lugar de usar Sybase UltraLite. Tendremos que tener en cuenta que dicha  sincronización está apoyada en bases de datos SQLite creadas al efecto e instaladas en el dispositivo cliente, estas guardan las tablas del usuario, así como información sobre el estado de la sincronización. El “SQLite Synchronization Server” utiliza estas tablas para pasar los datos a/de cada sincronización y para reenviar las solicitudes de sincronización. El proceso de sincronización SQLite es descrito en el manual “SQLite Synchronization Server”, puede ser descargado desde el sitio web Omnis: http://www.tigerlogic.com/omnis/download

    Para poder utilizar el objeto de base de datos SQLite, en lugar del objeto UltraLite, la aplicación del dispositivo móvil, deberá estar unida a la librería dbSQLite en lugar de la dbUltraLite.

    Aparte de esto, el funcionamiento y uso del objeto de SQL es esencialmente el mismo. Ta sólo los parámetros de inicialización difieren ligeramente, tal y como se muestra a continuación.

    $syncinit()


    Do oSQL.$syncinit(syncParams) Returns id

    El módulo de SQLite actualmente reconoce los siguientes parámetros:

    Username    Nombre de usuario de sincronización
                (definido en el servidor de sincronización)

    Password    Contraseña de usuario de sincronización
                (definido en el servidor de sincronización)

    HostString  URL del servidor de sincronización SQLite Omnis Web.

    Timeout     Tiempo de espera en segundos para las operaciones
                de sincronización.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retornó el $syncinit()).

    Ejemplo: 

    Do config.$define(Username,Password,HostString,Timeout)
                 ;; se define mediante el uso de variables locales
    Do config.$assigncols('Usuario1','xxxxxx','http://192.168.0.10:7001/ultra?OmnisClass=rtSync&OmnisLibrary=SyncServer',5)
    Do oSQL.$syncinit(config) Returns id

    Consulte el manual de la "SQLite Synchronization Server" para obtener más información sobre el diseño, implementación y uso del servidor de sincronización. Si lo desa podrá descargar su manual desde la página web Omnis (www.tigerlogic.com/omnis).

    16 junio 2014

    jsClient: El objeto SQL (Sincronización de la base de datos)

    El objeto SQL proporciona dos métodos adicionales que facilitan la sincronización dinámica con otro servidor. En caso de usarse una base de datos UltraLite, será necesario disponer de conexión con un servidor Sybase Mobilink. Disponible con SQLAnywhere 12.01
    Consulte la Guía de usuario en http://download.sybase.com/pdfdocs/awg0901e/dbmlen9.pdf para obtener más información sobre las siguientes cuestiones:


    • Configuración del servidor MobiLink sincronización.
    • Configuración de usuarios MobiLink, tablas y secuencias de comandos.
    • Creación de una base de datos consolidada e instalación de las tablas del sistema Mobilink.

    La guía del usuario también proporciona un útil tutorial de primeros pasos. Como guía de inicio rápido, lea las lecciones 1-5 del tutorial indicado a continuación, deberá llegar a un punto en el que usted pueda probar la sincronización con soltura:

    http://dcx.sybase.com/1201/en/mlstart/ml-sc-tutorial.html

     

    $syncinit()


    Do oSQL.$syncinit(syncParams) Returns id

    Inicializa la sincronización contra un servidor MobiLink. Los parámetros de sincronización son específicos para cada implementación y son suministrados a través de una variable de tipo row. Si la sincronización inicial tiene éxito, también se ejecutará un 'sync' inicial. Ver $sync() para más detalles.

    El módulo UltraLite actualmente reconoce los siguientes parámetros:

    Username         Nombre del usuario de sincronización MobiLink.
    Password         Contraseña del usuario MobiLink, si es necesaria. 

    NewPassword      Permite al usuario MobiLink cambiar su contraseña por otra, si así
                     se indica en NewPassword.
    Version          Determina qué versión del script de sincronización se utilizará
                     en las diversas acciones.
    Stream           Determina el protocolo de red que se utilizará, por ejemplo: tcpip
    StreamParams     Permite especificar parámetros adicionales de conexión,
                     específicos del protocolo en uso, por ejemplo: host
    Publications     Lista las publicaciones MobiLink suscritas por el usuario.
    AdditionalParams Una cadena en la forma nombre=valor; Especificando parámetros
                     adicionales.
    Ping             Si es usado, permite conformar que hay comunicación con el
                     servidor Mobilink. No se produce la sincronización.
    UploadOnly       Si es usado, indica que no se permitirán descargas sobre CDB, sólo
                     se procesaran las subidas de archivos.
    DownloadOnly     Si es usado, indica que no se permitirán subidas en el CDB,
                     sólo se permitirán las descargas. 

    ResumePartialDownload   Si es usado, UltraLite únicamente reanudará cualquier
                            descarga fallida. No se permitirán subidas.  

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retornó el $syncinit()).

    Ejemplo:
            Calculate config as row(Username,Version,Stream,StreamParams)
                    ;; se define mediante el uso de variables locales
            Do config.$assigncols('ml_ventas','default','tcpip','host=192.168.0. 10')
            Do oSQL.$syncinit(config) Returns id
     

    $sync()


    Do oSQL.$sync() Returns id

    Una vez que la sincronización haya sido iniciada mediante $syncinit(), el método $sync() se encargará de realizar la sincronización "ad-hoc" entre la base de datos (UltraLite) y el servidor de sincronización (MobiLink). Si es necesario modificar los parámetros de sincronización, podrá invocarse al método $syncinit() en su lugar, ya que con esto también se lleva a cabo.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retornó el $sync()).

    09 junio 2014

    jsClient: El objeto SQL ($execute(), $selecttables(), $selectcolumns() y $selectindexes())

    $execute()


    Do oSQL.$execute(cSQL) Returns id
     
    Permite la ejecución de una sentencia SQL de la que no se espera la devolución de un conjunto de resultados, deberá usarse únicamente para la ejecución de comandos administrativos DDL, tales como CREATE, DROP y ALTER.

    • cSQL es la sentencia SQL a ejecutar. No está soportado el uso de notación “bind”.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retornó el $execute()).

    Los siguientes pueden ser utilizados para obtener “meta-datos” de la base de datos:

    $selecttables()


    Do oSQL.$selecttables() Returns id

    Devuelve los nombres de tablas definidas en la base de datos local.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retornó el $selecttables()).
    • Lista de una columna, conteniendo el TableName de cada tabla en la base de datos local.

    $selectcolumns()


    Do oSQL.$selectcolumns(NombreTabla) Returns id

    Devuelve el nombre y tipo de las columnas en la tabla especificada.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retornó el $selectcolumns()).
    • Una lista que describe la definición de columnas en la tabla, con las siguiente columnas:

    ColumnName  Nombre de la columna en la tabla.
    SqlType     Nombre que corresponde al tipo de datos SQL en la columna.
    ColumnSize  Tamaño definido en variables de tipo CHAR y BINARY.
    Precision   Precisión numérica en columnas de tipo numérico.
                Será 0 para los demás tipos.
    Scale       Escala numérica en columnas de tipo numérico.
                Cero para los demás tipos.
    Default     Valor predeterminado asignado a la columna, cuando se creó la tabla.

    $selectindexes()


    Do oSQL.$selectindexes(NombreTabla) Returns id

    Devuelve, información sobre las columnas de tipo índice en la tabla especificada.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retornó el $selectindexes()).
    • Una lista que describe la definición de índices para la tabla especificada, con las siguientes columnas:

    IndexName     Nombre del índice.
    ColumnNames   Lista separada por comas, con los nombres de las columnas 
                  utilizadas por el índice.
    PrimaryKey    KTrue si el índice ha sido creado con la cláusula PRIMARY KEY
    Unique        KTrue si el índice ha sido creado con la cláusula UNIQUE.

    05 junio 2014

    jsClient: El objeto SQL ($delete() y $update())

    $delete() 

     

    Do oSQL.$delete(cSQL,row) Returns id
    Elimina cero o más filas de una tabla de la base de datos.

    • cSQL es la instrucción delete. La cual puede ser escrita a mano, u obtenida como resultado de la ejecución de un $delete() sobre una clase “schema”. cSQL puede referenciar variables en la forma @[nombre_columna], donde nombre_columna es el nombre de una columna incluida en row.
    • row, contiene los valores que podrán ser referenciados mediante notación “bind”.

    Al concluir, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retornó el $delete()). 

     

    $update() 

     

    Do oSQL.$update(cSQL,newRow,oldRow) Returns id
    Actualiza cero o más filas de una tabla de la base de datos.

    • cSQL es la instrucción de actualización. Podrá ser escrita a mano, u obtenida como resultado de la ejecución de un $update sobre una clase “schema”. cSQL permite referenciar variables en la forma @[$nombre_columna], donde nombre_columna es el nombre de una columna contenida en newRow o en oldRow. Si la variable es referenciada en la cláusula SET, se esperará que la columna esté incluida en newRow, pero si se está usando en la cláusula WHERE, deberá estar incluida en oldRow.
    • newRow, es la row que contiene los nuevos valores y que podrán ser referenciados mediante notación “bind”, es decir, los que se especifican en la cláusula SET.
    • oldRow, es la row que contiene los valores anteriores y que pueden ser referenciados mediante notación “bind”, es decir, los que pueden ser usados en la cláusula WHERE.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retornó el $update()).

    02 junio 2014

    jsClient: El objeto SQL ($fetch() y $insert())

    $fetch()

    Do oSQL.$fetch(selectfetchid,iFetchCap) Returns id

    Obtiene cero o más filas del conjunto de resultados generado mediante un $selectfetch() anterior.

    • selectfetchid es el id retornado por el $selectfetch().
    • iFetchCap es el número de filas devueltas.

    En este caso, el ID devuelto será el mismo. Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retorno el $selectfetch)
    • Una lista conteniendo cero o más filas del conjunto de resultados.

    $insert()

    Do oSQL.$insert(cSQL,listorrow) Returns id

    Inserta una o más filas en una tabla de la base de datos.

    • cSQL es la instrucción de inserción. Puede ser escrita a mano, u obtenida como resultado de la ejecución de un $insert sobre una clase “schema”. cSQL puede contener referencias a variables mediante la notación @[$nombre_columna], donde nombre_columna es el nombre de una columna incluida en listorrow.
    • listorrow, es una variable de tipo “list” o “row” que contiene los datos a insertar.

    Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:
    • El ID de la solicitud (el mismo que retornó el $insert()).

    Ejemplo:
    Do oSQL.$insert("INSERT INTO producto (nombre,cantidad) VALUES (@[colNomb],@[colCant])”,lBindVars) Returns IDinsert

    29 mayo 2014

    jsClient: El objeto SQL ($selectfetch())

    $selectfetch()

    Do oSQL.$selectfetch(cSQL,lBindVars,iFetchCap) Returns id

    Ejecuta una sentencia y retorna un conjunto de resultados (normalmente de un “select” o un “select distinct”). 

    • cSQL
    • Es la declaración. Ya sea que la hayamos escrito o bien proporcionada mediante la ejecución de un $select/$selectdistinct sobre una clase “schema” o “query”. cSQL puede contener variables en la forma @[nombre_columna], donde nombre_columna es el nombre de una columna indicada en lBindVars. 
    • lBindVars
      Es una variable de tipo “row” con las columnas que van a ser referenciadas mediante marcadores “bind” en la sentencia SQL.
    • iFetchCap
      Permite indicar el número máximo de filas que serán devueltas (si es kFetchAll se recuperarán todas las filas posibles).

    Naturalmente lBindVars puede contener columnas a las que no se hace referencia en el texto o sentencia SQL. En éstos casos, sólo las columnas referenciadas mediante marcadores “bind” serán leídas. Al finalizar, se invocará el método $sqldone() pasando los siguientes parámetros:

    • El ID de la solicitud (el mismo que retorno el $selectfetch) 
    • Una lista conteniendo cero o más filas del conjunto de inicial de resultados.

    En este punto, será responsabilidad del desarrollador copiar y/o visualizar los resultados sobre el “remote-form” del modo que desee, a fin de mostrar los resultados al usuario.

    Ejemplo 1:

    Do iList.$definefromsqlclass('myQuery')
    Do oSQL.$selectfetch($clib.$queries.myQuery.$select,iList,100) Returns id

    Ejemplo 2:

    Do oSQL.$selectfetch('select * from Tabla1 where edad = @[edad]’,lBindVars,100) Returns id

    28 mayo 2014

    Nueva versión Omnis Studio 6.1

    TigerLogic anuncia el lanzamiento de Omnis Studio versión 6.1 con interesantes novedades centradas principalmente en el desarrollo web y aplicaciones móviles. Omnis Studio 6.1 incluye mejoras en jsClient. Código ejecutable en modo 64 bits, soporte para RESTful Web Services y otras que resumimos a continuación.


    64-bit Omnis


    El ejecutable ha sido rediseñado para su uso con procesadores de 64 bits estando inicialmente disponible para Omnis Server y para todas las plataformas soportadas. Las actuales versiones 32 bits, incluyendo el SDK, runtime, y server, seguirán estando disponibles para Windows y OSX, aunque ya se ha anunciado el lanzamiento de la versión  64 bits del SDK.

    Servicios Web (Web Services)


    Se añade soporte para REST, un modelo de Web Service que está siendo muy popular. El Web Service RESTful es identificado mediante un URI, el cliente interactúa con el recurso a través de peticiones y respuestas HTTP. El nuevo componente Web Services proporcionará tanto el cliente como el servidor con soporte RESTful. Se ha añadido un nuevo plug-in para permitir que el servidor de aplicaciones Omnis publique un servicio web RESTful.

    Componentes JavaScript


    Se han añadido más controles JavaScript para dotar a las aplicaciones de una apariencia "nativa", es decir adaptada a las distintas plataformas y/o dispositivos en los que se ejecuta su aplicación Omnis. Tanto el estilo como su apariencia son definidos mediante controles CSS adaptables a cada plataforma. Estos nuevos componentes JavaScript podrán localizarse dentro de un grupo específico en el "Component Store". Además de esto descubriremos algunas mejoras generales de rendimiento al trabajar con jsClient.

    Utilidad "Screen Size Sync"


    Tras la creación de cualquier "remote form", los campos y otros controles en el contenidos podrán re-colocarse para aparecer en el tamaño y posición correctas según las posibles orientaciones de pantalla, incluyendo entornos de escritorio, tablets y smartphone. Omnis Studio 6.1 permite configurar y guardar automáticamente los componentes según los diferentes diseños localizados en el mismo "remote form", lo cual significará un más que considerable ahorro de tiempo a la hora de construir nuestras aplicaciones, logrando a la vez que éstas resulten más consistentes.

    Otras mejoras


    • Una nueva ventana de vista previa para las salidas impresas, permite al usuario seleccionar el texto y de recorrer el informe mediante una lista de páginas situada al margen de la ventana. 
    • El número máximo de líneas permitidas en un método Omnis se ha aumentado de 1.024 a 256.000.
    • Se permite la comparación de variables de tipo binario, objeto y referencia a objeto, en el código. (las variables usadas a cada lado del operador debe ser del mismo tipo)
    • Los separadores de idioma ($separators), ahora pueden ser guardados para cada hilo, en caso de usarse un servidor de aplicaciones multi-hilo.
    • Los "object reference" se borran automáticamente liberando espacio en la memoria.

    26 mayo 2014

    jsClient: El objeto SQL ($getlasterrortext y $getlasterrorcode)

    El objeto SQL


    Una aplicación de tipo “Serverless” obtiene el acceso a la base de datos integrada mediante un objeto SQL especial localizado como: $cinst.$sqlobject

    Ejemplo de uso:

    Calculate oVar as $cinst.$sqlobject

    Todas las interacciones con el objeto SQL son asíncronas (excepto $getlasterrortext y $getlasterrorcode), podrá usarse con  métodos que sólo pueden ser ejecutados del lado del cliente, (“client-executed”) un método especial denominado “$sqldone” de la instancia “remote-form” será invocado al concluir su ejecución. Cada solicitud o sentencia SQL, retorna un identificador y ese mismo identificador será pasado como parámetro al método de $sqldone, permitiéndose así identificar la solicitud o sentencia. Esto significa que en un determinado momento, podrán existir múltiples peticiones o sentencias SQL en curso, aún a pesar de que la aplicación las va ejecutando secuencialmente.

    Tenga en cuenta que, aunque no es obligatorio proporcionar un método $sqldone, los errores serán ignorados si no lo hace. En caso de éxito, el identificador devuelto tendrá un valor positivo, mientras que un valor negativo indicará un código de error.

    De aquí en adelante, mostraremos el uso de una variable de tipo “var” denominada “oSQL” y que suponemos contiene el objeto SQL devuelto mediante $cinst.$sqlobject.

    $getlasterrortext()


    Do oSQL.$getlasterrortext() Returns lErrText

    Devuelve el texto de error tras la última operación. El valor "OK" indicaría éxito.

    $getlasterrorcode()

     

    Do oSQL.$getlasterrorcode() Returns lErrCode

    Devuelve el código de error tras la última operación. El valor 0 indicaría éxito.

    22 mayo 2014

    jsClient: Bases de datos soportadas

    La aplicación-esqueleto o "wrapper" jsClient incluye soporte integrado para SQLite y UltraLite de Sybase, en ambos casos se proporcionan métodos ejecutables desde el lado del cliente, que permiten un acceso total SQL sobre los datos almacenados en el propio dispositivo móvil. El acceso a éstas bases de datos locales, sólo podrá realizarse en aplicaciones de tipo “Serverless” ya que pueden ser ejecutadas en modo “off-line”.

    Todas las interacciones entre el jsClient y la propia aplicación será asíncrono, lo cual cambia muy significativamente el modo en que estamos acostumbrados a usar el código SQL en Omnis.

    Las clases “Schema” y “Query”

    Cuándo se trata de métodos que sólo pueden ser ejecutados del lado del cliente, el propio editor de métodos restringe el uso de los $definefromsqlclass, sólo podrán usarse con una “query” o con un “schema” como primer argumento, permitiéndose (opcionalmente) seleccionar un subconjunto de nombres de columnas, mediante el uso de dos o más argumentos:

    Do listOrRow.$definefromsqlclass(‘SchemaName’)

    Tipos de datos

    Tras crear variables de tipo “row” podrá agregar columnas, pero es importante que los tipos de datos de éstas coincidan con el tipo de datos definido en la propia base de datos.

    Los métodos que sólo pueden ser ejecutados del lado del cliente, sólo permiten el uso de un tipo de variable, el tipo “var”, que generalmente es interpretado como tipo “Character”, por lo que teniendo en cuenta ésta circunstancia, es más seguro agregar nuevas columnas a una “row” manualmente, usando la función:

    Do lRow.$cols.$add(,,,[])

    por ejemplo:

    Do lRow.$cols.$add('Edad',kInteger,kShortint)

    09 octubre 2013

    Programación de listas

    La variable de tipo "list" es sin duda, la que adquiere mayor relevancia y versatilidad en la programación con Omnis Studio, de hecho, resulta imprescindible a la hora de construir aplicaciones para la web y dispositivos móviles. Una variable “list” puede suministrar los datos (contenido) y el formato para muchos de los componentes visuales JavaScript que contendrán sus aplicaciones, tales como: “droplists”, “menus”, “data grids”, “complex grids”, y “tree lists”.

    Una variable “list” puede ser definida en base a una “clase de datos SQL” (schema, query, o table). En ese caso, la lista obtiene la definición de cada columna según fueron creadas en la propia clase SQL. Cada “list” puede contener un número ilimitado de líneas y un máximo de 32.000 columnas, claro está, si la capacidad de memoria del dispositivo lo permite.

    Omnis Studio proporciona los métodos necesarios para crear, definir y modificar variables “list” y que vamos a repasar brevemente a continuación. Le sugiero que consulten el manual en español, para obtener más información sobre el uso de variables “lis" (http://framosmu.blogspot.com.es/2010/03/manual-de-programacion-omnis-studio-en.html).

     

    Crear una lista

     

    En primer lugar será necesario crear la variable “list” y definir sus columnas. Con éste propósito podemos optar por el método $define, pero también podemos hacer uso del método $add del grupo de métodos $cols, veamos ambos casos:

    Do myList.$define(var1,var2,var3) ;; myList y var’s deben ser declarados

    o


    Do myList.$cols.$add('myFieldName',kCharacter,kSimpleChar,255)
    Do myList.$cols.$add('anotherColumn',kInteger,kLongInt)
    Do myList.$cols.$add('yetAnotherColumn',kBoolean)


    En este ejemplo, se crea una “list” con tres columnas. Los parámetros del método $add describen el nombre, tipo, subtipo y longitud de cada columna. Sin embargo y dependiendo del tipo de columna, no todos estos parámetros serán necesarios.

    Añadir datos a una lista

     

    En segundo lugar, añadiremos algunos datos. Usaremos el método $add con algunos valores pasados directamente como parámetros y también lo usaremos para crear una línea vacía:

    Do myList.$add('Pepe', 27, kTrue) ;; Añade una línea con los valores suministrados
    Do myList.$add() ;; Agrega una línea vacía


    También podemos añadir el contenido de una variable de tipo “row” a la lista. Para ello, podemos hacer uso del método $add, en éste caso el método $add le pasa una referencia a la variable “row”:

    Do myList.$add().$assignrow(myRow,kTrue)

    Note que los métodos de los que podemos hacer uso detrás de $add, deben ser usados con la sintaxis descrita al añadir una línea vacía “$add()”. Esto causa que la función $add devuelva una referencia a la función $assignrow, para que ésta pueda agregar los valores de myRow. El segundo parámetro determina si se usaran los nombres de las columnas o su orden, para emparejar los datos. También se podría hacer uso de los métodos $addafter y $addbefore para agregar los datos antes o después de una determinada columna.

    Eliminar líneas de una lista

     

    Es posible que en ocasiones también debamos eliminar algunas líneas de la lista. La manera más fácil de hacer esto es utilizando el método $remove. Por ejemplo, si quisiéramos eliminar la línea actual de la lista usaríamos lo siguiente:

    Do myList.$remove(myList.$line())

    Si quisiéramos eliminar todas las líneas la lista, que cumplan una determinada condición, tendremos que hacer uso en primer lugar de la función $search:

    Do myList.$search($ref.miNombreCampo='Pepe', kTrue)

    Mediante éste método se seleccionaran todas las filas que contengan el valor 'Pepe' en la columna 'miNombreCampo'. Después las eliminaremos del siguiente modo:

    Do myList.$remove(kListDeleteSelected)

    También podríamos hacer uso de la constante kListKeepSelected para causar la eliminación de todas las líneas no seleccionados.

    Copiar y fusionar una lista

     

    A veces es posible que queramos fusionar listas, o copiar los contenidos de una lista sobre otra, para esto último podemos hacer lo siguiente…

    Calculate NuevaLista as ViejaLista

    …pero, si lo que queremos es copiar la definición de una lista sobre otra usaremos el método $copydefinition:

    Do NuevaLista.$copydefinition(ViejaLista)

    Este método creará una lista vacía con la definición de la lista inicial. Finalmente, si lo que queremos es agregar  o fusionar, los datos de una lista sobre otra, debemos usar el método $merge:

    Do NuevaLista.$merge(ViejaLista,kTrue)

    En este caso se añadirán los datos de ViejaLista a NuevaLista. El segundo parámetro determina si queremos hacer la correspondencia de datos usando los nombres de las columnas o bien su orden.

    Eliminar listas

     

    Si lo que pretendemos es eliminar el contenido de una variable de tipo “list”, podemos hacer uso del método $clear:

    Do myList.$clear()

    Si también quisiéramos eliminar la definición de sus columnas, podríamos usar $define pero sin pasarle parámetro alguno:

    Do myList.$define()

    Nota:
    Esto es sólo un pequeño ejemplo de cómo hacer uso de las variables de tipo “list”, éste artículo ha sido primero publicado en ingles por Andreas Pfeiffer. Puede obtener más información en español sobre la programación con Omnis Studio en Aula Omnis.