Etiqueta

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

04 septiembre 2017

Componentes JSON&JS (Parte 2 de 12)

JSON Control Editor


Un control o componente JSON&JS, es definido mediante un archivo JSON, denominado "JSON Control Definition" (en adelante JCD), el cual podrá ser creado o editado mediante cualquier editor de textos JSON o bien mediante una nueva herramienta disponible desde el menú "Tools>>Add Ons", denominada "JSON Control Editor".


El "JSON Control Editor" muestra una plantilla con todas las propiedades necesarias para crear un JCD básico. El editor nos permite fijar las propiedades del control bajo cada pestaña, para finalizar haciendo clic sobre la opción "Save", la opción "Build" nos permitirá llevar a cabo la creación del control así definido, la opción "Reset" permite eliminar los cambios realizados sobre la plantilla predeterminada, haciendo posible comenzar de nuevo. Antes de configurar las propiedades y los métodos de nuestro control, necesitaremos conocer sus definiciones, cosa que iremos desgranando en sucesivas entregas de éste blog.

Control Name


El nombre del control debe ser único, por lo que la primera cosa será cambiar su nombre (o simplemente aceptar el nombre predeterminado, si es que sólo estamos probando el editor). El nombre de control predeterminado tiene el prefijo "net.omnis" para mostrar la convención de nomenclatura preferida, la cual deberemos cambiar por el correspondiente a nuestro propio nombre de empresa, por ejemplo: "com.miempresa.micontrol1", o cualquier otra convención de nomenclatura apropiada. Note que utilizamos puntos en el nombre del control, pero Omnis finalmente los sustituirá por caracteres de subrayado, ya que los puntos causan problemas con la sintaxis de notación usada en la programación con Omnis.



31 agosto 2017

Notificaciones "Push" con Omnis Studio 8.1

La versión 8.1 de Omnis Studio, permite el uso de notificaciones "push" en el desarrollo de aplicaciones para Android, iOS y Windows 10 (necesitaremos hacer uso de los "wrappers" versión 2.0 o posteriores).

Para quienes no estén familiarizados con el uso de notificaciones "push", mencionar que ésto significa que ahora podremos enviar mensajes a cualquier cliente que tenga instalada nuestra aplicación para dispositivos móviles, aunque (en ese momento) no la esté ejecutando. En este sentido, la capacidad de enviar notificaciones "push" otorga a nuestras aplicaciones una funcionalidad muy potente e interactiva, ya que permite animar proactivamente a los usuarios finales a abrir y usar la aplicación.

Una notificación o mensaje enviado de éste modo al cliente, podría (por ejemplo) incluir una noticia importante, un mensaje acerca de una nueva entrada en la base de datos o cualquier otra cosa que deseemos. Incluso es posible la inclusión de información útil, que se adjuntará a la notificación y que se pasará al "remote-form" de la aplicación, permitiendo al usuario interactuar con la aplicación a partir de la notificación recibida.

El soporte para éste tipo de notificaciones es proporcionado a través del servicio de mensajería en la nube o servicio de notificación "push", para cada plataforma respectiva y deberá haber sido habilitada para nuestro proyecto de aplicación móvil, mediante el SDK y el "JavaScript Wrapper" correspondiente. Para configurar el uso de notificaciones para Android e iOS, necesitaremos activar el servicio "Firebase" de Google y en caso de Windows 10 necesitaremos configurar los servicios de notificación "push" del "Store Dashboard".


Herramienta de administración de notificaciones push


Para administrar las notificaciones, podemos optar por crear grupos de dispositivos, a fin de enviar notificaciones a determinados grupos o bien a dispositivos concretos. Toda esta funcionalidad puede ser manejada desde el propio código Omnis (mediante el uso de nuevas propiedades y métodos), o bien mediante una nueva herramienta de administración, denominada: "Push Notifications", localizable bajo el menú de opciones "Tools≥≥Add Ons" de Omnis. Tenga en cuenta que la herramienta es en si misma una librería Omnis (un fichero .lbs) ubicado en la carpeta "startup", por lo que deberá estar presente para que la funcionalidad de notificaciones "push" pueda ser usada con nuestras aplicaciones para móviles, además de nuestro código Omnis y también es necesaria para configurar el servidor de aplicaciones de Omnis.

Métodos y nuevo "Client Command"


Un nuevo "clientcommand" nos permite habilitar y deshabilitar el uso de notificaciones "push" en nuestras aplicaciones móviles:

$clientcommand(“enablepushnotifications”, row(bEnable))

bEndable: Es booleano - Si es "true" habilita las notificaciones push, "false" las deshabilita.
returns: (Booleano) - Indicará si el comando ha terminado con éxito. (método client-execute)

Además de éste comando, disponemos de un nuevo método denominado "$pushnotifycommand" que podremos utilizar para configurar las "Notificaciones Push".

Para obtener más información sobre la configuración de notificaciones "push" en nuestras aplicaciones para móviles, así como el uso de comandos y métodos, consulte el nuevo documento "Push Notifications" que podrá encontrar bajo el siguiente enlace:


28 agosto 2017

Componentes JSON&JS (Parte 1 de 12)

Otra interesante característica que incorpora la versión 8.1 de Omnis, es la de poder definir nuestros propios controles para formularios remotos (remote-form) mediante JSON y JavaScript, dejándolos listos para ser usados en cualquier momento con nuestras aplicaciones web y móviles. Seguramente, pasando el tiempo veremos muchos componentes de éste tipo ya construidos por terceros, abriendo infinitas posibilidades a la incorporación de nuevos controles, listos para usar en nuestras aplicaciones.

Este nuevo método proporciona una alternativa real al uso de C++ y el SDK JavaScript. (método actualmente en uso para la creación de componentes JavaScript) Sin duda una buena noticia, pues tan sólo necesitaremos poseer conocimientos de JSON y JavaScript, para crear y usar nuestros propios controles JavaScript en aplicaciones web o móvil o bien como contribución a la nuestra y cada vez más amplia comunidad de desarrolladores Omnis.

Tras la creación de un "JSON Component", bastará con reiniciar Omnis para que aparezca sobre el "Component Store", bajo un nuevo grupo denominado "JSON". Su uso será muy similar al de cualquier otro componente, lo arrastraremos sobre nuestro formulario remoto y estableceremos sus propiedades mediante el "Property Manager".

La representación (en modo de diseño) de los controles JSON en un formulario remoto es muy básica y no refleja el control real, su presentación real sólo la obtendremos en tiempo de ejecución, aunque para aquellos controles que no requieran de una interfaz visual ésto no será un problema, si que está previsto que en futuras versiones de Omnis, pueda mejorarse ésta cuestión.

En ésta serie de 12 artículos breves, intentaré explicar como hacer uso de ésta nueva característica.

Sigan atentos a éste blog.

17 noviembre 2016

Omnis Studio 8 y la localización con jsClient

En ésta entrada nos ocuparemos de mencionar un cambio que se ha producido desde la versión 6.1 de Omnis y la localización a otros idiomas de los mensajes que de forma nativa puede recibir el usuario en su navegador, cuando desarrollamos aplicaciones con jsClient.

En versiones anteriores de Omnis Studio, hemos estado haciendo uso del fichero "Studio.stb", con éste propósito, pero desde la versión 6.1 en adelante ha dejado de ser operativo, en nuestros desarrollos para la Web, decir que para otros entornos todo sigue siendo igual.

Es decir, "Localization" y "StringTables" siguen funcionando como antes, pero para los mensajes que se envían desde de núcleo del cliente JavaScript, se necesita hacer otra cosa, decir que aparece parcialmente documentado en el manual "Omnis_WebDev.pdf", bajo el apartado "Localization for the JavaScript Client" en la página 187, pero desafortunadamente, resulta difícil de entender y la información es incompleta (Omnis Software a prometido corregir esto pronto).

En mi caso tropecé con ésta "falta de información" al tratar de localizar al castellano el mensaje que Omnis muestra sobre el navegador del usuario, cuando el tiempo de conexión a expirado, el mensaje en ingles dice: "You have been disconnected. Refresh or restart application to reconnect"

Centrándonos en la localización para éste texto, mostraremos las dos opciones de que disponemos para resolverlo:

1) Agregar las siguientes líneas al archivo HTM inicial (marcamos en rojo las líneas que ya existen en el fichero:

<!-- The following placeholder is replaced with either a script tag for the remote task string table or nothing when there is no remote task string table -->

jOmnisStrings.en = {"disconnected":"You have been disconnected. Refresh or restart application to reconnect" };
jOmnisStrings.es = {"disconnected":"Ha sido desconectado. Refresque el navegador o vuelva a cargar la aplicación para conectarse de nuevo" };

<title></title>
</head>
Sin embargo, esto puede resultar algo incómodo si son muchas los textos y el número de idiomas a traducir (Existen más de 30 textos de error), por lo que se recomienda hacer lo siguiente:

2) En la carpeta o directorio HTML del raiz de instalación Omnis, crear una nueva carpeta a la que denominaremos "strings" y agregar a ella un archivo denominado "Error_Strings.js" con el siguiente contenido:

jOmnisStrings.en = {"disconnected":"You have been disconnected. Refresh or restart application to reconnect"};
jOmnisStrings.es = {"disconnected":"Ha sido desconectado. Refresque el navegador o vuelva a cargar la aplicación para conectarse de nuevo.(es_es)"};

Ahora necesitaremos modificar el archivo HTML indicado en el punto 1 (o el jsctemp.htm) para que lea como sigue:

<!-- The following placeholder is replaced with either a script tag for the remote task string table or nothing when there is no remote task string table -->
<script type="text/javascript" src="strings/Error_Strings.js"></script>

<title></title>
</head>
Obviamente, tanto la nueva carpeta como el archivo htm modificado deberán ser llevados al Servidor Web.

06 enero 2016

Creación dinámica de formularios Web

Éste artículo es una traducción del proporcionado por Kris Geerts (desarrollador Omnis www.it8-projects.com) de los Países Bajos, la librería ejemplo mencionada (LOGIN.zip), puede ser descargada desde Aula Omnis.

Como ya sabemos el formulario web JavaScript que genera automáticamente Omnis para llamar a nuestros “remote form”, pueden integrarse fácilmente en cualquier sitio web ya existente. Pero me parecen  interesantes los apuntes que hace Kris en su artículo sobre la integración de Omnis Web con un sitio Web ya construido, por esa razón me he permitido la licencia de tomar sus notas y publicar éste artículo.

Lo que Kris propone, es un modelo para la integración en un sitio web ya existente, con nuestros “remote forms” jsClient de forma dinámica. El escenario propuesto también podría resultar útil cuando se desea tener diferentes librerías (diferentes versiones) que a su vez conectan con diferentes bases de datos atendidas desde un solo proceso Omnis/MySQL (escenario habitual para los desarrollos en la “nube”). Como resultado de esto, podríamos llegar a tener librerías casi idénticas, con incluso nombres iguales para sus “remote forms”, bajo tales circunstancias podría resultar muy difícil su mantenimiento. De hay la propuesta de creación dinámica de “remote forms”, aunque seguramente podrían encontrarse otras razones para justificar el enfoque propuesto por Kris.

En primer lugar deberemos asegurarnos de que nuestra solución Web funcione correctamente. Podemos realizar pruebas con la página HTML que Omnis genera automáticamente desde nuestro “remote form”, con la versión Omnis de desarrollo (127.0.0.1/jshtml/≤nombredelremoteform≥.htm). Sin embargo, cuando tengamos que portar la solución a un servidor web real, deberemos asegurarnos de contar con todos los archivos necesarios, páginas HTML en el directorio correcto y de que todo este funcionando correctamente. Para IIS (Windows), deberemos disponer de los siguientes directorios y archivos:

Inetpub (normalmente en c:\inetpub) 
  Cgi-bin
    omnisapi.dll
    nph-omniscgi.exe
    …… 
  Scripts
    nph-omniscgi.exe
    nph-owscgi.exe
  wwwroot 
    scripts
      omjqclnt.js
      pie.htc
      …
  Css
    Omn_menu.css
    …
    Smoothness
      Jquery -ui-…
    Images

Header-columns-bg.gif


Para portar la solución al servidor Web, tendremos que copiar el contenido de la carpeta de “HTML” desde el directorio raíz de instalación de la versión Omnis para desarrollo, al raíz del servidor web. También debemos comprobar que estemos utilizando las últimas versiones del omnisapi.dll (o nphomniscgi.exe) y de los scripts. Una vez que el servidor esté funcionando correctamente, estaremos dispuestos para el paso siguiente.

Ahora vamos a realizar pruebas con la librería de demostración (LOGIN.lbs) que seguramente ya ha descargado desde Aula Omnis, ábrala con el Omnis Runtime Server. Pegue la siguiente URL en un navegador, sustituyendo los valores indicados entre ≤≥ por la dirección IP y número de puerto correctos:

http://≤IPServidorWeb≥/cgi-bin/omnisapi.dll?OmnisClass=rtDir&OmnisLibrary=LOGIN&OmnisServer=≤IPServidorOmnis≥:≤PuertoOmnis≥&param1=CompanyName

Nota: En la demo proporcionada por Kris, se hace uso de un solo parámetro, pero, por supuesto, nada impide añadir otros parámetros (param2 = loquequiera, etc.). El modelo generado automáticamente puede hacer uso de hasta cuatro parámetros, pero pueden añadires más. Si se desea utilizar un formulario HTML aún más simple para acceder a la pantalla de inicio de sesión, consulte la entrada “statical-Submitexample” que encontrará en la “Remote Task” de nombre “rtDir” de la librería. Esto proporciona un inicio de sesión más cómodo para el usuario.

Cuando introduzca la URL anterior, la clase “Remote Task” “rtDir” generará automáticamente una página HTML con el Omnis JavaScript (observe el método “$CreateDynam” de la “Remote Task” “rtDir”). De éste modo tendremos la ventaja de poder abrir otra librería, incluso estando ubicada en otro servidor, o cualquier otro formulario Web donde incluir lo que necesitamos para que funcione. La librería demo proporcionada se llama de nuevo a la misma librería mediante el formulario “rlogin”, por lo que (si queremos hacer un uso práctico de la solución propuesta) tendríamos que cambiar éste comportamiento.

Como podrá observar en la librería ejemplo, se han codificado las rutas hacia las carpetas css y otros directorios, la ruta hacia la página HTML generada por la “Remote Task” es relativa al directorio “cgi-bin” y no al “wwwroot”. Esto significa que en lugar de “http://servidor/≤fichero≥.htm” la ruta URL siguiente será: “http://servidor/cgi-bin/≤fichero≥.htm”

Tenga en cuenta que se usan rutas pre-codificadas para las carpetas css y otras, usadas en la creación de la página HTML dinámica, con sus propios parámetros ya rellenados, listo para que el usuario haga simplemente clic en “login'”.

02 diciembre 2015

jsClient: uso de “assignpdf” y “showpdf”

Desde la publicación de la versión 6 de Omnis Studio, ha sido posible imprimir y visualizar archivos PDF mediante el componente PDFDevice y sus métodos javascript “addignpdf” y “showpdf”. Pero debido a un ajuste de seguridad (publicado en la nota ST/WT/1860) el uso de éstos métodos puede generar un error de tipo “You are not allowed to get the file D:/temp/test.pdf using the getpdf command”. ¿Cómo podemos resolver este problema?

La solución, pasa por realizar un pequeño cambio en su archivo “Config.json” a fin de especificar en él, qué carpetas o directorios deben ser accesibles a la función “GetPDF()”. Éste archivo lo podremos encontrar bajo la carpeta “Studio” dentro del directorio raíz de instalación de Omnis.

Concretamente, deberemos incluir, bajo su sección “Server” algo como lo siguiente:

"getpdfFolders": ["c:\\Temp", "c:\\MyPDFFile"]

Deberemos asegurarnos de que no quede ningún separador de los usados en los nombres de directorios sin ser “escapado” y de que estén encerrados entre comillas dobles. Esto permitirá el uso de los documentos PDF ubicados en las carpetas referenciadas.

05 agosto 2015

Gestión de sub-formularios dentro de un mismo panel o “Paged Pane”.

En éste artículo queremos destacar una, de las muchas cosas que nos ha traído la versión 6 de Omnis, se trata de la posibilidad de gestionar un grupo de subformularios dentro de un mismo contenedor, creando un efecto de paneles plegables al estilo de lo que sucede con el menú de un “Paged Pane”. Los diferentes subformularios quedan dispuestos verticalmente pudiendo ser expandidos o contraídos, haciendo clic/tocando sobre su barra de título o bien sobre el icono dispuesto al efecto


Configuración de los paneles


Para crear el grupo de paneles tendremos que hacer uso del método “clientcommand”  denominado “subformset_add”, junto con algunos nuevos parámetros, cuyas constantes podremos encontrar bajo el grupo ”Subform sets” y con el epígrafe “kSFSflag...”. El comando “subformset_add” creará el conjunto de subformularios dentro de la instancia “remote form” actual, tal y como si se tratase de un “Paged Pane”.

Do $cinst.$clientcommand("subformset_add",row-variable)

La variable de tipo “row” es definida como: row(grupo,padre,flags,orden,lista). A continuación describimos las principales banderas o “flags” que pueden ser usadas con el comando “subformset_add”.

kSFSflagOpenMin

Éste “flag” o bandera causa que el grupo de paneles se abra en estado minimizado. Normalmente, todos los subformularios se abren en estado de no-minimizado, de modo que deberemos hacer uso de ésta bandera para evitar su comportamiento predeterminado.

kSFSflagMinAsTitle

Cuando se minimiza un panel (subformulario) del grupo, se mostrará sólo la barra de título. Esta bandera anula su comportamiento predeterminado y que es ocultar completamente (cerrar) el subformulario. Para añadir el botón de minimizar a cada subformulario, deberá usarse la bandera “kSFSflagMinButton”, lo cual permite al usuario expandir o contraer el panel mediante su pulsación y no sólo mediante hacer clic en su título.

kSFSflagAutoLayout

Dispone automáticamente los paneles (subformularios del grupo) verticalmente dentro de su matriz, ignorando su posiciones originales “left” y “top”. Se activa la bandera  “kSFSflagMinAsTitle” y se desactivan “kSFSflagResize” y “kSFSflagMaxButton”. Si además activamos “kSFSflagAutoLayout”, el usuario podrá arrastrar y soltar la barra de título de los diferentes paneles del grupo, para reordenarlos, colocándolos en el orden que prefiera.

kSFSflagParentWidth

Sólo es aplicable si antes se ha activado “kSFSflagAutoLayout”. Su posición original “width” (ancho) será ignorada, tomándose en su lugar el ancho del subformulario “padre” para todo el grupo. También fija el “edgefloat” de cada subformulario a “kEFright”. De modo que, el uso de “kSFSflagParentWidth” nos permite, la creación de un “Paged Pane” compuesto a modo de varios paneles creados a partir de un grupo de subformularios, que se redimensionan o ajustan automáticamente dentro del panel que los contiene.

kSFSflagSingleOpen

Sólo es aplicable si antes se ha activado “kSFSflagAutoLayout” y “kSFSflagMinButton”. Permite asegura que al menos una ventana o panel esté siempre abierto.

 

Un ejemplo vale más que mil palabras


La imagen que mostramos al inicio de éste artículo, muestra un conjunto de paneles o grupo de subformularios contenidos en un “Paged Pane”, con las opciones “Auto Layout” y “Parent Width” activadas.

El método que mostramos a continuación, construye el grupo de subformularios asignándolo a un “Paged Pane” colcado a su vez dentro de un “remote form”. En el ejemplo, el subformulario tan solo contiene un campo de edición, con un pequeño texto ("This is panel #"). La lista o grupo de subformularios es construida incluyendo dicho texto, además del color de fondo, todo dentro de la variable “row” indicada para en el método “clientcommand” y su opción “subformset_add”.

; defina las variables para “lFormList”, “lSetRow” y para todas sus columnas
; construya el grupo de subformularios sobre “lFormList”
Do lFormList.$define(lFormID,lClassName,lFormParams,lFormTitle,lFormLeft,lFormTop,lFormWidth,lFormHeight)
Do lFormList.$add(1,'jsSubformSetPanelsSubForm',con(1,chr(44),rgb(221,221,255),chr(44),chr(34),"This is panel 1",chr(34)),'Panel 1',,,,160)
Do lFormList.$add(2,'jsSubformSetPanelsSubForm',con(2,chr(44),rgb(204,204,255),chr(44),chr(34),"This is panel 2",chr(34)),'Panel 2',,,,160)
Do lFormList.$add(3,'jsSubformSetPanelsSubForm',con(3,chr(44),rgb(187,187,255),chr(44),chr(34),"This is panel 3",chr(34)),'Panel 3',,,,160)
Do lFormList.$add(4,'jsSubformSetPanelsSubForm',con(4,chr(44),rgb(170,170,255),chr(44),chr(34),"This is panel 4",chr(34)),'Panel 4',,,,160)
; defina la variable “row” para el comando “subformset_add” como “lSetRow”
Do lSetRow.$define(lSetName,lParent,lFlags,lOrderVar,lFormList)
Do lSetRow.$assigncols("SubformPanelsSet",'PagedPane:1',kSFSflagSingleOpen+kSFSflagMinButton+kSFSflagAutoLayout+kSFSflagParentWidth,'iOpenForms',lFormList)
Do $cinst.$clientcommand("subformset_add",lSetRow)

En este caso las banderas “kSFSflagSingleOpen”, “kSFSflagMinButton”, “kSFSflagAutoLayout” y “kSFSflagParentWidth” son sumadas para dotar al grupo en construcción de todas las propiedades simultáneamente.

27 mayo 2015

Uso del nuevo archivo de configuración del servidor de aplicaciones

Desde Omnis Studio 6.1 se incluye un nuevo archivo de configuración en formato JSON denominado "config.json" y situado en la carpeta "studio".

Es utlizado para configurar el servidor de aplicaciones Omnis, incluyendo propiedades de arranque, modo de uso y otras concernientes al uso de servicios web (Web Services). También incluye una sección específica para activar la caché de clases Java y otros elementos.

Habitualmente la configuración del servidor Omnis Server puede hacerse mediante seleccionar la opción "Server Configuration" del menú "File" desde el propio Omnis Server, pero, ahora también podrá hacerse mediante la edición del fichero "config.json" usando para elo cualquier editor de texto compatible, pero el archivo debe ajustarse al formato JSON.

La primera parte del archivo "config.json" contiene la siguiente distribución:

{
    "server": {
    "port": 5988,
    "stacks": 20,
    "timeslice": 1,
    "webServiceURL": "",
    "webServiceConnection": "",
    "webServiceLogging": "full",
    "webServiceLogMaxRecords": 100,
    "webServiceStrictWSDL": true,
    "RESTfulURL": "",
    "RESTfulConnection": "",
    "start": false,
    "retryBind": false,
    "showBindRetryMessage": true,
    "bindAttempts": 10
    }
}

donde...
 
  • port, stacks, timeslice 
  • Permiten definir el modo en que se ejecutará el servidor Omnis.

  • webService...
  • Definen los servicios web basados en SOAP/WSDL.

  • RESTful...
  • Definen los servicios web basados en REST.

  • start
  • Si es "true" significa que el servidor Omnis será activado automáticamente al arrancar.

  • retryBind
  • La propiedad "retryBind" deberá establecerse a "false" si no se desea que el servidor Omnis vuelva a intentar la conexión al puerto especificado, tras un primer intento. Por defecto o si el parámetro es omitido "retryBind" es "true".

  • showBindRetryMessage
  • Si "retryBind" es "true", "showBindRetryMessage" determinará si se mostrará o no, un mensaje de estado durante el tiempo que se esté re-intentando la conexión.

  • bindAttempts
  • Si "retryBind" es "true", "bindAttempts" anula el número predeterminado de intentos de conexión, obligando al servidor Omnis a realizar un intento cada segundo.
 

20 mayo 2015

Texto HTML en botones

Una nueva característica soportada por los controles JavaScript "Button" y "TransButton" nos permiten aportar textos con etiquetas HTML a los botones.

Para ello deberemos fijar su nueva propiedad "$textishtml" a "true"
, ésto afectará al modo en que será tratado el texto indicado para el botón (propiedad $text), el cual podrá ahora contener etiquetas HTML, ésto significa que podremos hacer uso de cualquier etiqueta HTML para aportar estilo al texto. Por ejemplo, podríamos insertar un salto de línea mediante la etiqueta "≤br≥".

La activación de la propiedad "$textishtml", no impide el uso del resto de atributos ya presentes para los controles de botón mencionados, por lo que no habrá problema alguno en seguir usando los elementos habituales para la asignación de estilo, tipo de letra y color.

Tenga en cuenta que modo-diseño no podremos observar el resultado de aplicar la etiqueta HTML (sólo veremos el código HTML) y si usamos atributos dentro del código HTML deberán ir situados entre comillas simples.

13 mayo 2015

Probando nuestros "remote forms"

Si estamos usando Firefox durante el desarrollo de aplicaciones con Omnis, podemos usarlo para probar los diferentes diseños y tamaños de pantalla pensados para su uso en dispositivos móviles y tabletas mediante su utilidad "Vista de diseño adaptable", indicar que se trata de una característica del navegador Firefox y que Omnis puede aprovechar, pero que no parece estar disponible (por el momento) en otros navegadores.

Pero quiero hablar de ello en éste "blog", ya que nos puede ahorrar mucho tiempo a los desarrolladores Omnis, durante la fase de diseño de nuestras aplicaciones, ya que nos evitará tener que probar o testar la aplicación en múltiples dispositivos. Sin embargo, le recomiendo que finalmente también pruebe su aplicación sobre el o los dispositivos que usted desee estén soportados por su aplicación.


Para que Omnis pueda hacer uso de dicha funcionalidad del navegador, deberá establecer su propiedad "gResponsiveDesign" a "true", podrá encontrarla dentro del archivo "ssz.js" ubicado bajo el directorio "html/scripts" dentro del raíz Omnis. Tenga en cuenta que deberá reiniciar Omnis para que el cambio tenga efecto.


Finalmente y para activa el modo en Firefox, diríjase al menú "Herramientas" opción "Desarrollador web" y seleccione "Vista de diseño adaptable".


Una vez hecho ésto, podremos probar nuestros "remote form" seleccionando los diferentes tamaños de pantalla y orientaciones bajo el menú desplegable de la ventana del navegador Firefox, nuestro "remote form" cambiará según lo especificado en su propiedad $screensize. Cuando hayamos concluido con las pruebas, deberemos volver a cambiar la configuración de "gResponsiveDesign" del fichero "ssz.js" para dejarlo en modo "false".

13 marzo 2015

Aplicaciones para BlackBerry (despliegue)

Construcción de aplicaciones BlackBerry


Una vez personalizado el proyecto, la creación de una versión distribuible es un proceso muy sencillo.
  • Abra el fichero “bar-descriptor.xml” del proyecto y seleccione la pestaña “General”, después haga clic sobre el enlace “Export release build”.

Ahora bastará con pulsar “Finish” sobre el asistente, esto ocasionará que se exporte una archivo de aplicación ya firmado dentro de su “workspace” o “espacio de trabajo”. (concretamente será bajo la carpeta especificada en la ventana de diálogo bajo el campo “Export to folder:”)


Su aplicación final será un archivo con extensión .bar. Ahora sólo tendrá que elegir un modo de hacerlo llegar hasta los potenciales usuarios...

Aplicaciones para BlackBerry (el "wrapper") (Parte 8 de 8)

Agregar SCAFs (sólo para aplicaciones “off-line”)


Si su aplicación incluye soporte “off-line”, deberá decidir si incluirá o no los ficheros SCAFs dentro de la propia aplicación. Tenga en cuenta, que si así lo hace, la aplicación será de mayor tamaño, aunque, sin embargo, podrá ser ejecutada en el modo “off-line”, es decir, sin necesidad de una primera conexión con el servidor para su actualización.

Si opta por incluir los ficheros SCAF en su aplicación, deberá hacer lo siguiente:
  • Localice la carpeta “html/sc” bajo el directorio de instalación Omnis Studio.
    • En un sistema Windows, la encontrará bajo el directorio “AppData”. Ejemplo: C:\Users\AppData\Local\TigerLogic\OS6.X\
  • Localice su “App SCAF” (Un archivo con extensión .db bajo el directorio sc, con el mismo nombre que el asignado a su librería Omnis).
  • Localice también su “Omnis SCAF” (El fichero omnis.db situado en sc/omnis/).
  • Importe ambos ficheros SCAF a su proyecto BlackBerry, situándolos bajo el directorio “assets/Serverless”.
  • La forma más fácil de hacer esto es arrastrarlos desde el explorador de archivos al proyecto abierto sobre el SDK. Asegúrese de tener seleccionada la opción “Copy Files”.
 

11 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 7 de 8)

Localizar su aplicación


Si desea traducir los textos utilizados por la aplicación o “wrapper”, o si desea hacer uso de diferentes pantallas de inicio/iconos para según que idiomas, podrá hacerlo siguiendo los pasos que se describen a continuación. Si el dispositivo del usuario es ajustado para ser usado con alguno de los idiomas soportados, la aplicación automáticamente hará uso de los textos traducidos y/o iconos alternativos que se hayan especificado.


Añadiendo soporte multilingüe

  • Abra el fichero “bar-descriptor.xml” del proyecto y seleccione la pestaña “Localization”.
  • Aquí deberá figurar la lista con los idiomas para los que desee proporcionar traducciones.
  • Podrá Agregar/Quitar idiomas mediante los botones “Add/Remove”.
  • Modifique esta lista para poblarla con los lenguajes a los que desee aportar las diferentes traducciones.
  • Si el idioma que desea aportar, no estuviese incluido en la lista, podrá agregarlo especificando un código de idioma sobre el campo “Other”, situado en la parte inferior.


 

Iconos y/o nombres de aplicación alternativos

  • Seleccione uno de los lenguajes de la lista “Language”.
  • A su derecha hallará el acceso a la sección  “Entry-Point Text and Images”.
  • Rellene esta sección con los textos e imágenes para el idioma seleccionado.
  • Cualquier valor introducido aquí anulará su predeterminado y según lo indicado por el usuario al configurar la opción de idioma del dispositivo. Si no se indica un texto o icono alternativo se tomar el predeterminado.
 

Traducción de cadenas de texto

El “wrapper” utiliza cadenas de texto en muchos lugares diferentes. Por ejemplo, en el menú de la aplicación. Estos también pueden ser traducidos.
  • Una vez agregadas las diferentes lenguas, deberá “Build” (construir) y “Clean” (limpiar) su proyecto.
    • Haga clic-derecho sobre el proyecto y seleccione la opción “Build Project”, después, pulse de nuevo clic-derecho y seleccione “Clean Project”.
  • Esto deberá generar varios archivos con formato ..._XX.ts sobre el directorio “translations” del proyecto.
  • Localice y edite el archivo .ts correspondiente al idioma que desee traducir.
  • Podrá comprobar que se trata de un archivo XML compuesto de varias etiquetas ≤message≥ - cada una con su correspondiente ≤source≥ y ≤translation≥.
  • En caso de haberse añadido nuevas lenguas, cada etiqueta ≤translation≥ incluirá un atributo type="unfinished". Mientras esté presente no se hará uso de la traducción.


  • La etiqueta ≤source≥ contiene la cadena por defecto, y la etiqueta ≤translate≥ es la que deberá ser editada para contener la cadena traducida para ese idioma.
    • Ejemplo: ≤source≥Application Auto Updater≤/source≥ ≤translation≥Mise à jour automatique≤/translation≥
    • Si la etiqueta ≤translation≥ contiene el atributo type="unfinished", elimínelo, pues de lo contrario no se hará uso de la traducción.

10 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 6 de 8)

Eliminar elementos no requeridos


Cada aplicación BlackBerry debe solicitar permisos para acceder a diversas áreas del dispositivo. (Contactos, Cámara, Localización, etc.) Es una mala práctica incluir permisos innecesarios en su aplicación, especialmente si se está distribuyendo a través de BlackBerry World, ya que cuando el usuario descarga o instala la aplicación, deberá aceptar los permisos a los que su aplicación solicita acceso. El uso de permisos innecesarios pueden darle al usuario la impresión de que su aplicación es maliciosa.

  • Abra el fichero “bar-descriptor.xml” de su proyecto y seleccione la pestaña “Application”. 
  • La sección “Permissions” de esta página le permitirá seleccionar los realmente requeridos por la aplicación, mediante el uso de casillas de verificación. 
  • Por defecto, están marcados todos los permisos posibles para una aplicación Omnis. 
  • Marque sólo los que su aplicación va a necesitar realmente y desactive todos los demás.


PERMISOS OBLIGATORIOS:

  • Internet

El resto de permisos pueden ser eliminados para su aplicación, si es el caso que no los necesita. Sus nombres y descripciones son explicados por sí mismos cuando su aplicación los solicite.

Los permisos opcionales, (dependiendo de los requeridos por su aplicación) son los siguientes:
  • Camera - necesario si se hará uso de lector de código de barras (kJSDeviceActionGetBarcode). 
  • Contacts - necesario si se activa kJSDeviceActionGetContacts para acceder a la lista de contactos. 
  • GPS Location - proporciona un ajuste fino (se usa el sensor GPS) sobre los datos de ubicación kJSDeviceActionGetGps
  • Location - proporciona un ajuste parcial (se usa la red) sobre los datos de ubicación kJSDeviceActionGetGps
  • Shared Files - necesario si se desea obtener imágenes desde la cámara o de entre las ya guardadas en el dispositivo (kJSDeviceActionTakePhoto o kJSDeviceActionGetImage).

09 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 5 de 8)

Añadir iconos y pantallas de transición personalizadas


Los requisitos para el uso de imágenes son los siguientes:
  • Icono de la aplicación: 
    • 114x114 PNG
  • Pantallas de transición: 
    • 768x1280 PNG (Orientación vertical, dispositivos táctiles – como el modelo Z10)
    • 1280x768 PNG (Orientación horizontal, dispositivos táctiles)
    • 720x720 PNG (Dispositivos con teclado – como el modelo Q10)

Una vez creados los archivos con las imágenes:
  • Importe de cada uno de ellos sobre la carpeta “assets/images” del proyecto. 
    • Podrá hacer esto simplemente arrastrando los archivos desde el sistema operativo hacia la carpeta del SDK (asegúrese de tener marcada la opción “Copy Files”.
  • Abra el fichero “bar-descriptor.xml” del proyecto y seleccione la pestaña “Application”.



En la sección “Icon”, pulse el botón “Add”.
  • Sobre la ventana de diálogo que se abrirá, pulse el botón “Workspace” y busque el archivo que contiene el icono para su proyecto.
  • Una vez seleccionado, pulse “OK” para añadirlo.



  • Ahora y situado sobre la lista de iconos, seleccione el icono predeterminado y pulse el botón “Remove”. 
  • Elimine los iconos predeterminados de la carpeta “assets/images”. Ahora que está utilizando los suyos propios no los necesitará. 
  • Realice el mismo proceso con las imágenes de la sección “Splash Screens”.

06 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 4 de 8)

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


Para cambiar el nombre que muestra su aplicación:
  • Abra el fichero “bar-descriptor.xml” del proyecto y seleccione la pestaña “Application”. 
  • Modifique el nombre de la aplicación que podrá ver en el campo “Name”. 
  • Si lo desea también puede introducir un texto descriptivo sobre su aplicación en el campo “Description”.

Aplicaciones para BlackBerry (el "wrapper") (Parte 3 de 8)

Cambiar el nombre del paquete


El “Package Name” identifica a su aplicación, y debe ser único entre todas las aplicaciones del dispositivo. Dos aplicaciones con el mismo nombre serían vistos por el dispositivo como si se tratase de una sola, por lo que este es un paso importante. Recomendamos el uso de la sintaxis de nombre de dominio inverso. Por ejemplo com.miempresa.omnis.miaplicacion.
  • Abra el fichero “bar-descriptor.xml” del proyecto y seleccione la pestaña “General”. 
  • El “Package Name” se muestra en la parte superior de la ventana - modifíquelo por el que desee.


05 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 2 de 8)

Editar el fichero “config.xml”


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

Busque el archivo “config.xml” situado en la carpeta “assets”, y modifique su contenido según lo necesite para su aplicación, tal y como se describe a continuación:


  • MenuIncludeSettings - Muestra o no, el botón “Configuración” o “Settings” en el menú de la aplicación, permitiendo al usuario cambiar la configuración de conexión. 1 para cierto, 0 para falso. 
  • MenuIncludeOffline - Permite o no, que el usuario pueda alternar entre los modos “on-line” y “off-line” desde el menú de la aplicación. 1 para cierto, 0 para falso. 
  • MenuIncludeAbout - Muestra o no, un botón “Acerca de” en el menú de la aplicación, permitiendo al usuario abrir la pantalla de información indicada. 1 para cierto, 0 para falso.
  • SettingsFloatControls - Permite o no, que el “form” pueda cambiar su tamaño/posición, de acuerdo con 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 un 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 en modo de pruebas. 
  • ServerOmnisWebUrl - URL del servidor Omnis o servidor Web. En caso de un servidor Omnis su formato debería ser: http://≤direccionip≥:≤puertoomnis≥ 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, son necesarios si se usarán “form’s” en modo “On-line”. El resto de parámetros “Server...” se necesitarán sólo si la aplicación también podrá ejecutarse 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 :. 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).

02 marzo 2015

Aplicaciones para BlackBerry (el "wrapper") (Parte 1 de 8)

Renombrar el proyecto


Una vez importado el “wrapper” al SDK, es probable que desee asignarle un nuevo nombre, más acorde 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.
  • Pulse botón-derecho sobre el SDK y seleccione la opción “Rename”. 
  • En la ventana de diálogo que se abrirá, introduzca el nuevo nombre del proyecto y pulse “OK”.

25 febrero 2015

Aplicaciones para BlackBerry (requerimientos, instalación y configuración del SDK)

Requerimientos BlackBerry


Para construir y desplegar aplicaciones para dispositivos BlackBerry, necesitará lo siguiente:
  • Windows, OS X o Linux
  • El SDK nativo para BlackBerry 10
  • $0

 

Configuración del entorno BlackBerry


1) Instalación del SDK nativo BlackBerry 10


Empiece, descargando e instalando el SDK desde la dirección de internet: http://developer.blackberry.com/native/download/.


2) Configuración del “Code Signing Requirements” (requisitos de firma)


Para poder obtener una versión operativa de su aplicación, primero deberá registrarse como desarrollador BlackBerry y obtener su clave de firma para el código. Necesitará hacer uso de la clave para inscribir su SDK con la una firma de código autorizada, y obtener así el certificado que utilizará con su aplicación.
  • Entre en http://www.blackberry.com/go/codesigning y rellene el formulario para solicitar claves de firma para BlackBerry 10. Anote el PIN que se le entregará.
    Tendrá que esperar unas 2 horas, para recibir los archivos vía correo electrónico.
  • Abra el asistente “BlackBerry Deployment Wizard” del SDK. Podrá encontrarlo bajo la opción “BlackBerry” del grupo “Preferences”.
    Si está usando un Mac, encontrará las “Preferences” bajo el menú “Momentics”. Si está en Windows o Linux están bajo el menú “Window



  • Ahora sólo necesitará preocuparse por el punto “Signing Registration”.
    • Desde este punto, seleccione la opción “Complete the registration process using the 2 CSJ files...
    • En la siguiente página, rellene los campos mediante seleccionar los archivos CSJ, facilitando una contraseña e introduciendo el pin que creó al registrarse para la obtención de los archivos CSJ.
    • Una vez hecho esto, se creará un certificado mediante su clave, quedando registrada su firma de código autorizada “code signing authority”.
    • Al finalizar se le pedirá que guarde una copia de seguridad (Back Up) de sus claves y certificados. Por favor, asegúrese de hacerlo, ya que esto es lo que le identifica como desarrollador autorizado.

3) Importando el proyecto


  • En primer lugar, descargue la última versión del “wrapper” BlackBerry desde el sitio web de Omnis.

Para importar el proyecto deberá abrir el SDK de BlackBerry y hacer lo siguiente:

  • Seleccione la opción “Import” del menú “File”.
  • Desde el asistente que aparece, seleccione “General ≥ Existing Projects Into Workspace”.
  • Desde la ventana siguiente, escoja “select archive file”, localice el archivo zip que descargo con el “wrapper” y pulse “Finish”.

Personalización de aplicaciones BlackBerry


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

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

¡paso a paso! iremos viendo todo ésto en sucesivas entregas...