API URL et XML - W4 Product Documentation

Transcription

API URL et XML - W4 Product Documentation
Note technique
W4 Engine
API URL et XML
Sommaire
Cette note technique décrit les mécanismes d'invocation de W4 via un flux http et ou un
flux XML.
1
Fonctionnement
3
2
Syntaxe des appels
5
3
Spécificités du servlet W4
15
4
Utilisation de l'interpréteur XML
19
Référence : W4TN_URL_XML_010_FR
Note technique
W4 Engine
API URL et XML
© 1996 - 2007 W4. Tous droits réservés.
L'acquisition du présent document confère un droit d'utilisation incessible, non exclusif et
personnel et non un droit de propriété. L'utilisation, la copie, la reproduction et la distribution
du présent document sont permises à condition :
1. que la mention de droits d'auteur ci-dessus figure sur toutes les copies et que cette
mention de droits d'auteur et la présente mention d'autorisation apparaissent conjointement ;
2. que le présent document ne soit utilisé qu'à des fins d'information et non commerciales ;
3. que le présent document ne soit modifié de quelque manière que ce soit.
Tous les produits et marques cités sont la propriété de leurs titulaires respectifs.
Les informations contenues dans ce document pourront faire l’objet de
modifications sans préavis.
1
Fonctionnement
Le servlet n'est pas l'équivalent du CGI dans la mesure où il n'est pas associé à un template
W4 mais à une Java Server Page. Il n'est pas possible de remplacer le CGI par le servlet.
Comme on peut le voir sur le schéma ci-dessous, le servlet W4 et l'interpréteur XML reposent
sur le même moteur, défini dans la classe TWFunmarshaller.
Fonctionnement du servlet
Le servlet est appelé via une URL
Fonctionnement de l'interpréteur XML
Création d'une instance de la classe
TWFxmlRequest à partir d'un flux XML
Il reçoit dans ses paramètres d'entrée, la
requête http
Il transforme cette requête en une
TWFhttpRequest (package
fr.w4.marshal)
Le flux XML est automatiquement lu et
transformé en une table de paramètres
Appel du TWFunmarshaller en lui passant la requête
Le TWFunmarshaller lit la requête et appelle le moteur W4
Il retourne une table de résultats (TWFresponse). Les résultats des invocations sont des
objets Java
Le servlet positionne l'attribut "context" de
la ServletRequest avec la liste de résultats
Il 'forward' la requête vers le modèle JSP
spécifié
La principale différence entre le servlet et l'interpréteur XML est que le servlet va publier la
liste de résultats obtenus après les appels au moteur W4 dans une JSP tandis que
l'interpréteur XML renvoie directement cette liste de résultats.
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
4
Syntaxe des appels
2
Les APIs URL et XML se fondent sur la syntaxe des commandes Java de W4 Engine.
Pour plus de détails, veuillez consulter le document suivant :
3 Javadoc
2.1
Le principe : comment traduire une API Java
en une API URL ou XML
Il suffit de s'appuyer sur la signature de la méthode que l'on souhaite invoquer.
Par exemple, si l'on souhaite invoquer l'API wfProcessTask de la classe TWFtaskRef :
Syntaxe Java
TWFtaskRef tasKRef = new TWFtaskRef();
taskRef.setId(1200);
taskRef.wfProcessTask();
Syntaxe URL
inv1=taskRef.processTask&inv1.taskRef.id=1200
Syntaxe XML
<xml version="1.0">
<WFMESSAGE>
<TASKREF>
<ID>1200</ID>
<TASKREFMETHOD>
<PROCESSTASK/>
</TASKREFMETHOD>
</TASKREF>
</WFMESSAGE>
Quel que soit le langage utilisé, on remarque que l'on procède aux opérations suivantes :
ƒ Instanciation de l'objet taskRef
ƒ
ƒ
5
Mise à jour de son champ id
Invocation de la méthode processTask
NOTE TECHNIQUE
Syntaxe des appels
Seule la façon de procéder diffère selon le langage utilisé.
En XML, l'instanciation se fait en spécifiant le tag <TASKREF> tandis qu'en APIs URL, elle
s'effectue lorsque l'on précise inv1=taskRef.processTask.
Quant à la mise à jour du champ "id", en XML, elle se fait en écrivant <ID>1200</ID> et, en
APIs URL, en écrivant inv1.taskRef.id=1200.
L'appel de la méthode processTask diffère en XML et en APIs URL puisqu'en XML, il faut
spécifier <TASKREFMETHOD> <PROCESSTASK/> </TASKREFMETHOD> tandis qu'en APIs URL,
elle est faite automatiquement (parce qu'a été précisé inv1=taskRef.processTask) après
la re-construction de l'objet.
Principe en API XML
<xml version="1.0">
<WFMESSAGE>
<OBJECT_NAME>
<FIELD_NAME>value</FIELD_NAME>
<FIELD_NAME>value</FIELD_NAME>
<OBJECT_NAMEMETHOD>
<METHOD_NAME>
<ARG_NAME>value</ARG_NAME>
<ARG_NAME>value</ARG_NAME>
</METHOD_NAME>
</OBJECT_NAMEMETHOD>
</OBJECT_NAME>
</WFMESSAGE>
Principe en API URL
inv1=<OBJECT_NAME>.<METHOD_NAME>
&inv1.<OBJECT_NAME.<FIELD_NAME>=<value>&inv1.<METHOD_NAME>.<ARG_NAME>=<v
alue>
En APIs URL et XML, il faut enlever les lettres TWF (ou TWFT) du nom de l'objet et ne pas
écrire les lettres wf au début du nom des méthodes.
Exemple d'invocation de la méthode wfCreateActor de
l'objet TWFactor
Création d'un acteur en XML
<xml version="1.0">
<WFMESSAGE>
<ACTOR>
<STR>test</STR>
<EMAIL>[email protected]</EMAIL>
<LASTNAME>My LastName</LASTNAME>
<FIRSTNAME>My FirstName</FIRSTNAME>
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
6
<MANAGERREF>
<ID>1</ID>
</MANAGERREF>
<ACTORMETHOD>
<CREATEACTOR>
<password>
<STR>MyPassword</STR>
</password>
</CREATEACTOR>
</ACTORMETHOD>
</ACTOR>
</WFMESSAGE>
Création d'un acteur via URL
INV1=ACTOR.CREATEACTOR&inv1.ACTOR.STR=test&[email protected]
m
&INV1.ACTOR.LASTNAME=My LastName&INV1.ACTOR.FIRSTNAME=My FirstName
&INV1.ACTOR.MANAGERREF.ID=1&INV1.CREATEACTOR.PASSWORD.STR=MyPassword
2.2
Les exceptions : la recherche, les variables et
les collections d'objets
La recherche (packages fr.w4.buildtime.basic,
fr.w4.*.dynamic et fr.w4.search)
Pour une description du service de recherche et de son utilisation générale en Java, reportezvous au document suivant :
3 Note technique - Développer une application web W4 Engine en Java
(section Les collections)
Il s'agit ici d'apprendre à invoquer la méthode wfSearch<Object> des collections des
packages "dynamic" (exemple : TWFTtask, TWFTworkcase, TWFTactor, TWFTrole, etc).
Signature générique de la méthode search
wfSearch<Object>(TWFT<Object>Selection
tSelection,
sortBy, TWFsortMode sortMode, short maxElem)
TWF<Object>SortBy
L'invocation de cette méthode suppose donc de savoir décrire en XML ou en URL les classes
utilisées en arguments.
7
NOTE TECHNIQUE
Syntaxe des appels
Ecriture des TWFTselection (package fr.w4.search)
Pour ajouter un critère de sélection, il faut spécifier son nom, son type et valeur.
TWFT<Object>Selection tSelection en XML:
<CRITERIA_NAME>
<OBJECTNAME_METHOD>
<SEARCHOBJECT>
<WF_CRIT_NAME>
<WF_OPERATOR>
<TYPE>value</TYPE>
</WF_OPERATOR>
</WF_CRIT_NAME>
</SEARCHOBJECT>
</OBJECTNAME_METHOD>
TWFT<Object>Selection tSelection en URL
<input type="text"
name="inv1.search<Object>.WF_CRIT_<NAME>.WF_<OPERATOR>.<TYPE>" value="">
Pour connaître
ƒ la liste des critères possibles, référez-vous à la documentation Java du package
fr.w4.search.
ƒ
la liste des opérateurs possibles, référez-vous à la documentation Java de la classe
fr.w4.buildtime.basic.TWFoperator.
ƒ
la liste des types possibles est la suivante : "string", "integer", "date", "docId", "id".
Pour un exemple d'utilisation, consultez la page du tutorial "Gestion des messages
téléphoniques" nommée Templates/search.jsp.
Les variables
Les classes pour manipuler les variables workflow sont les suivantes :
ƒ fr.w4.buildtime.basic.TWFdata : représente une donnée (java.lang.String ou
int ou fr.w4.basic.TWFdocId ou fr.w4.basic.TWFdate) workflow.
ƒ
ƒ
fr.w4.buildtime.basic.TWFTdata : collection de données.
fr.w4.runtime.dynamic.TWFrawVariable : variable (composée d'un nom et d'un
TWFTdata) d'une tâche ou d'un dossier.
ƒ
fr.w4.runtime.dynamic.TWFTrawVariable : collection de variables de tâche ou de
dossier.
Ces classes sont "complexes" dans la mesure où un TWFTrawVariable est composé d'un
TWFrawVariable, lui-même composé de TWFTdata qui regroupe des TWFdata. C'est à
cause de ces multiples niveaux d'emboîtement que la syntaxe XML et en URL a été simplifiée.
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
8
Pour comprendre l'invocation des APIs utilisant les variables, vous trouverez ci-dessous les
syntaxes Java, XML et URL de la méthode wfEndTask de la classe TWFtaskRef qui a la
signature suivante : void
wfEndTask(TWFname outValue, TWFTrawVariable
tVariable).
Syntaxe Java : terminaison d'une tâche
TWFtaskRef tasKRef = new TWFtaskRef();
taskRef.setId(1200);
/* Création de la collection de variables passée en sortie de la tâche
*/
TWFTrawVariable tTaskVar = new TWFTrawVariable();
/* Ajout de la variable "string_mono" avec la valeur "string monovaluée" */
tTask.setRaw("string_mono",new TWFdata("string mono-valuée"));
/* Ajout de la variable "string_multi" avec les valeurs
"string1","string2" et "string3" */
tTask.setRaw("string_multi",new TWFTdata( new String[]
{"string1","string2","string3"} ) );
/* Ajout de la variable "date_mono" avec la valeur "1/1/2001" */
tTask.setRaw("date_mono",new TWFdata(new TWFdate(1,1,2001,0,0,0) ));
/* Ajout de la variable "date_multi" avec les valeurs "1/1/2001" et
"2/2/2002" */
TWFTdata tDateMulti = new TWFTdata();
tDateMulti.add(new TWFdate(1,1,2001,0,0,0));
tDateMulti.add(new TWFdate(2,2,2002,0,0,0));
tTask.setRaw("date_multi",tDateMulti);
/* Terminaison de la tâche avec passage en sortie de la collection de
variables */
taskRef.wfEndTask(new TWFname("outValue de la tâche"),tTaskVar);
Syntaxe XML : terminaison d'une tâche
<?xml version="1.0" encoding="ISO-8859-1"?>
<WFMESSAGE>
<TASKREF>
<ID>1200</ID>
<TASKREFMETHOD>
<ENDTASK>
<TVARIABLE>
<string_mono>
<STRING>string mono-valuée</STRING>
</string_mono>
<string_multi>
<STRING>string1</STRING>
<STRING>string2</STRING>
9
NOTE TECHNIQUE
Syntaxe des appels
<STRING>string3</STRING>
</string_multi>
<date_mono>
<DATE>
<DAY>1</DAY>
<MONTH>1</MONTH>
<YEAR>2001</YEAR>
</DATE>
</date_mono>
<date_multi>
<date index="1">
<DAY>1</DAY>
<MONTH>1</MONTH>
<YEAR>2001</YEAR>
</date>
<date index="2">
<DAY>2</DAY>
<MONTH>2</MONTH>
<YEAR>2002</YEAR>
</date>
</date_multi>
</TVARIABLE>
<OUTVALUE>
<STR>outValue de la tâche</STR>
</OUTVALUE>
</ENDTASK>
</TASKREFMETHOD>
</TASKREF>
</WFMESSAGE>
L Remarque
En API URL et XML, tVariable (création de variable sans respect de la casse) peut être
substitué par tcsVariable (création de variable avec respect de la casse).
Syntaxe URL : terminaison d'une tâche
<FORM METHOD="POST" ACTION="/servlet/fr.w4.http.W4Servlet">
<INPUT TYPE="hidden" NAME="inv1" VALUE="taskRef.endTask">
<INPUT TYPE="hidden" NAME="inv1.taskRef.id" VALUE="1200">
<!-- Ajout de la variable "string_mono" avec la valeur "string monovaluée" -->
<INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_mono.string"
value="string mono-valuée">
<!-- Ajout de la variable "string_multi" avec les valeurs
"string1","string2" et "string3" -->
<INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string"
value="string1">
<INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string"
value="string2">
<INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string"
value="string3">
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
10
<!-- Ajout de la variable "date_mono" avec la valeur "1/1/2001" -->
<input size="5" type="text"
name="inv1.endTask.tVariable.date_mono.date.day" value="1">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_mono.date.month" value="1">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_mono.date.year" value="2001">
<!-- Ajout de la variable "date_multi" avec les valeurs "1/1/2001" et
"2/2/2002" -->
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.1.day" value="1">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.1.month" value="1">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.1.year" value="2001">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.2.day" value="2">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.2.month" value="2">
<input size="5" type="text"
name="inv1.endTask.tVariable.date_multi.2.year" value="2002">
</FORM>
L Remarques
ƒ En API URL et XML, tVariable (création de variable sans respect de la casse) peut être
substitué par tcsVariable (création de variable avec respect de la casse).
ƒ Dans cet exemple, il est intéressant de noter l'utilisation des variables multi-valuées de
type date.
Les collections d'objets
L'utilisation des collections d'objets dans les APIs URL et XML ne soulève pas de difficultés
particulières. La syntaxe pour utiliser une collection est la suivante :
Syntaxe URL
inv1=TOBJECT_NAME.METHOD_NAME
&inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value1
&inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value2
&inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value3
ou
inv1=TOBJECT_NAME.METHOD_NAME
&inv1.TOBJECT_NAME.1.FIELD_NAME=value
&inv1.TOBJECT_NAME.2.FIELD_NAME=value2
&inv1.TOBJECT_NAME.3.FIELD_NAME=value3
11
NOTE TECHNIQUE
Syntaxe des appels
Syntaxe XML
<WFMESSAGE>
<TOBJECT_NAME>
<OBJECT_NAME index="1">
<FIELD_NAME>value1</FIELD_NAME>
</OBJECT_NAME>
<OBJECT_NAME index="2">
<FIELD_NAME>value2</FIELD_NAME>
</OBJECT_NAME>
<OBJECT_NAME index="3">
<FIELD_NAME>value3</FIELD_NAME>
</OBJECT_NAME>
</TOBJECT_NAME>
</WFMESSAGE>
2.3
Chaînage des appels
Le chaînage consiste à appeler plusieurs APIs successivement. Par exemple, invoquer l'API
wfNewCaseWithInitiator (création, démarrage d'un dossier), qui renvoie la première
tâche de ce dossier, et effectuer cette première tâche (wfProcessTask). Cela suppose non
seulement d'être en mesure d'appeler successivement ces 2 APIs, mais aussi d'utiliser dans le
deuxième appel (wfProcessTask) le résultat renvoyé par la première API.
Le chaînage diffère quelque peu entre les APIs XML et URL.
Chaînage des appels avec les APIs URL
Comme expliqué ci-dessus, un appel URL a cette syntaxe :
inv1=<OBJECT_NAME>.<METHOD_NAME>&inv1.<OBJECT_NAME.<FIELD_NAME>=<value>&
inv1.
<METHOD_NAME>.<ARG_NAME>=<value>
Le mot clé inv1 spécifie qu'il s'agit de "l'invocation numéro 1". Le servlet de W4 accepte un
nombre illimité (sous réserve des capacités mémoire de la machine utilisée) d'invocations.
Pour chaîner n appels, il suffit donc d'écrire les commandes selon le format suivant :
inv1=<OBJECT_NAME>.<METHOD_NAME>&inv1.<OBJECT_NAME.<FIELD_NAME>=<value>&
inv1.
<METHOD_NAME>.<ARG_NAME>=<value>&
inv2=<OBJECT_NAME>.<METHOD_NAME>&inv2.<OBJECT_NAME.<FIELD_NAME>=<value>&
inv2.
<METHOD_NAME>.<ARG_NAME>=<value>
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
12
...
invN=<OBJECT_NAME>.<METHOD_NAME>&invN.<OBJECT_NAME.<FIELD_NAME>=<value>&
invN.
<METHOD_NAME>.<ARG_NAME>=<value>
Attention !
Contrairement au CGI de W4, les paramètres ne sont pas partagés entre les invocations.
Attention !
Contrairement au CGI de W4, la numérotation des invocations doit être continue. En d'autres
termes,
il
n'est
pas
possible
de
chaîner
les
commandes
suivantes
:
inv1=taskRef.processTask&inv4=taskRef.setTaskVariable.
Seule
l'invocation
numéro 1 sera exécutée.
Pour récupérer le résultat d'une commande précédente, il faut utiliser le mot-clé @invN.
L'exemple ci-dessous montre la récupération du résultat de la première commande
newCaseWithInitiator (une instance de la classe TWFtask) et l'appel sur cet objet
résultat de la méthode processTask. L'exemple ci-dessous démontre également qu'il est
possible de récupérer la valeur d'un champ de l'objet résultat. En l'espèce,
@inv1.activitySubProcedure contient le nom de l'activité associée à cette tâche.
Il serait également possible d'écrire @inv1.actorRef.str pour récupérer le nom de
connexion
de
l'acteur
qui
a
cette
tâche
en
charge.
Il est à noter que si une API ne renvoie pas de résultat, comme l'API wfProcessTask, c'est
l'objet contenant la méthode qui est stocké dans la table de résultats. Dans le cas de l'API
wfProcessTask, il s'agira d'une instance de la classe TWFtaskRef (ou TWFtask).
wfNewCaseWithInitiator suivi de wfProcessTask
inv1=RuntimeFactory.newCaseWithInitiator&inv1.newCaseWithInitiator.prefi
xCaseName.str=test
&inv1.newCaseWithInitiator.makesUniqueName=true&inv1.newCaseWithInitiato
r.procedure.str=W4_MSGTel
&inv1.newCaseWithInitiator.initiator.id=2200
&[email protected]&[email protected]
Chaînage des appels avec les APIs XML
Le fonctionnement du chaînage avec les APIs XML est similaire à celui des APIs URL. Seule la
façon d'écrire ces appels diffère. Voici l'exemple utilisé ci-dessus traduit en XML :
wfNewCaseWithInitiator suivi de wfProcessTask
<xml version="1.0">
<WFMESSAGE>
<RUNTIMEFACTORY>
13
NOTE TECHNIQUE
Syntaxe des appels
<RUNTIMEFACTORYMETHOD>
<NEWCASEWITHINITIATOR>
<PREFIXCASENAME>
<STR>test</STR>
</PREFIXCASENAME>
<MAKESUNIQUENAME>true</MAKESUNIQUENAME>
<PROCEDURE>
<STR>W4_MsgTel</STR>
</PROCEDURE>
<INITIATOR>
<ID>2200</ID>
</INITIATOR>
</NEWCASEWITHINITIATOR>
</RUNTIMEFACTORYMETHOD>
</RUNTIMEFACTORY>
<INV1>
<INV1METHOD>
<PROCESSTASK/>
</INV1METHOD>
</INV1>
</WFMESSAGE>
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
14
Spécificités du servlet W4
3
3.1
La gestion du contexte utilisateur : la classe
fr.w4.http.TWFhttpContext
C'est la classe fr.w4.http.TWFhttpContext qui a en charge la gestion du contexte
utilisateur. Cette classe hérite de la classe fr.w4.session.TWFsessionContext.
Pour plus de détails sur cette classe, reportez-vous au document suivant :
3 Note technique - Développer une application web W4 Engine en Java
Les éléments du contexte utilisateur sont les suivants :
ƒ id : identifiant de l'acteur connecté
ƒ
ƒ
ƒ
ƒ
ƒ
lid : identifiant de connexion de l'acteur connecté
lg : langue de l'acteur connecté
srv : nom du serveur W4 utilisé (optionnel si le servlet est exécuté sur la même machine
que le serveur W4)
wfs : nom de l'instance du serveur W4 utilisé
sesType : driver utilisé JNI (par défaut) ou RMI
Outre ces éléments, le TWFhttpContext contient la liste de résultats obtenue par le servlet.
Pour récupérer cette liste, il faut appeler la méthode getLastCommandResult. Cette
méthode renvoie une instance de la classe fr.w4.marshal.TWFresponse.
Le contexte utilisateur est transmis par le servlet à la JSP en enrichissant la requête http. Le
servlet W4 enrichit les attributs de la requête http avec un objet portant le nom de "context".
La récupération du contexte utilisateur dans la JSP se fait alors comme suit :
Récupération du contexte utilisateur dans une JSP
<%
/* récupération du contexte */
TWFhttpContext context =
(TWFhttpContext)request.getAttribute("context");
/* récupération des résultats des ordres passés par le servlet sur le
moteur W4 */
TWFresponse w4Response = context.getLastCommandResult();
/* récupération du résultat de la méthode 'searchTask' */
TWFTtask tTask = w4Response.resultOf("searchTask");
%>
15
NOTE TECHNIQUE
Spécificités du servlet W4
Attention !
Les nouvelles applications ne doivent pas utiliser la méthode w4Response.resultAt(0)
Une fois le contexte récupéré dans la JSP, il faudra à nouveau le transmettre à la servlet lors
du prochain appel. Le servlet W4 ne s'appuyant pas sur les mécanismes de session http, la
transmission s'effectue en écrivant :
Transmission du contexte de la JSP vers le Servlet
<-- Transmission dans un formulaire -->
<FORM METHOD="POST"
ACTION="/servlet/fr.w4.http.W4Servlet?<%=context.writeCtx()%>..."
</FORM>
<-- Transmission dans un hyperlien -->
<A HREF="/servlet/fr.w4.http.W4Servlet?<%=context.writeCtx()%>...">Lien
hypertexte</A>
3.2
L'utilisation des Java Server Pages (JSP)
Pour spécifier la JSP à laquelle le servlet doit transférer les résultats, il faut utiliser le motclé :
ƒ activity : si le formulaire à afficher est celui d'une activité (le servlet appellera un
template stocké dans le répertoire Activities),
ƒ
ƒ
template : dans tous les autres cas.
error : pour préciser la page à afficher si une erreur survient.
Pour comprendre le mécanisme de "forward", il faut se référer à l'organisation d'un projet
JSP-W4.
Exemple d'arborescence :
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
16
La servlet est, en quelque sorte, stockée dans le répertoire WEB-INF (si le moteur de servlet
"TOMCAT" est utilisé). Pour appeler un template stocké dans le répertoire Public, il faudra
donc écrire template=Public/index.jsp, par exemple.
3.3
Paramètres d'initialisation
Le servlet a les paramètres d'initialisation suivants :
ƒ trace.mode : Active ou désactive le mode trace (valeurs possibles : true|false)
ƒ
log.directory : Précise le répertoire où générer les logs (nom des fichiers log
System<PID>.log, nom des fichiers trace System<PID>.tra). Par défaut, la sortie se fait
sur System.out.
ƒ
ƒ
activity.directory : Spécifie le répertoire où se trouvent les formulaires des activités.
login.confirm : chemin relatif vers la page de ré-activation de la session (ex :
Templates/loginConfirm.jsp). Si ce paramètre n'est pas renseigné, cette
ƒ
ƒ
ƒ
ƒ
3.4
fonctionnalité est désactivée.
crypto.mode : active ou désactive le cryptage des sessions (valeur par défaut est
false).
crypto.pwd : mot de passe utilisé pour le cryptage.
SSO.enabled : active le mode "SSO de confiance" (valeurs possibles : true|false,
défaut : false)
SSO.httpFieldName : nom du champ dans l'entête HTTP contenant le login W4 (valide
uniquement quand SSO.enabled=true).
Cryptage des URLs
Le cryptage des URLs utilise le Java Cryptography Extension 1.2.1 (JCE). L'algorithme utilisé
est le PBEWithMD5AndDES. Il s'agit d'un cryptage fondé à la fois sur un mot de passe et sur
MD5 et DES.
Si vous utilisez un JDK1.4, cette installation est inutile puisque cette version du JDK intègre le
JCE1.2.1.
ƒ Vérifier que votre JDK peut utiliser le JCE1.2.1
ƒ Télécharger le JCE 1.2.1 depuis l'adresse suivante :
3 http://java.sun.com/products/jce/index-121.html
ƒ
ƒ
'Dézipper' l'archive jce-1_2_1.zip
Copier dans le répertoire JDK_HOME/jre/lib/ext, les fichiers suivants : JCE-
1_2_1/lib/jce1_2_1.jar, JCE-1_2_1/lib/local_policy.jar, JCE1_2_1/lib/sunjce_provider.jar et JCE-1_2_1/lib/US_export_policy.jar
Attention, la transmission du contexte cryptée à des fonctions JavaScript nécessite d'utiliser,
dans certains navigateurs, le code suivant :
Transmission du contexte à des fonctions JavaScript
<%
String ctx = context.writeCtx();
String encCtx = java.net.URLEncoder.encode(ctx);
17
NOTE TECHNIQUE
Spécificités du servlet W4
%>
<a href="javascript:openWindow('<%=encCtx%>')">lien</a>
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
18
4
Utilisation de l'interpréteur XML
Attention !
Pour pouvoir utiliser l'interpréteur XML, il faut vous procurer les librairies Java suivantes :
ƒ
jaxp.jar
3 http://java.sun.com/
ƒ
xalan.jar et xerces.jar
3 http://xml.apache.org/
Vous devez ensuite mettre à jour votre variable d'environnement CLASSPATH.
L'interpréteur XML s'utilise de façon programmatique en Java. Ci-dessous un exemple
d'utilisation :
Appel de l'interpréteur XML
import
import
import
import
import
import
import
import
import
fr.w4.TWFexception;
fr.w4.basic.*;
fr.w4.runtime.ref.*;
fr.w4.runtime.dynamic.*;
fr.w4.buildtime.basic.*;
fr.w4.buildtime.ref.*;
fr.w4.buildtime.dynamic.*;
fr.w4.session.*;
fr.w4.marshal.*;
import java.io.*;
/**
* This class calls the w4's xml interpreter
*/
public class TWFxmlTest
{
/**
* main method
* @param argv : array of string (argv[0] contains the name of the xml
file to interpret
*/
public static void main(String[] argv)
{
if(argv.length != 1)
{
System.err.println("Bad usage");
System.err.println("Usage is :\njava TWFxmlTest endTask.xml");
System.exit(-1);
}
19
NOTE TECHNIQUE
Utilisation de l'interpréteur XML
TWFsession w4Session = null;
try
{
w4Session = new TWFnativeSession();
w4Session.setServerName("myW4Server");
w4Session.setInstanceName("w4adm");
/* open a channel to W4 */
w4Session.openConnection();
/* login */
w4Session.login("w4adm","w4adm");
/* create an XML request */
TWFxmlRequest xmlRequest = new TWFxmlRequest(new File(argv[0]));
/* instantiate a TWFunmarshaller using the w4Session and the
xmlRequest */
TWFunmarshaller unmarshaller = new TWFunmarshaller(w4Session,
xmlRequest);
/* execute the xmlRequest and
get back a TWFresponse object containing the result list */
TWFresponse response = unmarshall.exec();
/* go through the result list */
java.util.Enumeration enum = response.elements();
while(enum.hasMoreElements())
{
Object obj = enum.nextElement();
System.out.println(obj.toString());
}
/* logout */
w4Session.logout();
}
catch(Exception e)
{
e.printStackTrace(e);
}
catch(Throwable t)
{
System.err.println(t.getLocalizedMessage());
}
/* be sure to close the channel using the finally clause */
finally
{
if(w4Session != null && w4Session.getSessionHandle() > 0)
{
try
{
w4Session.closeConnection();
}
catch(Throwable t)
{
System.err.println(t.getLocalizedMessage());
W4 BPM Suite
NOTE TECHNIQUE
API URL et XML
20
}
}
}
}
}
Compiler ce code avec la commande :
javac -classpath
.;c:\javalib\wfjlib.jar;c:\javalib\xalan.jar;c:\javalib\xerces.jar;c:\ja
valib\jaxp.jar;
Pour interpréter le fichier XML c:\test\endTask.xml, utiliser la commande suivante :
java :
-classpath
.;c:\javalib\wfjlib.jar;c:\javalib\xalan.jar;c:\javalib\xerces.jar;c:\ja
valib\jaxp.jar TWFxmlTest c:/temp/test.xml
21
NOTE TECHNIQUE
Utilisation de l'interpréteur XML
Note technique
W4 Engine
API URL et XML
Pour toute remarque ou suggestion concernant ce document, vous pouvez contacter le
support technique W4, en précisant la référence W4TN_URL_XML_010_FR :
ƒ par le service de traitement des dossiers Supportflow sur MyW4.com, à l’adresse suivante :
http://support.myw4.com
ƒ par courrier électronique : [email protected]
ƒ par téléphone : 33 (0) 820 320 762