Etiqueta

06 febrero 2012

Error. Code # 801: , in worng place


El título de ésta entrada, obedece a un problema que se presenta cuando usamos OMSQLDAM, consultando una tabla, que contiene a su vez una columna numérica con decimales (usando "," como separador de decimales) y al ejecutar sobre ella la sentencia SQL indicada a continuación desde la ventana del "Interactive SQL":

SELECT SUM(ColumnaDecimal) FROM Tabla

El resultado de ésta consulta es el descrito, como título de ésta entrada ¿Cuál es la solución?

En un principio podría pensarse, que cambiando el parámetro de sesión $sqldecimalseparator sería suficiente, pero cual será nuestra sorpresa al ver que, tras cambiar éste parámetro obtenemos el mismo mensaje de error.

La solución nos llega por gentileza de un avezado desarrollador Omnis, Elías Gil de Caceres (España), la solución reside en el uso del método $root.$prefs.$separators.

Este método nos permite conocer o fijar los caracteres de separación que OMNIS deberá usar, su único parámetro será una cadena de 5 caracteres (dp,thou,func,imdp,imsep), si se omite el parámetro el método nos devolverá su estado actual, de otro modo se fijaran los que especifiquemos.

Método: $separators([cSeps])

Parámetro:

Carácter 1 (dp): carácter usado como separador de decimales
Carácter 2 (thou): carácter usado como separador de miles
Carácter 3 (func): carácter usado como separador entre los parámetros de una función 
Carácter 4 (imdp): carácter usado a la hora de importar/exportar cifras decimales 
Carácter 5 (imsep): carácter usado como delimitador durante una importación/exportación


De modo que: $root.$prefs.$separators('.,,.,') nos permitirá, fijar el modo de uso anglosajón y evitar así que se produzca el error ya mencionado. Usaríamos: $root.$prefs.$separators(',.,,,') para fijar de nuevo el modo español, donde la "," es usada como separador de decimales.


Los argumentos de éste método serán guardados en el archivo omnis.cfg, desde el cual Omnis tomará su estado inicial. Damos las gracias, en especial a Elías Gil de Caceres (España) por su aportación a éste blog.

13 enero 2012

Manual de Programación

Obtenga el Manual de Programación Omnis Studio en Casellano

¡¡ Gratis !! 

Adquiriendo una licencia o una actualización de cualquier producto Omnis Studio a través del distribuidor oficial (http://www.softpi.com), recibirá una copia en formato PDF.

Si desea más información, mande un e-mail a: framosmu@softpi.com

03 octubre 2011

El nuevo jsClient


Sin duda la principal novedad incluida en Omnis Studio 5.2 es el cliente basado en JavaScript, que permite ejecutar aplicaciones Omnis en cualquier dispositivo y/o navegador web, sin tener que instalar el plug-in, además de ser totalmente compatible con HTML5 y CSS3.

Una nueva propiedad del "remote form" denominada $client, nos permitirá determinar si ésta será usada con el habitual "kClientPlugin", para el nuevo "kClientJavaScript" o para "kClientiOS".


He tenido el placer de probarlo en un iMac con Mac OS Lion, WebServer, MySQL y OS 5.2 Beta, tras la creación de la nueva "remote form" y de modo totalmente automático, se crea la carpeta "/Applications/Omnis Studio 5.2 Beta 1.app/Contents/MacOS/html", con todo el contenido necesario para poner a prueba el nuevo "remote form".


- Una carpeta denominada "_icons", recogerá cada uno de los iconos que hemos utilizado.
- La carpeta "css", la carpeta "images", la carperta "scripts" y la carpeta "sounds".


Todas ellas deberán ser trasladadas al directorio "Documents" del WebServer cuando deseemos poner nuestra aplicación en explotación. Cabe mencionar que, aunque en la carpeta "_icons" encontraremos ya incluidos todos los iconos usados en nuestras "remote form". OS 5.2, incluye una nueva herramienta web llamada "JS Icon Export", que nos permitirá colocar en la carpeta "_icons" cualesquiera otros iconos, aunque aún no hayamos hecho uso de los mismos.


Además de ésto deberemos configurar la pagina html que deberá cargarse inicialmente en el navegador, lo cual incluye otra interesante novedad, pues al contrario de lo que sucedía con el anterior "plugin", en el nuevo formulario será posible invocar a más de un "remote form" en la misma página html.


Observemos el siguiente ejemplo:


-----------------------------
≤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"≥
≤html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"≥

≤head≥

≤meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/≥
≤title≥Preinscripciones UPSA≤/title≥
≤link rel="shortcut icon" href="http://www.upsa.es/images/favicon.ico" /≥

≤!-- This makes mobile device support work --≥
≤meta name="viewport" content="width=device-width"≥

≤!-- The scripts and style sheets must be present at relative URLs from this page --≥
≤link type="text/css" href="css/omn_dlg.css" rel="stylesheet" media="print,screen" /≥
≤link type="text/css" href="css/omn_menu.css" rel="stylesheet" media="print, screen" /≥
≤link type="text/css" href="css/smoothness/jquery-ui-1.8.15.custom.css" rel="stylesheet" /≥   
≤link type="text/css" href="css/slick.grid.css" rel="stylesheet" /≥
≤link type="text/css" href="css/slick.columnpicker.css" rel="stylesheet" /≥
≤link type="text/css" href="css/slick.pager.css" rel="stylesheet" /≥

≤!-- Must occur after other stylesheets e.g. jquery-ui-1.8.15.custom.css, as it overrides values --≥
≤link type="text/css" href="css/omnis.css" rel="stylesheet"/≥

≤!-- Omnis Studio JavaScript client scripts --≥
≤script type="text/javascript" src="scripts/omjsclnt.js"≥≤/script≥
≤script type="text/javascript" src="scripts/omjqclnt.js"≥≤/script≥

≤/head>

≤body bgcolor="#608090" onload="jOmnis.onLoad()" onunload="jOmnis.onUnload()"≥

≤div id="omnisobject1" align="center" WebServerURL="http://172.25.45.24/cgi-bin/nph-omniscgi" OmnisServerAndPort="5912" OmnisLibrary="NaviPrein52" OmnisClass="Inicio_Form" param1="" param2=""≥
≤/div≥

≤/body≥

≤/html≥
-------------------------
Observe la sección:

≤div id="omnisobject1" align="center" WebServerURL="http://172.25.45.24/cgi-bin/nph-omniscgi" OmnisServerAndPort="5912" OmnisLibrary="NaviPrein52" OmnisClass="Inicio_Form" param1="" param2=""≥
≤/div≥

- El parámetro "id" contiene en nuestro ejemplo el valor "omnisobjct1", pero es posible crear nuevos "omnisobjt...", permitiendo integrar diferentes clientes JavaScript, en diferentes lugares de nuestra página web, ¡no es genial!

El resto de los parámetros ya son viejos conocidos y creo que no necesitan explicación, solo añadir que los parámetros "param1" y "param2", podrían muy bien ser usados para especificar el tamaño de la pantalla o "frame" que ocupará el "remote form". Por defecto, el cliente JavaScript utilizará el tamaño especificado para el propio "remote form", pero podemos cambiar su altura y anchura en el método $construct, tras el paso de dichos parámetros.

Espero sus comentarios, reciban un cordial saludo.