> Tech > Scénario 4 : Appeler par programmation les fonctions Access for Web

Scénario 4 : Appeler par programmation les fonctions Access for Web

Tech - Par iTPro - Publié le 24 juin 2010
email

Comme dans les deux scénarios précédents, on peut utiliser ici l’URLGenerator pour créer des chaînes URL hyperlien pour des fonctions Access for Web spécifiques. C’est de loin l’un des aspects les plus puissants (et peu connu) du produit iSeries Access for Web.

Par exemple, j’ai un logiciel qui traite

Scénario 4 : Appeler par programmation les fonctions Access for Web

des transactions et qui transforme les données en lisant et en écrivant des fichiers de base de données i5/OS, des fichiers spoulés, des fichiers IFS et autres. Je veux enrichir ce logiciel afin qu’il présente le contenu à mes utilisateurs dans des formats plus conviviaux, comme des documents PDF et des feuilles de calcul Microsoft Excel. Au lieu de coder moi-même la logique qui transformera les données des fichiers spoulés en un PDF, je peux appeler par programme le servlet PDF transform d’Access for Web. De la même manière, si je veux convertir une table de base de données en feuille de calcul Excel, je n’ai pas besoin d’apprendre le format du fichier Excel ni d’écrire une logique de transformation compliquée. Il me suffit d’invoquer la fonction base de données d’Access for Web et de transmettre les paramètres appropriés pour indiquer que la sortie doit me parvenir sous la forme d’une feuille de calcul Excel.

Pour visualiser le javadoc concernant l’outil URLGenerator, dézipez le contenu du fichier iwaURL.jar, que vous pouvez télécharger à partir du site Web externe d’iSeries Access for Web. Notez au passage que les servlets et les paramètres qui sont directement pris en charge par l’URLGenerator sont ceux qui sont publiés dans la documentation URL d’Access for Web (également disponible sur le site Web externe). L’utilisateur peut librement appeler tout autre servlet ou paramètre, mais Access for Web ne garantit nullement que les noms des servlets, les noms des paramètres ou les valeurs autorisées resteront identiques dans les releases ou service packs futurs.

La sortie de l’outil URLGenerator devrait se présenter ainsi :

Servlet title: View Job Log
Description: Displays the job log for an
iSeries job. Servlet URL: iWAJobLog
Supported parameters:
Parameter title (required): Job
information
Description: Identifies the iSeries job
information in the format
JOBNUMBER/USERPROFILE/JOBNAME.
Parameter URL: JobInfo
No specific values required.
Parameter title: Page number
Description: Identifies the page to
display.
Parameter URL: page
No specific values required.

Les titres et descriptions de l’exemple ci-dessus sont des chaînes en U.S. English, car c’est le ResourceBundle qui est référencé. Pour afficher l’une des autres langues reconnues par Access for Web, utilisez le ResourceBundle approprié :

// Note: The CLASSPATH must include the
// webaccessMRI.jar file in order to use
// translated strings, in addition to
// either the webaccess.jar file or
// iwaURL.jar file. The webaccessMRI.jar
// file is located in
// /QIBM/ProdData/Access/Web2/lib/
Locale german = new locale("de", "DE");
ResourceBundle bundle =
ResourceBundle.getBundle("com.ibm.as400.
webaccess.util.WebAccessMRI", german);
if (bundle == null= bundle =
URLGenerator.US_ENGLISH_BUNDLE;

La sortie contiendra maintenant des titres et des descriptions en allemand, comme ceci :

Servlet title: Jobprotokoll anzeigen
Description: Zeigt das Jobprotokoll für
einen iSeries-Job an.
Servlet URL: iWAJobLog
Supported parameters:
Parameter title (required):
Jobinformation
Description: Gibt die
iSeries-Jobinformation im format
JOBNUMMER/BENUTZERPROFIL/JOBNAME an.
Parameter URL: JobInfo
No specific values required.
Parameter title: Seitenzahl
Description: Gibt an, wie viele Seiten
angezeigt werden sollen.
Parameter URL: page
No specific values required.

Pour générer une chaîne URL complète que l’on pourra utiliser pour un hyperlien ou coller dans le navigateur Web, il faut construire un objet URLGenerator et définir d’autres informations :

ServletDescriptor ListJobsServlet =
URLGenerator.getDescriptor(
"iWAJobList")[0] ;
ServletParameter jobTypeParm =
listJobsServlet.getParameter("jobType");
URLGenerator generator = new URLGenerator(
listJobsServlet);
generator.setBaseURI(
"http://server:port/webaccess/");
generator.setPathInfo(
"miscellaneous_and_optional_URL_text");
generator.addServletParameter(
jobTypeParm, "user");
String url = generator.generate();
System.out.println(url);

L’URL générée se présente ainsi : http://server:port/webaccess/iWAJob List/miscellaneous_and_optional _URL_text?jobType=user.

Désormais, nous pouvons traiter une fonction Access for Web particulière comme un service Web, en invoquant son URL par programmation. Pour bien faire cela, nous devons connaître l’URL de la fonction ainsi que le type de contenu qu’elle renverra. Selon l’application, on souhaitera parfois invoquer des URL qui renvoient HTML. Vu sous un autre angle, d’autres fonctions utiles incluent des URL qui renvoient des types de contenu alternés tels que des feuilles de calcul Excel, des PDF et du texte délimité par des virgules.

L’exemple simple de la figure 4 montre comment invoquer par programmation un URL Access for Web à partir de Java. On utilise ici le servlet iWAPing qui ne demande aucune information d’authentification.

Pour invoquer l’une des autres fonctions Access for Web, il vous faudra fournir au serveur Web votre ID et mot de passe utilisateur dans un entête HTTP Basic Authentication. Cela demande trois lignes de code supplémentaires :

import java.net.*;
import java.io.*;
import sun.misc.BASE64Encoder;
URL url = new URL(
"http://server:port/webaccess/iWAPing);
HttpURLConnection conn = (
HttpURLConnection)url.openConnection();
// Encode the userid and password in
base-64, per the HTTP specification.
String credentials = "user:password";
String encodedCredentials = new
BASE64Encoder().encodeBuffer(
credentials.getBytes("iso_8859-1"));
conn.setRequestProperty("Authorization",
"Basic "+encodedCredentials);
InputStream stream = conn.getInputStream();

A l’aide du code ci-dessus, vous pouvez appeler n’importe quel URL Access for Web. Bien que la plupart des URL documentés dans Access for Web ne délivrent que du contenu HTML, il en existe certains (documentés et non documentés) qui délivrent d’autres types de contenu. Ce sont les plus intéressants. A noter que n’importe quel exemple d’URL ou de paramètre non documenté fonctionne pour une version spécifique d’Access for Web. Cependant, les noms de servlets, les noms de paramètres et les valeurs de paramètres autorisées sont tous susceptibles de changer au fil des service packs et des futures releases.

Puisque nous pouvons invoquer n’importe quel URL HTTP à partir du code Java, voyons comment nous pourrions appeler une fonction Access for Web non documentée. En examinant la page source d’une page Access for Web particulière, on voit quels paramètres sont transmis sur le formulaire vers le servlet approprié. Même si l’on a un peu l’impression de tricher, la consultation de la page source est l’un des moyens les plus simples de trouver les noms et les valeurs de paramètres corrects pour des fonctions non documentées.

La figure 5 montre comment on peut invoquer la fonction Run SQL de l’onglet Database dans Access for Web (figure 6) de telle sorte qu’une requête SQL soit exécutée et que la sortie soit renvoyée comme un document PDF. A noter que l’URL Generator n’est pas utilisé, puisque les paramètres que nous spécifions ne figurent pas dans la documentation du servlet iWADbRun- SQL (par conséquent, URLGenerator ignorera leur existence).

Téléchargez gratuitement cette ressource

*** SMART DSI *** VERSION NUMÉRIQUE

*** SMART DSI *** VERSION NUMÉRIQUE

Découvrez SMART DSI, la nouvelle revue du Décideur IT en version numérique. Analyses et dossiers experts pour les acteurs de la transformation numérique de l'entreprise, Gagnez en compétences et expertise IT Professionnelle avec le contenu éditorial premium de SMART DSI.

Tech - Par iTPro - Publié le 24 juin 2010