Etiqueta

16 diciembre 2015

Acceso directo HTTP con Omnis

La técnica Omnis denominada “Cliente-Ligero” o “Ultra-thin” nos permite invocar una tarea remota o “remote task” desde un formulario HTML, sin necesidad de utilizar el cliente JavaScript o el también llamado “jsClient”. En éstos casos Omnis crea una instancia para la tarea remota particular, he invoca a su método “$construct()”. El valor de retorno, será texto HTML standard.

La invocación directa http, deberá seguir la siguiente estructura:

http://≤Servidor≥:≤Puerto≥/Cliente-ligero

≤Servidor≥ es el nombre de dominio o dirección IP del equipo en el que se esté ejecutando Omnis Studio. La dirección 127.0.0.1, será apropiada si se trata de nuestra propia máquina.

≤Puerto≥ es el número de puerto previamente fijado sobre la propiedad “$ServerPort” de Omnis Studio; de forma predeterminada es el 5912, pero puede cambiarse por cualquier otro entre 1 y 32767. La propiedad “$ServerPort” forma parte del grupo “$root.$prefs”.

Para probar esto, puede optar por descargarse la librería denominada “DirectHTTP”, la cual está disponible para su descarga gratuita desde la web de Aula Omnis, o bien créela una con ese mismo nombre y después añádale una “remote task” con el nombre “rtDirectHTTP” e inserte en su método “$construct()” el código siguiente:

; Sobre el $construct()
; Cree también la siguientes variables
; Cómo parámetro: pParams (Row)
; Como locales: fullhtml (Char 100000000) y html (Char 100000000)

Begin text block
  Text: ≤html≥ (Carriage return,Linefeed)
  Text: ≤body bgcolor="FFFFFF"≥ (Carriage return,Linefeed)
  Text: ≤title≥Hello [pParams.User] ≤/title≥ (Carriage return,Linefeed)
  Text: ≤H1≥Hello [pParams.User] ≤/H1≥ (Carriage return,Linefeed)
  Text: ≤a href="javascript:history.go(-1);"≥Go back≤/a≥ (Carriage return,Linefeed)
  Text: ≤/BODY≥ (Carriage return,Linefeed)
  Text: ≤/html≥ (Carriage return,Linefeed)
End text block
Get text block html

Calculate fullhtml as con('content-type: text/html',chr(13,10),'content-length:',len(html),chr(13,10,13,10),html)
Quit method fullhtml


La “remote task” es invocada desde dentro del formulario HTML del modo siguiente:

≤html≥
  ≤form action="http://127.0.0.1:5912/ultra" method="Get"≥
    ¿Cuál es su nombre? ≤input br="" maxlength="50" name="User" size="30" type="Text" /≥    ≤input type="Submit" name="Send" value="Send"≥
    ≤input type="hidden" name="OmnisLibrary" value="DirectHTTP"≥
    ≤input type="hidden" name="OmnisClass" value="rtDirectHTTP"≥
  ≤/form≥
≤/html≥


Deberá cambiar la dirección IP y el puerto 5912 para que se conforme a su configuración, la dirección IP y el número de puerto indicados anteriormente son los usados por Omnis como valores por defecto.

A continuación, abra el formulario HTML en un navegador, introduzca un nombre y haga clic en “Send”. Esto provocará la invocación del método “$construct” de la tarea remota “rtDirectHTTP”, pasándole el parámetro denominado “User”, que contendrá el texto introducido en el formulario. La llamada http completa es la siguiente:

http://127.0.0.1:5912/ultra?User=Santa&Send=Send&OmnisLibrary=DirectHTTP&OmnisClass=rtDirectHTTP

La “remote task” procesa los valores del formulario y devuelve al navegador texto HTML estándar, como se muestra a continuación:




09 diciembre 2015

Uso de “sockets” seguros con Omnis.

Existen dos formas de hacer que nuestro servidor “Omnis App Server” soporte conexión segura para los clientes, el primero (más extendido) es mediante el uso de un prefijo en el “WebServerURL” que para páginas HTML es el “https://”. Éste modo asegura que el servidor web y sus clientes transfieran la información en modo seguro, durante todo el tiempo que permanezcan conectados. En éste caso no es necesario hacer uso de la propiedad de las “remote task” “$issecure”.

En el segundo método que proponemos, usaremos la propiedad de que disponen las “remote task” denominada “$issecure”. En primer lugar hacer notar, que dicha propiedad pude ser cambia dinámicamente, lo que posibilita su uso sólo cuando realmente sea necesario, como por ejemplo, en el momento de tener que enviar el número de una tarjeta de crédito, para después retornar a su estado anterior o “no seguro”, lo cual permite reducir al mínimo la sobrecarga adicional en la que incurre el uso de los “secure sockets”.

Al contrario de lo que ocurría con el primer método, no existe indicación alguna de que el cliente se este ejecutando en modo seguro, además las diferencias en cuanto los tiempos de conexión segura y “no segura” (al usarse de modo dinámico) son apenas apreciables. De modo que el navegador Web puede mostrar un estado de “no seguro”, pero internamente el cliente estar ejecutándose en modo seguro.

La propiedad indicada puede ser cambiada mediante el comando siguiente:

Do $ctask.$issecure.$assign(kTrue)

Como se trata de una propiedad de la “remote task”, el uso del método “$changeform()” no afectará a su estado.

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.