Etiqueta

30 diciembre 2015

Uso del cliente JavaScript (jsClient) con PHP

Toda la documentación, ficheros referenciados y la librería de ejemplo indicados en éste artículo, podrá descargarse desde la web de Aula Omnis, archivo denominado “DynamicWebPages.zip”. Una página HTML de jsClient típica, contiene algo como lo siguiente:

≤html≥
≤head≥
≤title≥Studio 5.2 Test≤/title≥
≤meta http-equiv="Content-Type" content="text/html; charset=utf-8"≥

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

 ≤!-- The style sheets must be present in the directory /css/ --≥
≤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, must be present in the directory /scripts/ --≥
≤script type="text/javascript" src="/scripts/omjsclnt.js"≥≤/script≥
≤script type="text/javascript" src="/scripts/omjqclnt.js"≥≤/script≥
≤/head≥

≤body onload="jOmnis.onLoad()" onunload="jOmnis.onUnload()" style="margin:0;"≥
≤h1≥Test JavaScript Client Studio 5.2≤/h1≥
≤div id="omnisobject1" WebServerUrl="http://192.168.0.4/omnis_apache" OmnisServerAndPort="192.168.0.8:5914" OmnisLibrary="ScriptClient52_Test" OmnisClass="rfTest" param1="A1" param2="B1" param3="C1" param4="D1"≥≤/div≥
≤/body≥
≤/html≥


Si queremos hacer lo mismo desde PHP, modificaríamos la página para obtener algo como lo indicado a continuación. Para el ejemplo localizado en Aula Omnis, se hace uso de un fichero de configuración denominado “webclient.ini”, para componer la pagina “webclient.php”

≤html≥
≤head≥
≤title≥Studio 5.2 Test≤/title≥
≤meta http-equiv="Content-Type" content="text/html; charset=utf-8"≥

≤?php
$phplib = dirname(__FILE     ) . '/../phpsub'
set_include_path(get_include_path() . PATH_SEPARATOR . $phplib); require_once('OmnisWebClass.php');
$x = new OmnisWebClass('ScriptClient52_Test.ini', 'rfTest');
$params = array ("A1", "B1", "C1", "D1");
$x->set_additional_params($params);
$x->display_header_body_omnis_js('/css','/scripts','margin:0;');
?≥

≤h1≥Test JavaScript Client Studio 5.2≤/h1≥

≤?php
$x->display_client_omnis_js();
?≥

≤/body≥
≤/html≥


Por supuesto existen muchas otras opciones y parámetros que pueden usarse a la hora de crear el modelo PHP, el ejemplo que hallará en Aula Omnis “OmnisWebClass.php” constituye una buena muestra de ello.

Una reconfiguración mas cómoda


Cómo ya hemos mencionado, para nuestro ejemplo hacemos uso del fichero de configuración denominado “webclient.ini”, así, si (por ejemplo) queremos modificar el ancho “width” del “remote form”, sólo tendremos que cambiar el parámetro adecuado en éste archivo. Permitiendo además su correcta construcción dependiendo del navegador en uso: Internet Explorer, Netscape, Firefox, etc.

Del mismo modo, cuando sea el caso que estemos realizando pruebas con la versión Omnis para desarrollo, en las que se suele usar nuestro mismo PC. Podemos comentar la línea “OmnisServer = XXX”, ya que si no se encuentra en el archivo “.ini”, una dirección IP, PHP usará la dirección del cliente

Los parámetros “OmnisXXX “del archivo “.ini”, tales como el nombre de la librería o el de la clase remota, son ajustados después de los parámetros “cgi”. Por lo tanto, si se introduce la URL:

http://192.168.0.2/test/webclient.php?lib=TEST&class=rfTest_2&width=200

El servidor PHP compondrá una página web con éstos parámetros Omnis, de modo que el “remote form” “rfTest2” sea mostrado con una anchura de 200 píxeles. Todos los parámetros no presentes en la URL serán tomados del archivo “.ini”. Todo esto podrá encontrarlo perfectamente documentado dentro del propio archivo “OmnisWebClass.php”.

Parámetros HTTP


Al analizarse la petición HTTP, PHP puede recuperar otros parámetros de la cabecera HTTP, como (por ejemplo) el navegador que está usando el cliente. Esto también podría pasarse como parámetro adicional al “remote form” Omnis. Para ello sería necesario añadir a la página HTML el siguiente código:

; para Internet-Explorer
≤paramname = "Param1" value="myParameter = myValue"≥

; para Netscape y otros
Param1 = "myParameter=myValue"


Para incluir el uso de parámetros en el caso de la clase “OmnisWebClass.php”. Después de crearse la instancias del objeto PHP, e inmediatamente antes de la línea “$x-≥display_plugin()”; será necesario crear una matriz y llenarla con la información que se pasará a la instancia:

$params = array ();
$params['myParam'] = 'myValue';
$params['Browser']=
$_SERVER['HTTP_USER_AGENT'];
// insert here further parameters, see below
$X-≥set_additional_params($params);


Si el acceso a la página web está protegido con “htaccess”, podremos incluso obtener el nombre de usuario y su contraseña, para pasársela como parámetros a Omnis. El código PHP necesario es el siguiente:

if (isset($_SERVER['REMOTE_USER']))
$params['User1'] = $_SERVER['REMOTE_USER'];
if (isset($_SERVER['PHP_AUTH_USER']))
$params['User2'] = $_SERVER['PHP_AUTH_USER'];
if (isset($_SERVER['PHP_AUTH_PW']))
$params['Password'] = $_SERVER['PHP_AUTH_PW'];


Pero debemos tener en cuenta que, (para que esto funcione) el servidor PHP, deberá permitir ciertas restricciones de seguridad, consulte las “safe mode restrictions”.

Reconocimiento del servicio “Off-Line”


Un “Omnis App Server” suele ser muy estable, pero aún así es necesario hacer algo de mantenimiento de vez en cuando. De modo que puede ser inevitable que debido a que el servidor esté en modo “off-line” y le llegue una solicitud de “remote form” desde un navegador, el navegador se congela durante varios minutos, terminando por ofrecer como respuesta "'Error reading the response from the WEB server”.

Pero ésto se puede ser evitado fácilmente, mediante el uso de la clase “OmnisWebClass.php” y añadiendo algunas enmiendas a la librería Omnis. En este caso, el “Omnis App Server” deberá poseer permisos de escritura sobre el sistema de archivos del servidor web. Además, deberán rebajarse algunas de las normas de seguridad impuestas en PHP. De éste modo, el “Omnis App Server” podría, (inmediatamente después de abrir la librería) crear un archivo, (por ejemplo, con el nombre “Semaphore_WEBCLIENT.txt”) bajo el mismo directorio donde se encuentra “webclient.php”, el cual sería eliminado tras cerrarse la librería.

La idea es, que la instancia de “OmnisWebClass.php” pueda comprobar la existencia o no, de este archivo. Si no existe, en lugar de mostrarse el código de error, mostrar algo como “≤h3≥Omnis App. Server, cumple tareas de mantenimiento≤/h3≥”. El texto exacto es configurable. Para implementar este comportamiento, tan sólo sería necesario ñadir una línea más al archivo “webclient.php” informando a la instancia sobre el nombre del archivo a crear, del modo siguiente:

$x-≥set_semaphore('Semaphore_WEBCLIENT.txt');

No hay comentarios: