Acteur automatique

Transcription

Acteur automatique
Note technique
W4 Engine
Acteur
automatique
Cette note technique décrit le fonctionnement et la programmation de l’acteur automatique
sous W4 Engine. La programmation de l’envoi de mail par l’acteur automatique est traitée
en détail.
Sommaire
Elle s'adresse aux développeurs et chefs de projet en charge de réaliser des applications
W4.
1
Description de l'acteur automatique
3
2
Débogage de l’acteur automatique
11
3
Exemples d’utilisation en Java
15
4
Exemples d’utilisation en .NET
20
5
Exemples d’utilisation en COM/ASP
26
6
Scripts en langage W4
32
7
Annexe 1 - Langage W4
35
8
Annexe 2 - Autres commandes de l’acteur automatique
46
Référence : W4TN_AUTO_ACTOR_004_FR
Note technique
W4 Engine
Acteur automatique
© 2005 - 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.
Description de l'acteur
automatique
1
1.1
Fonctionnement général
Principe de l’acteur automatique
L’acteur automatique W4 est un programme client autonome de W4 Engine.
Il est installé avec chaque instance de W4 Engine et s’exécute sur la même machine que
« son » instance de W4 Engine.
L'acteur automatique est lancé automatiquement avec W4 Engine, dans l’installation
standard par défaut.
Veuillez vous reporter au document suivant :
3 Manuel d'exploitation de W4 Engine (section Fichiers de configuration)
Le nom de son binaire est wfautomatic(.exe). Il utilise les API C/C++ de W4 Engine.
La raison d’être de l’acteur automatique est d’effectuer des traitements informatiques qui
lui sont notifiés par l’intermédiaire de tâches, tout comme pour un acteur humain.
Il apparaît donc, dans la modélisation, comme un rôle spécial – automatic - auquel sont
assignées les activités représentant des traitements informatiques.
Les étapes associées à ces activités ont une icône particulière les distinguant des étapes
attribuées à des acteurs humains.
Scripts de l’acteur automatique
La plupart des concepts applicables aux acteurs humains sont applicables dans le
contexte de l’acteur automatique W4 : il dispose d’un compte propre avec identifiant
– automatic - et mot de passe ; il possède des rôles, une corbeille, etc., à un détail
près : si un acteur humain sait interpréter et remplir un formulaire, le programme
incarnant l’acteur automatique « préfèrera » exécuter un script dans lequel seront décrits
les traitements à effectuer. Par exemple : envoi d’un mail d’information, mise à jour
d’une base métier, etc.
Le modèle (template) associé à une activité destinée à un acteur automatique doit donc
être un modèle de script et non un modèle d’écran HTML.
Pour distinguer ces scripts des formulaires « humains », l’acteur automatique se voit
affecter la langue conventionnelle auto, les formulaires de cette langue étant en fait des
scripts.
Le nom d’un fichier script acteur automatique a le format suivant :
<nom de l’activité>.auto.html
Notez la présence de l’attribut .html bien que le modèle ne soit pas du HTML.
Le langage de script de l’acteur automatique est décrit plus bas.
3
NOTE TECHNIQUE
Description de l'acteur automatique
Attention !
Les modèles de script de l’acteur automatique doivent être sur le serveur supportant
l’instance de W4 Engine et non sur le serveur de présentation supportant l’application W4
(dans le cas où ils sont distincts).
Par défaut, les acteurs automatiques de toutes les instances recherchent les modèles
selon
le
même
principe
que
le
moteur,
soit
par
défaut
sous
<W4Engine_Home>/Activities, où <W4Engine_Home> représente le répertoire
d’installation de W4 Engine, sauf si, pour l’instance considérée, le répertoire est redéfini
par une ligne <instance>.alias.Activities dans le fichier w4server.cfg.
Veuillez vous reporter au document suivant :
3 Manuel d'exploitation de W4 Engine (section Fichiers de configuration)
Erreur d’exécution de script de l’acteur automatique
En cas d’erreur à l’exécution du script par l’acteur automatique (wfautomatic.exe), la
tâche correspondante n’est pas terminée mais réassignée par l’acteur automatique au
responsable du dossier (rôle ou acteur).
Dans ce cas, le formulaire de la tâche présentée à l’acteur est :
<nom de l’activité>.<lg>.<attribut>, où <lg> est la langue de l’acteur et
<attribut> vaut selon le contexte applicatif asp, jsp, aspx ou html.
Si ce modèle n’existe pas, le modèle <nom de l’activité>.<attribut> est
présenté.
Attention !
L’absence de modèle pour un acteur humain est une cause d’erreur très fréquente. Les
modèles de bibliothèques standard livrés avec W4 Studio traitent ce cas.
Sérialisation des traitements
L’acteur automatique traite ses tâches consécutivement. Il n’y a pas de parallélisme. En
conséquence, si le traitement moyen d’une tâche est de 1 s, l’utilisation du workflow ne
devra pas générer plus de 3600 tâches par heure sous peine de voir la corbeille de
l’acteur automatique croître indéfiniment.
Dans ce cas de figure, il est préférable de réaliser des connecteurs multi-threadés, à
l’aide du serveur de connecteurs.
Compte acteur automatique
wfautomatic se connecte avec l’identifiant conventionnel du compte de l’acteur
automatique, automatic (id = 2), mot de passe auto.
Le compte du participant d’identifiant automatic est décrit et géré, comme tout autre
acteur, à travers l’interface d’administration. Ce compte ne peut être supprimé.
On définira donc pour l’activité automatique Acti le script Acti.auto.html (notez la
présence de l’attribut .html bien que le modèle ne soit pas du HTML).
Il s'agit d'un utilisateur nommé qui utilise donc une licence de ce type qui lui est réservée
(à l'instar du compte d’administration d’identifiant w4adm). Il peut donc toujours se
connecter. Ces 2 licences sont toujours incluses et gratuites.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
4
Attention !
Il est fortement déconseillé de modifier les attributs de l’acteur automatique, notamment
sa langue et son mot de passe.
Lancement de l’acteur automatique
L’acteur automatique est lancé avec les autres tâches du serveur W4 Engine par
l’intermédiaire du fichier sys/Config.<instance>, soit par sys/Config.w4adm pour
l’instance par défaut.
Veuillez vous reporter au document suivant :
3 Manuel d'exploitation de W4 Engine (section Fichier de configuration
Config.<instance>)
Dès son lancement, wfautomatic.exe se connecte au serveur de workflow, sous son
identifiant d’acteur, automatic, avec le mot de passe, auto. Il reste connecté tant qu’il
n’est pas arrêté.
Rôles
L’acteur automatique possède deux rôles système : automatic et reassign.
automatic est le rôle prédéfini pour l’acteur automatique. Il n’a aucune propriété
système particulière.
En revanche, le rôle système reassign donne le droit à un acteur le possédant de
réassigner une tâche qui lui est attribuée.
Comme expliqué ci-dessus, cette possibilité est utilisée par l’acteur automatique quand il
détecte une erreur dans le script de la tâche. Il réassigne alors la tâche au responsable
(au responsable désigné ou, à défaut, au rôle responsable en mode libre service), c’està-dire, en principe, à un acteur interactif.
D’autres rôles peuvent être assignés si nécessaire.
Attention !
L’acteur consulte uniquement sa corbeille « personnelle » : il recherche les tâches
assignées nominativement au compte automatic. Il ne recherche pas les tâches en
libre-service pour son ou ses rôles.
De plus, il est fortement déconseillé d’affecter le rôle automatic à un autre acteur que
l’acteur automatic.
En effet, les étapes destinées à l’acteur automatic sont assignées selon le mode
Acteur avec la charge de travail la plus faible pour le rôle automatic. Si plusieurs
acteurs ont le rôle automatic, les tâches associées pourraient potentiellement être
affectées à un autre acteur que celui visé : automatic.
Algorithme de l’acteur automatique
Après son démarrage, l’acteur consulte sa corbeille (API SearchTask) et exécute
chacune des tâches.
Pour chaque tâche, le programme :
ƒ appelle l’API ProcessTask ;
5
NOTE TECHNIQUE
Description de l'acteur automatique
ƒ
ƒ
ƒ
exécute une à une les lignes du script ;
si une erreur survient sur une ligne du script : interrompt l’interprétation du script et
appelle l’API ReassignTask. Les erreurs d’exécution du script peuvent être :
▫ ligne non reconnue,
▫ code retour d’une commande appelée non nul ;
si l’exécution du script s’est bien terminée : appelle l’API EndTask, sauf si la tâche à
changé d’état (par exemple, terminée ou « remise » dans la corbeille par un
OnHoldTask). Dans ce cas, il considère que le script a pris en charge l’état de la
tâche automatique et ne s’en mêle donc pas.
Une fois toutes les tâches traitées (c’est-à-dire terminées, réassignées ou « remises »
dans la corbeille), l’acteur automatique attend T secondes (60 par défaut) puis interroge
W4 Engine pour savoir si de nouvelles tâches ont été créées depuis sa dernière
interaction grâce à l’API CheckNewTask.
Notez que cette API est très rapide car elle ne fait pas appel à la base de données, ni
même à l’ordonnanceur (scheduler) mais à la surveillance de session, qui note au
passage si de nouvelles tâches sont créées entre deux appels pour le compte de la
session.
Si de nouvelles tâches ont été créées il les recherche (API SearchTask) et reprend le
traitement décrit ci-dessus, attend à nouveau T secondes et recommence. Il répète cette
opération N fois (10 par défaut). Après cela il consulte à nouveau toute sa corbeille. Il
retrouve dans sa corbeille les tâches qu’il a suspendues pendant les traitements
précédents ainsi que les nouvelles tâches arrivées pendant les dernières T secondes.
1.2
Exploitation de l’acteur automatique
Syntaxe du lancement en ligne de commande :
wfautomatic[.exe] <T> <N>
Exemples
CheckNewTask
SearchTask
wfautomatic 15 60
Toutes les 15 s (*)
Toutes les 60 x 15s, soit 15 mn (*)
wfautomatic 60 60
Toutes les 60 s (*)
Toutes les 60 x 60s, soit 1 h (*)
wfautomatic
Toutes les 30 s (*)
Toutes les 30 x 10s, soit 5 mn (*)
(*) en excluant les temps de traitement des tâches.
Veuillez vous reporter au document suivant :
3 Manuel d'exploitation de W4 Engine (section Fichier de configuration
Config.<instance>)
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
6
1.3
Langage de commande
Fonctionnement
Introduction
Les trois principales commandes sont :
ƒ @include_url, exécution d’un script « distant » par appel d’un URL ;
ƒ href=, permet d’exécuter une suite d’API W4 exprimées au format URL CGI ;
ƒ system=, soumission d’une commande à l’interpréteur de la plateforme.
Exemple
system=ftp -n -i –s c:\temp\w4stdin.tmp aberlour
Chaque ligne représente une commande que l’acteur automatique exécute en séquence.
Une ligne vide ou blanche est ignorée.
Une ligne non reconnue provoque une erreur fatale. Elle génère un message d’erreur
dans le fichier journal de l’acteur automatique wfautomatic<pid>.log.
Un fichier script vide ne génère pas d’erreur.
Quand l’interprétation est terminée, l’acteur automatique termine la tâche sauf si l’état
de la tâche automatique a été modifié, par exemple en la suspendant ou en la
terminant : l’acteur automatique en conclut que les commandes qu’il a exécutées sont la
cause de ce changement d’état. Il n’interfère pas.
Dans le cas où l’acteur automatique termine la tâche, il le fait sans positionner les
variables entrée/sortie et sortie de la tâche.
Si des valeurs résultats sont nécessaires, il faut que l’une des commandes les positionne
en terminant la tâche.
En cas d’erreur sur une ligne, la séquence d’erreur standard est :
ƒ une journalisation d’erreur est faite dans le fichier wfautomatic<pid>.log (selon le
mécanisme standard de journalisation du serveur) où <pid> est le process id de
l’acteur automatique ;
ƒ le traitement est arrêté à cette ligne ;
ƒ l’acteur automatique réassigne sa tâche à l’acteur responsable du dossier ou en libreservice au rôle responsable de la procédure si le responsable du dossier n’est pas
nommé.
Pré-processing
Le paramétrage des scripts avec les données contextuelles se fait à l’aide du langage
propriétaire W4 expliqué ci-dessous (les objets du langage W4 sont repérés par le
caractère @ en tête de leurs identifiants).
Avant d’interpréter son script, l’acteur automatique soumet la totalité du fichier
correspondant au « parser » du langage W4 qui substitue aux paramètres leurs valeurs.
7
NOTE TECHNIQUE
Description de l'acteur automatique
Toutes les possibilités du langage W4 peuvent être utilisées. La seule condition est qu’en
sortie du traitement de substitution, la forme résultat soit valide.
Un fichier vide ou des lignes vides ou avec espaces est une forme légale.
Exécution déportée par @include_url
Les possibilités du langage propriétaire de W4 étant très limitées en dehors de l’accès à
W4, la commande du langage W4 @include_url est très utilisée.
Cette commande, reconnue par l’analyseur du langage, permet « d’appeler un URL » puis
d’interpréter le fichier source retourné par l’exécution de l’URL (noter que ce source est à
nouveau « parsé » avant d’être rendu à l’acteur automatique).
Cet URL sera en général un appel paramétré à un script ASP, JSP ou .NET. Le texte
retourné par l’exécution de l’URL est usuellement vide.
Les paramètres passés incluent généralement le contexte de session de l’acteur
automatique, session qui peut alors être utilisée dans le script pour accéder au moteur de
workflow.
Le script de l’acteur automatique se réduit alors à cette ligne. Tout le traitement est fait
dans le code de l’URL.
Le traitement est donc fait dans l’analyseur du langage W4. Ensuite, puisque son script
est vide, l’acteur automatique « se contente » de terminer la tâche si elle est toujours
dans l’état en-cours.
L’usage de cette commande est décrit plus en détail dans les chapitres suivants :
3 Exemples d’utilisation en Java
3 Exemples d’utilisation en.NET
3 Exemples d’utilisation en COM/ASP
Exemple
Avant substitution :
@include_url(http://thehost/MyApp/Activities/MyAutoActi.aspx?@ctx&ta
[email protected]&[email protected])@/include
Après substitution :
L’URL a été appelé pendant la substitution, et la réponse à la requête (en l’occurrence la
chaîne vide) se substitue à la chaîne @include_url(…)/@include
Attention !
Une source d’erreur commune est que le script de l’URL rende « un peu de HTML » de
façon plus ou moins volontaire, notamment en cas d’erreur (stack Java, message « page
not found », message d’erreur ODBC, etc.). Ce résultat n’a plus une forme valide.
L’acteur automatique passe en erreur.
Référence
Commandes usuelles de l’acteur automatique :
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
8
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
href="W4 URL" : décrit au chapitre 3
@include_url("URL")@/include : décrit aux chapitres 4, 5 et 6
system=localShellCommandLine : voir ci-dessous
outValue=taskOutvalue : voir ci-dessous
logError=errorNumber : voir ci-dessous
// comment text : voir ci-dessous
L Remarque
Quelques commandes obsolètes, non conseillées, sont décrites en annexe.
Commande system=
system=localShellCommandLine
Soumission à l’interpréteur de commande du serveur (typiquement sh sous Unix,
cmd.exe sous Windows) de la commande localShellCommandLine.
L’acteur automatique attend la fin de la commande avant de passer à la ligne suivante
(la commande est un appel à la fonction system() de la bibliothèque standard C).
Attention !
Tout code retour non nul de la commande system= est considéré comme une erreur,
que la cause en soit une erreur de lancement de la commande (commande non trouvée,
shell absent, etc.) ou un exit code non nul retourné par la commande s’étant
correctement exécutée ou pas.
Le traitement standard d’erreur est appliqué. Si la commande appelée retourne en
fonctionnement normal un exit code non nul, elle doit être « enveloppée » par un script
retournant un exit code nul.
Exemple
Exécution d’une commande ftp (ftp mode ligne standard sous Windows).
system=ftp -n -i –sc:\temp\w4stdin.tmp myhost.myname.com
1>c:\temp\w4stdout.tmp
2>c:\temp\w4stderr.tmp
Commande outValue=
outValue=textString
Positionnement de la valeur de retour de la tâche (ou code retour). Si plusieurs lignes de
ce type existent, la dernière prévaut. Si la tâche est déjà terminée (comme conséquence
de l’exécution d’une ligne précédente du script) la ligne n’a pas d’effet.
Commande logError=
logerror=ErrorNumber
Arrêt en erreur du traitement. Code d’erreur à enregistrer dans le fichier journal
wfautomatic<pid>.log.
Les lignes suivantes du script sont ignorées. La tâche est réassignée comme sur toute
erreur.
9
NOTE TECHNIQUE
Description de l'acteur automatique
Ligne commentaire
// texte commentaire
Chaque ligne de commentaire doit être précédée de //.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
10
Débogage de l’acteur
automatique
2
2.1
Journalisation des erreurs
Les erreurs détectées par l’acteur automatique sont enregistrées dans le fichier journal
wfautomatic<pid>.log où PID est le process identifier (visible dans le gestionnaire de
tâches).
Un certain nombre de lignes sont générées pour chaque erreur. On donne ci-dessous, en
titre, la partie significative.
Veuillez vous reporter au document suivant :
3 Manuel d'exploitation de W4 Engine (section Fichiers journaux)
Line=début de séquence html…
L’acteur automatique a trouvé un modèle HTML au lieu d’un modèle interprétable.
Causes possibles :
1. Le modèle n’existe pas, l’acteur a reçu alors le modèle standard d’erreur (qui est en
HTML).
2. Le modèle a un nom incorrect, typiquement <acti>.html au lieu de <acti>.auto.html.
3. La langue de l’acteur n’est pas en accord avec celle du modèle.
error 1
Une commande system= a échoué.
Causes possibles :
1. La commande est incorrecte (la vérifier en l’entrant à la console).
2. La commande n’est pas dans le chemin d’exécution (variable d’environnement $PATH).
error 22
Conditions d’apparition :
ƒ Serveur Unix avec des installations cloisonnées.
ƒ Utilisation de l'acteur automatique avec la syntaxe :
@INCLUDE_URL(http://<servername>:<serverPort>/<appliWeb>/servlet/fr.
w4.http.W4Servlet?@ctx&template=Activities/FTX_delayClosed.auto.jsp&
[email protected])@/INCLUDE
11
NOTE TECHNIQUE
Débogage de l’acteur automatique
Lors de ce type d'utilisation, l'erreur 22 peut survenir (voir ci-dessous) car l'acteur
automatique redirige sur le serveur Web Java et doit ABSOLUMENT disposer de la
variable d'environnement W4_ADM_DIR.
Le log est :
<w4_log> @(#) W4Engine 4.1.12.0 (2004.42) - Sun Solaris (A)
2004-12-09 15:23:25 (1) WFGetAdmDir: the software is not properly
installed
2004-12-09 15:23:25 (1) error 22 (WFGetAdmDir admtools.c 5001
[4979])
2004-12-09 15:23:25 (0) error 22 (WFReadGlobalContext admtools.c
3813 [3785])
2004-12-09 15:23:25
[436])
2004-12-09 15:23:25
[505])
2004-12-09 15:23:25
[212])
2004-12-09 15:23:25
2004-12-09 15:23:25
2004-12-09 15:23:25
2004-12-09 15:23:25
< <inputFileName>
2004-12-09 15:23:25
(2) error 11 (WFCloseStorage wfstorage.c 445
(0) error 11 (WFCleanStorage wfstorage.c 505
(0) error 22 (WFInitCgiClient wfcgimain.c 254
(1)
(1)
(1)
(1)
WFInitCgiClient: argc=1
WFInitCgiClient: argv[0]=cgi.exe
WFInitCgiClient: Server side usage:
WFInitCgiClient:
cgi.exe -e <envFileName>
(0) error 22 (main wfcgimain.c 376 [368])
error 33
Ligne de commande incorrecte.
La ligne en cause est affichée dans le journal dans le message :
WFProcessAutomaticTask: line=ligne incorrecte
Exemple 1 :
1999-08-13 18:29:32 (2) WFProcessAutomaticTask: incorrect line
1999-08-13 18:29:32 (2) WFProcessAutomaticTask: line=<!DOCTYPE HTML
PUBLIC "-//IETF//DTD HTML//EN">
1999-08-13 18:29:32 (2) error 33 (WFProcessAutomaticTask
H:\w4\src\notifier\wfautomatic.c 623 [539])
1999-08-13 18:29:32 (0) error 33 (main
H:\w4\src\notifier\wfautomatic.c 736 [0])
1999-08-13 18:29:32 (2) main: task #18236 cannot be processed
Cause : le modèle (langue « auto ») de l’activité automatique n’existe pas
(Acti.auto.html). Le mécanisme de modèle par défaut a joué, fournissant à l’acteur
automatique un modèle HTML… Soit Acti.html, soit Standard.html.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
12
Exemple 2
1999-06-25 10:01:56 (2) WFProcessAutomaticTask: incorrect line
1999-06-25 10:01:56 (2) WFProcessAutomaticTask: line=dir *
1999-06-25 10:01:56 (2) error 33 (WFProcessAutomaticTask
H:\w4\src\notifier\wfautomatic.c 618 [534])
1999-06-25 10:01:56 (0) error 33 (main
H:\w4\src\notifier\wfautomatic.c 731 [0])
1999-06-25 10:01:56 (2) main: task #105751 cannot be processed
Cause : l’utilisateur a mis dans son fichier de script :
dir *
au lieu de :
system=dir *
error 3040
Une erreur a été détectée. La réassignation de la tâche au (rôle) responsable du dossier
a échoué.
Causes possibles : l’acteur automatique n’a pas le rôle reassign.
Veuillez vous reporter au chapitre suivant :
3 Annexe 1
L’acteur automatique s’arrête en erreur.
Causes possibles : très probablement une ligne href= sans guillemets.
Contournement : corriger. Arrêter / redémarrer le serveur W4.
2.2
13
Pièges de l’acteur automatique
1
Le mot de passe utilisé par le programme wfautomatic.exe est auto. S’il est
changé, par l’interface d’administration web, dans la description de l’acteur
automatic, le programme wfautomatic.exe ne pourra pas se connecter.
2
Ne pas changer la langue de l’acteur automatique (valeur auto) par cette même
interface d’administration.
3
Bien qu’il s’agisse d’un script, le nom du fichier de script doit comporter l’attribut
.html, soit pour l’activité MyActivity : MyActivity.auto.html.
4
La syntaxe d’une ligne est mot-clé=valeur sauf pour le mot-clé href où la syntaxe est
href="valeur". L’absence de « quote » entourant la valeur provoque une erreur
fatale de l’acteur automatique.
NOTE TECHNIQUE
Débogage de l’acteur automatique
5
Dans le cas d’installation multi-instances, la commande href doit stipuler l’instance
concernée. Sinon les commandes portent sur l’instance par défaut.
Exemple : href="/cgi.exe ?@ctx&cmd=..." est correct car @ctx est expansé en
lg=@lg&id=@id&lid=@lid&wfs=@wfs où wfs identifie l’instance à laquelle est
connecté l’acteur automatique.
6
Tâches d’alarmes ou de dépassement non exécutées.
Si, en dépit du paramétrage de l’acteur automatique, une tâche ne semble pas être
exécutée par ce dernier, il faut s’assurer que celle-ci n’est pas une tâche d’alarme ou
de dépassement. Dans ce cas, la tâche n’est peut-être pas encore créée, car le
service de gestion des alarmes (wfbigbrother) « tourne » par défaut sur la base
d’une vérification toutes les minutes.
7
Vérification de la corbeille de l’acteur automatique.
On peut aussi vérifier la corbeille de l’acteur automatique en se connectant sous son
identité. Le fait de choisir une de ses tâches affichera le script. Rien de cela
n’empêchera l’acteur automatique de fonctionner.
8
Une tâche peut ne pas être exécutée par l’acteur automatique quand :
▫ elle
assignée en libre-service pour le rôle automatic (ou un autre rôle qui
aurait été attribué au compte automatic). L’acteur ne recherche que les tâches
assignées nominativement ;
▫ l’état de la tâche est « en attente ».
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
14
Exemples d’utilisation en Java
3
3.1
Environnement
Le modèle standard d’application JSP livré avec W4 Studio donne le squelette du code
d’une activité automatique « écrite » en Java.
Modèle activité (activityAuto.auto.html)
Le modèle livré est vide :
// include the script here
Au commentaire peut être substitué un include_url appelant un script sur le modèle
de celui-ci :
@include_url(http://<serverName>:<serverPort>/<appliWeb>/servlet/fr.
w4.http.W4Servlet?@ctx&template=Activities/FTX_delayClosed.auto.jsp&
[email protected])@/include
Modèle code Java (activityAuto.auto.jsp)
Ce code comprend la récupération du contexte de session (id, lid, workflow instance) de
l’acteur automatique pour utilisation par le code, l’ouverture et la fermeture d’une
connexion entre le script et W4 Engine utilisant ce contexte de session de l’acteur
automatique.
<%@ include file="/Includes/w4Context.jsp" %>
<%@ include file="/Includes/w4OpenConnexion.jsp" %>
<%@ include file="/Includes/w4CloseConnexion.jsp" %>
3.2
Envoi d’un courrier électronique
Attention !
Le code est donné à titre indicatif. Il peut ne pas fonctionner dans votre environnement.
Ce code nécessite les fichiers suivants : activation.jar, mail.jar, mailapi.jar et
smtp.jar.
15
NOTE TECHNIQUE
Exemples d’utilisation en Java
<%@ page
import="java.util.*,fr.w4.TWFexception,fr.w4.basic.*,fr.w4.session.*
,fr.w4.search.*,fr.w4.buildtime.basic.*,fr.w4.buildtime.dynamic.*,fr
.w4.runtime.dynamic.*,fr.w4.http.*,fr.w4.utils.*,fr.w4.marshal.*,fr.
w4.runtime.ref.*,fr.w4.buildtime.ref.*,fr.w4.utils.*" %>
<%@ page
import="java.io.*,java.net.*,javax.mail.*,javax.mail.internet.*" %>
<%@ include file="../Includes/w4Context.jsp" %>
<%@ include file="../Tools/w4Methods/w4Methods.jsp" %>
<%
int taskid = 0;
int loginid= 0;
int actorid =0;
String lg= "";
// ** Déclaration des variables dont on aura besoin
// Les variables multivaluées sont déclarées en String car on
utilise la méthode
// qui peuple une string
String tStringVarEmails="";
//String tStringVarEmails="";
String tStringVarExpediteur="";
// String StrVartext=";
String tStringVarDemandeur="";
String tStringVarDateDde="";
String tStringVarMotif="";
String tStringVarMontant="";
try
{
taskid= Integer.parseInt(request.getParameter("taskid"));
loginid= Integer.parseInt(request.getParameter("lid"));
actorid= Integer.parseInt(request.getParameter("id"));
lg = request.getParameter("lg").toString();
// ** Pour tester la récupération de ces valeurs
System.out.println("Ma tâche: "+ taskid);
System.out.println("loginid: "+ loginid);
System.out.println("actorid: "+ actorid);
}
catch(NumberFormatException nfe)
{
System.out.println("\n----------Exception NumberFormat dans
mailInfo.jsp");
nfe.printStackTrace();
}
TWFfullTaskRef fullcurrentTaskref = null;
TWFfullTask fullcurrentTask = null;
TWFnativeSession w4Session = null;
Enumeration actorEnum = null;
TWFTrawVariable tVariables = null;
TWFTrawVariable cVariables = null;
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
16
try
{
w4Session = new TWFnativeSession();
w4Session.setPriority(101);
// ** Renseigner le nom du serveur W4 ("ServerName)et de
l'instance ("w4adm"
// ou autre)
w4Session.setActorId(actorid);
w4Session.setServerName("ServerName");
w4Session.setInstanceName("w4adm");
w4Session.setLanguage(lg);
w4Session.setLoginId(loginid);
w4Session.openConnection();
TWFTfullTaskFieldName fields = new TWFTfullTaskFieldName();
fields.add(TWFfullTaskFieldName.CASEVARIABLES);
fullcurrentTask =(new
TWFfullTaskRef(taskid)).wfGetFullTask(fields,(null),(null));
// Récupère les variables de tâche
tVariables = fullcurrentTask.wfGetTaskVariables(true);
// Récupère les variables de dossier
cVariables= fullcurrentTask.getCaseVariables();
// ** Récupère les adresses mail des destinataires
// de la variable multivaluée "mailDestinataire" - utilisation
d'une méthode
// définie dans w4Methods.jsp ou depuis la variable Email
monovaluée
// tStringVarEmail = cVariables.getValue("Email").toString();
tStringVarEmails=w4mVariableValue(tVariables,
"mailDestinataire", ",");
// ** Récupère les variables de tâches nécessaires au texte et
enveloppe
// de mail
tStringVarExpediteur =
tVariables.getValue("mailExpediteur").toString();
//StrVartext = cVariables.getValue("Body").toString();
tStringVarDemandeur =
tVariables.getValue("demandeur").toString();
tStringVarDateDde =
tVariables.getValue("dateDemande").toDate().getDay()
+"/"+tVariables.getValue("dateDemande").toDate().getMonth()
+"/"+tVariables.getValue("dateDemande").toDate().getYear();
tStringVarMotif = tVariables.getValue("motif").toString();
tStringVarMontant = tVariables.getValue("montant").toString();
17
NOTE TECHNIQUE
Exemples d’utilisation en Java
// ** Pour tester la récupération des valeurs
System.out.println("destinataires " + tStringVarEmails);
System.out.println("demandeur " + tStringVarDemandeur);
System.out.println("Date demande " + tStringVarDateDde);
System.out.println("montant " + tStringVarMontant);
System.out.println("motif " + tStringVarMotif);
System.out.println("expediteur " + tStringVarExpediteur);
/************************* Données propres à l'envoi du message
*/
String from = tStringVarExpediteur;
String host = "tea";
String subject = "Demande d'engagement de dépenses acceptée";
String message = " L'engagement de dépense demandée le
"+tStringVarDateDde+" par "+tStringVarDemandeur+" a été acceptée.
Montant de la dépense prévue (en KEuros) : "+tStringVarMontant+".
Motif de la demande : "+tStringVarMotif+".";
Properties props = new Properties();
props.put("mail.smtp.host", host);
Session maSession = Session.getDefaultInstance(props, null);
/************************* Pour l'envoi du message */
try
{
MimeMessage msg = new MimeMessage(maSession);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, tStringVarEmails);
// msg.setRecipients(Message.RecipientType.CC,
"[email protected], [email protected]");
msg.setSubject(subject);
// Créer et renseigner la première partie du message
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(message);
mbp1.setHeader("Content-Type","text/html; charset=iso-885915");
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
msg.setContent(mp);
// Positionner la date: en-tête
msg.setSentDate(new Date());
// Envoyer le message
Transport.send(msg);
}
catch(Exception e1)
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
18
{
System.out.println("\nException lors de l'envoi du
message\n");
e1.printStackTrace();
}
/************************* Fin des données propres à l'envoi du
message */
}
// Fermer la session W4 ouverte
catch(TWFexception e)
{
System.out.println("erreur setting des variables");
e.printStackTrace();
}
finally
{
if(w4Session != null && w4Session.getSessionHandle() > 0)
{
try
{
w4Session.closeConnection();
}
catch(TWFexception e)
{
e.printStackTrace();
}
}
}
%>
19
NOTE TECHNIQUE
Exemples d’utilisation en Java
4
4.1
Exemples d’utilisation en .NET
Environnement
Le modèle standard d’application .NET (C#) livré avec W4 Studio donne le squelette du
code d’une activité automatique « écrite » en C#.
Ce code comprend la récupération du contexte de session (id, lid) de l’acteur
automatique pour utilisation par le code, l’ouverture et la fermeture d’une connexion
entre le script et W4 Engine utilisant le contexte de session de l’acteur automatique.
Modèle activité (auto_page_default.auto.html)
@include_url(http://localhost/${sub_directory}/Activities/${activity
_name}_auto.aspx?@ctx&[email protected]&[email protected])
@/include
Les formes ${identifiant} correspondent au langage W4 Studio.
Veuillez vous reporter au document suivant :
3 Manuel de génération de W4 Studio
Soit, après une substitution arbitraire du langage W4 Studio :
@include_url(http://thehost/MyApp/Activities/MyAutoActi_auto.aspx?@c
tx&[email protected]&[email protected])@/include
Attention !
Le service w4 doit pouvoir accéder à la page automatique. Il existe cependant plusieurs
façons de faire :
1 Le service w4 doit être démarré sous un compte utilisateur et non pas en tant
que « système local » ; ensuite, ce compte doit avoir les droits d’exécution (droits sur
le système de fichiers) sur les fichiers .aspx et .aspx.cs.
2 Si le service w4 est démarré par le « système local », alors il est nécessaire, via IIS,
d’autoriser les connexions anonymes soit sur le fichier .aspx (d’activité automatique),
soit sur le répertoire contenant l’activité automatique, soit sur l’application.
3 Pour les applications générées à partir de la version 5.5 de W4 Studio, il est
nécessaire de configurer le web.config pour qu’il autorise l’accès direct à la page
d’activité automatique sans passer par la page de connexion à l’application (cf.
exemple ci-dessous).
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
20
<location path="Activities/${activity_name}_auto.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
Modèle code C#
Un total de 5 fichiers est donc nécessaire pour faire fonctionner l’activité automatique
correctement :
ƒ le fichier .auto.html à déployer sur le serveur ;
ƒ
ƒ
4.2
les fichiers de la page <Activite_auto> (.aspx et .cs) qui correspondent aux
fichiers d’exécution du traitement automatique ;
les fichiers de la page <Activite> (.aspx et .cs) qui permettent d’afficher la tâche
assignée au responsable de l’application lorsque l’activité automatique ne s’est pas
déroulée correctement (par exemple un message d’avertissement).
Envoi d’un courrier électronique
Le modèle de code C# inclut le code d’envoi d’un courrier électronique listé ci-dessous
ainsi que la mise à jour de variables du dossier qui sont en sortie de l’activité.
Attention !
Dans L’exemple qui suit, les éléments du langage W4 Studio identifiés par ${…} ne sont
pas substitués.
Le code est donné à titre indicatif. Il peut ne pas fonctionner dans votre environnement.
Fichier .aspx
Ce fichier doit contenir uniquement la référence à son « code behind ». Aucun code html
ne doit être écrit.
Son contenu sera donc le suivant :
<%@ Page language="c#" Codebehind="${activity_name}_auto.aspx.cs"
AutoEventWireup="false"
Inherits="${sub_directory}.Activities.${activity_name}_auto" %>
21
NOTE TECHNIQUE
Exemples d’utilisation en .NET
Fichier .aspx.cs
Toutes les parties « <texte> » doivent être remplacée car elles dépendent de votre
environnement et/ou de votre modélisation (il y en a 6 dans l’exemple qui suit).
using
using
using
using
System;
System.Data;
System.Web;
System.Web.Mail;
using W4.Session;
using W4.Basic;
using W4.Runtime;
using ${sub_directory}.Utils;
using ${sub_directory}.Utils.W4;
namespace ${sub_directory}.Activities
{
/// <summary>
/// Envoi d'un mail contenant l'ensemble des variables en entrée
de tâche
/// Mise à jour de trois variables en sortie de tâche
/// </summary>
public class ${activity_name}_auto : System.Web.UI.Page
{
private TWFnativeSession _oTWFnativeSession;
private const string w4ServerName = "<W4ServerName>";
private const string w4InstanceName = "<W4InstanceName>";
private const string smtpServerName = "<smtpServerName>";
private void Page_Load(object sender, System.EventArgs e)
{
//Récupération des informations de la request
string CaseId = Request.Params["caseId"];
int TaskId = Convert.ToInt32(Request.Params["taskId"]);
TWFtaskRef oTWFtaskRef = new TWFtaskRef(TaskId);
try
{
_oTWFnativeSession = getW4Session(Request);
_oTWFnativeSession.WFOpenConnection();
// Création du mail
createMail(oTWFtaskRef, CaseId);
//Terminaison de la tâche avec mise à jour de la variable
TWFvariableList oTWFvarList = new TWFvariableList();
oTWFvarList.SetValue("<varNameStr>", "valeur");
oTWFvarList.SetValue("<varNameInt>", 12);
oTWFvarList.SetValue("<varNameDate>", new TWFdate(1980, 1,
1, 12, 30, 00));
oTWFtaskRef.WFEndTask(new TWFname("CodeRetour"),
oTWFvarList);
}
catch(Exception l_Exception)
{
Helper.ManagedError(l_Exception, this, this.Context);
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
22
}
finally
{
//Fermeture de la connexion
_oTWFnativeSession.WFCloseConnection();
_oTWFnativeSession = null;
}
}
public void createMail(TWFtaskRef oTWFtaskRef, string caseId)
{
// Récupération des variables de tâche
W4.Runtime.TWFvariableList oTWFvarList =
oTWFtaskRef.WFGetVariables(true);
string piecesJointes = "";
string taskVar = "<table border='0'>";
taskVar += "<tr><td colspan='2'>Variables de
tâches</td></tr>";
for (int i = 0; i < oTWFvarList.Length; i++)
{
taskVar += "<tr>";
taskVar += "<td align='top'>" + oTWFvarList.Item(i).Name +
"</td>";
taskVar += "<td><b>";
switch (oTWFvarList.Item(i).GetValueType().ToString())
{
case "System.String":
foreach (string val in oTWFvarList.Item(i).StringValues)
taskVar += val + "<br>";
break;
case "System.Int32":
foreach (int val in oTWFvarList.Item(i).IntValues)
taskVar += val.ToString() + "<br>";
break;
case "W4.Basic.TWFdate":
foreach (W4.Basic.TWFdate val in
oTWFvarList.Item(i).DateValues)
{
if (val.Year != 0)
taskVar += new DateTime(val.Year, val.Month,
val.Day).ToString("u") + "<br>";
}
break;
case "W4.Runtime.TWFdocumentRef":
foreach (W4.Runtime.TWFdocumentRef val in
oTWFvarList.Item(i).DocumentValues)
{
if (val != null)
{
W4.Runtime.TWFdocument doc = val.WFGetDocument();
taskVar += "Cf pièce jointe : " + doc.Str + "<br>";
string virtualPath = doc.AccessPath;
if (!piecesJointes.Equals(""))
piecesJointes += ",";
23
NOTE TECHNIQUE
Exemples d’utilisation en .NET
piecesJointes += virtualPath;
}
}
break;
}
taskVar += "</b></td></tr>";
}
taskVar += "</table>";
// Création du corps du message
string body = "<html>";
body += "<body>";
body += taskVar;
body += "<br><br>Signé : Acteur AUTOMATIQUE";
body += "</body>";
body += "</html>";
string destinataire = "[email protected]";
string auteur = "[email protected]";
string sujet = "W4 - envoi de mail automatique - dossier " +
caseId;
// Exécution de l'envoi du mail
SendMail(destinataire, auteur, sujet, body, piecesJointes);
}
public void SendMail(string mailTo, string mailFrom, string
mailSubject, string mailBody, string pathOfAttachments)
{
SmtpMail.SmtpServer = smtpServerName;
// Instanciation de l'objet "Message"
MailMessage objMessage = new MailMessage();
// Paramètres du mail
objMessage.To = mailTo;
objMessage.From = mailFrom;
// --> Format du message
objMessage.BodyFormat = MailFormat.Html;
// --> Sujet
objMessage.Subject = mailSubject;
// --> Corps
objMessage.Body = mailBody;
// --> Priorité
objMessage.Priority = MailPriority.Normal;
// --> Pièces Jointes
// Construction de la liste de pièces jointes
if (pathOfAttachments != "")
{
char[] delim = new char[] {','};
foreach (string sSubstr in pathOfAttachments.Split(delim))
{
string adr = Server.MapPath(Request.ApplicationPath) +
sSubstr.Replace("/",
System.IO.Path.DirectorySeparatorChar.ToString());
MailAttachment myAttachment = new MailAttachment(adr);
objMessage.Attachments.Add(myAttachment);
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
24
}
}
// Envoi du mail
SmtpMail.Send(objMessage);
}
#region Méthode permettant de construire le context et la
session
private TWFnativeSession getW4Session(HttpRequest
objHTTPRequest)
{
TWFsessionContext _oTWFsessionContext = new
W4.Session.TWFsessionContext();
//lecture des informations dans la querystring
_oTWFsessionContext.ActorId =
Convert.ToInt32(objHTTPRequest.QueryString["id"]);
_oTWFsessionContext.Language =
objHTTPRequest.QueryString["lg"];
_oTWFsessionContext.LoginId =
Convert.ToInt32(objHTTPRequest.QueryString["lid"]);
_oTWFsessionContext.InstanceName = w4InstanceName;
if (! w4ServerName.Equals(""))
_oTWFsessionContext.ServerName = w4ServerName;
TWFnativeSession oTWFnativeSession = new
W4.Session.TWFnativeSession(_oTWFsessionContext);
return oTWFnativeSession;
}
#endregion
#region Code généré par le Concepteur Web Form
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
25
NOTE TECHNIQUE
Exemples d’utilisation en .NET
5
5.1
Exemples d’utilisation en
COM/ASP
Environnement
Le modèle standard d’application ASP livré avec W4 Studio 5.0 donne le squelette du
code d’une activité automatique « écrite » en ASP.
Ce code comprend la récupération du contexte de session (id, lid) de l’acteur
automatique pour utilisation par le code, l’ouverture et la fermeture d’une connexion
entre le script et W4 Engine utilisant le contexte de session de l’acteur automatique.
Modèle activité (auto_page_default.auto.html)
En langage W4 Studio :
@include_url(http://${param label='Nom du serveur et port : '
default_value='localhost'}/${sub_directory}/Activities/${param
label='ASP Page with launching processing (without .asp) : '
default_value='activityAutoName'}.asp?@ctx&[email protected])@/in
clude
Soit, en langage W4, après une substitution arbitraire du langage W4 Studio :
@include_url(http://localhost/MyApp/Activities/MyAutoActi.asp?@ctx&t
[email protected])@/include
Attention !
Le service w4 doit être démarré par un compte utilisateur et non pas le « système
local », sinon IIS peut ne pas donner accès à la page .asp.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
26
Modèle code ASP (auto_page_default.asp)
<%
'******
'*
'* Attention, le fichier .auto.html appelant celui-ci doit être
dans le répertoire W4_HOME/Activities/...
'* BE CAREFUL , the file .auto.html used to call this file, must
exist in the folder W4_HOME/Activities/...
'*
'*****
'***
'* Reconstitution de la session
'* id représente l'acteur automatique
'* Aucun retour n'est autorisé (pas de response.write)
'* En cas de débogage utilisation de WFsetTrace de l'objet
TWFsession
'***
set objTWFsession = Server.CreateObject("w4com.TWFsession")
objTWFsession.Context.Modify request("id"),request("lid"),50,
request("lg"),"ASPClient",request("srv"),request("wfs")
' Prévision en cas de débogage: activation du mode trace
'objTWFsession.Context.WFsetTrace "+t +mcom"
'objTWFsession.WFOpenConnection
'**********************************************************
' Code asp de l'acteur automatique avec utilisation de la session
' Utilisation de objTWFsession.WFaddTraceLine " my line " pour
' afficher une ligne de trace dans le ficier \temp\w4dll.tra
'**********************************************************
' Prévision en cas de débogage: désactivation du mode trace
'objTWFsession.Context.WFsetTrace "-t +mcom"
'objTWFsession.WFCloseConnection
5.2
Envoi d’un courrier électronique
Attention !
Le code ci-dessous est donné à titre indicatif. Il peut ne pas fonctionner dans votre
environnement. Il utilise l’objet NewMail de la DLL cdonts.dll.
27
NOTE TECHNIQUE
Exemples d’utilisation en COM/ASP
Le détail des conditions d’utilisation de cet objet est donné à la suite du code.
<%@ Language=VBScript %>
<!-- #include file="../../Tools/Methods/GetItem.asp" -->
<%
set mysession = Server.CreateObject("w4com.TWFsession")
set myAutoTaskName = server.CreateObject("w4com.TWFname")
set myContext = server.CreateObject("w4com.TWFsessionContext")
myAutoTaskName.Id = Request("taskid")
mySession.Context.Modify request("id"),request("lid"),50,
request("lg"),"ASPClient",request("srv"),request("wfs")
%>
<!-- #include file="../../Include/W4_openConnexion.asp" -->
<%
' Récupère les variables de tâche
set myTrawVariables =
mysession.WFGetVariables(myAutoTaskName,true)
sendNotification =
myTrawVariables.item("sendNotification").Value(1).Value
customerEmail =
myTrawVariables.item("CUSTOMEREMAIL").Value(1).Value
Sub subSendMail(strToName, strSubject)
Dim strMyBody
Dim objMyCDONTSMail
Set objMyCDONTSMail = CreateObject("CDO.Message")
objMyCDONTSMail.From= "[email protected]"
objMyCDONTSMail.To = strToName
objMyCDONTSMail.Subject = strSubject
strMyBody = strMyBody & "Bonjour, " & vbCrLf &vbCrLf
strMyBody = strMyBody & "Nous n'avons pas pu répondre
favorablement à votre demande de clé de licence. " & vbCrLf &vbCrLf
strMyBody = strMyBody & "Cordialement. " & vbCrLf
strMyBody = strMyBody & "W4 Support Team. "
objMyCDONTSMail.TextBody= strMyBody
objMyCDONTSMail.send
set objMyCDONTSMail=nothing
End Sub
call subSendMail(customerEmail,"Notification refus")
%>
<!-- #include file="../../Include/W4_closeConnexion.asp" -->
Installation de la DLL CDONTS
Cette DLL n’est plus livrée avec Windows pour les versions supérieures à 2000 Server.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
28
Microsoft a décidé de supprimer CDONTS avec IIS 5.1, donc sous Windows XP vous
n'aurez pas accès à ce composant. Il vous faudra trouver le fichier cdonts.dll puis
l'enregistrer dans la base de registre.
Visitez cette page pour de plus amples informations :
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q171440&
Le fichier cdonts.dll est à placer dans le répertoire « Windows » (WINNT dans la plupart
des cas) puis dans le sous-répertoire System32. Ensuite, faites Démarrer/Exécuter puis
saisissez "regsvr32 cdonts.dll" pour enregistrer la DLL dans la base de registre.
Ce fichier est aussi disponible sur le CD Rom de Windows 2000 Pro et Server sous la
forme cdonts.dl_. En commande DOS, faites un "expand.exe cdonts.dl_ cdonts.dll" puis
faites la manipulation comme indiquée plus haut.
Sous Windows 2003, la DLL a été renommée ; elle s'appelle CDOSYS.dll (elle est dans
\system32 et ne fonctionnera pas sous NT4). Son utilisation ne semble pas trop différer.
Éléments d’utilisation de l’objet NewMail de CDONTS
Envoyer un mail
<% Dim Mailer
Set Mailer = Server.CreateObject("CDONTS.NewMail")
' on crée l'objet CDONTS
Mailer.To = "[email protected]"
' email du destinataire
Mailer.From = "[email protected]"
' email de l'expediteur
Mailer.Subject = "Titre du message"
' titre du message
Mailer.Body = "Le texte qui sera envoyé"
' corps du message
Mailer.Send
' on envoie le tout
%>
On peut également mettre le tout sur une seule ligne qui devrait alors ressembler à :
<% ' on crée toujours l'objet avant
Mailer.Send "[email protected]","[email protected]","Titre d
u message","Le texte à envoyer"
' et on le ferme toujours après
%>
29
NOTE TECHNIQUE
Exemples d’utilisation en COM/ASP
Une fois le mail envoyé, on n'oublie pas de fermer l'objet Mailer, sinon on ne peut plus en
envoyer ultérieurement, avec la commande :
<% Set Mailer = Nothing %>
Fonctions supplémentaires
<%
' importance : 0 = normal, 1 = urgent, 2 = très urgent
Mailer.Importance = 0
' le chemin du fichier qui sera attaché
Mailer.AttachFile "\\repertoire\fichier.jpg","fichier.jpg"
' liste des destinataires en CarbonCopy, séparés par une virgule
Mailer.Cc = "[email protected], [email protected]"
' liste des destinataires en BlindCarbonCopy (Copie cachée invisible
), séparés par une virgule
Mailer.BCc = "[email protected], [email protected]"
' Pour envoyer un
Mailer.BodyFormat
Mailer.MailFormat
' Pour laisser le
lignes
%>
W4 BPM Suite
mail au format HTML, ajouter ces 2 lignes :
= 0
= 0
mail en format PlainText, mettez des 1 pour ces 2
NOTE TECHNIQUE
Acteur automatique
30
Soit au total l’exemple simple suivant :
<%
'******
'* Attention, le fichier .auto.html appelant celui-ci doit être
dans le répertoire W4_HOME/Activities/...
'* BE CAREFUL , the file .auto.html used to call this file, must
exist in the folder W4_HOME/Activities/...
'*
'*****
'***
'* Reconstitution de la session
'* id représente l'acteur automatique
'* Aucun retour n'est autorisé (pas de response.write)
'* En cas de débogage utilisation de WFsetTrace de l'objet
TWFsession
'***
set objTWFsession = Server.CreateObject("w4com.TWFsession")
objTWFsession.Context.Modify request("id"),request("lid"),50,
request("lg"),"ASPClient",request("srv"),request("wfs")
'**********************************************************
'Code asp de l'acteur automatique avec utilisation de la session
'utilisation de objTWFsession.WFaddTraceLine " my line " pour
'afficher une ligne de trace dans le ficier \temp\w4dll.tra
'**********************************************************
Sub subSendMail(strToName, strSubject)
Dim strMyBody
Dim objMyCDONTSMail
Set objMyCDONTSMail = CreateObject("CDONTS.NewMail")
objMyCDONTSMail.From= "[email protected]"
objMyCDONTSMail.To = strToName
objMyCDONTSMail.Subject = strSubject
strMyBody = "Corps du message" & vbCrLf
strMyBody = strMyBody & "Deuxième ligne du corps du message" &
vbCrLf
strMyBody = strMyBody & "Troisième ligne du corps du message"
objMyCDONTSMail.Body= strMyBody
objMyCDONTSMail.Send
set objMyCDONTSMail=nothing
End Sub
call subSendMail("[email protected]","sujet du mail")
%>
31
NOTE TECHNIQUE
Exemples d’utilisation en COM/ASP
6
6.1
Scripts en langage W4
Présentation
Ces scripts, introduits par la commande href=, sont utiles pour les traitements simples.
Par ailleurs, ils sont plus rapides que l’appel d’un script (JSP, ASP, .NET) « derrière » un
URL local ou distant via la commande @include_url.
En contrepartie, ils ne portent que sur les API W4 et peuvent être difficiles à écrire et à
mettre au point.
href= introduit des URL W4 basés sur les API C/C++ dites API « CGI ».
Pour une information détaillée, veuillez vous reporter au document suivant :
3 Documentation de référence en ligne des API CGI
Les données contextuelles apparaissant dans ces URL sont décrites à l’aide du langage
W4 présenté de façon assez détaillée dans ce chapitre.
Pour une information complémentaire sur le langage W4, veuillez vous reporter au
document suivant :
3 Note technique - Langage W4
6.2
Exemples
Terminaison de tâche avec positionnement de variables
Objet : positionnement des variables de tâche avant terminaison de la tâche. Si la
terminaison de tâche est laissée à l’acteur automatique, il ne positionne aucune variable.
href="/W4/cgi.exe?@ctx&cmd=ExitTask&command=EndTask&taskName.id=@tas
k.name.id&[email protected]"
Attention !
Notez la présence impérative des guillemets entourant la valeur (URL) suivant href=.
Commentaires
Cmd=ExitTask
Nom fonction API C ExitTask (sortie de tâche)
command=EndTask
Type de sortie : terminaison
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
32
[email protected] Identification de la tâche (id)
[email protected] Variable de tâche StatusResponse prend la valeur de
la variable « Fin »
Création de tâches en fonction d’une variable
multivaluée
Objet : création de tâches selon une valeur multivaluée. A utiliser quand il s’agit de
distribuer des tâches non selon un rôle mais selon une valeur, par exemple créer autant
de tâches de suivi qu’il y a de lots à traiter.
[W4MAP NbReponses]
[W4ENTRY NULL
default]href="/W4/cgi.exe?@ctx&cmd=ExitTask&command=EndTask&StatutFi
[email protected]&o(utvalue=fin&[email protected]"[/W4ENTRY]
[W4ENTRY default default]@LOOP(BASESSII_ToutesReponsesDetaillees)
(href="/W4/cgi.exe?@ctx&cmd=Init&command=CreateTask&[email protected]&c
aseName.id=@ite(m.name.id&node=Fin&bypass=1"
@/LOOP
[/W4ENTRY]
[/W4MAP]
{@BASESSII_ToutesReponsesDetaillees.nbItems:NbReponses}
Commentaires
Si NbReponses est vide l’entrée NULL de la map est utilisée. Le résultat après
substitution sera :
href="/W4/cgi.exe?@ctx&cmd=ExitTask&command=EndTask&[email protected]
alue&outvalue=f(in&[email protected]"
(avec les valeurs des identifiants @ substituées)
Si NbReponses vaut 2, l’entrée default de la map sera prise, soit :
@LOOP(BASESSII_ToutesReponsesDetaillees)
(href="/W4/cgi.exe?@ctx&cmd=Init&command=CreateTask&[email protected]&c
aseName.id=@ite(m.name.id&node=Fin&bypass=1"
@/LOOP
33
NOTE TECHNIQUE
Scripts en langage W4
Qui bouclera 2 fois, donnant :
href="/W4/cgi.exe?@ctx&cmd=Init&command=CreateTask&[email protected]&ca
seName.id=@item(.name.id&node=Fin&bypass=1"
href=/W4/cgi.exe?@ctx&cmd=Init&command=CreateTask&[email protected]&cas
eName.id=@item(.name.id&node=Fin&bypass=1
Avec les valeurs des identifiants @ substituées.
Positionnement d’attributs de tâches
Objet : mise à jour des attributs date d’alarme et de dépassement des tâches actives
d’un dossier.
Le script WorkcaseAllActiveTasks renvoie toutes les tâches actives du dossier. Pour
chacune, les 2 attributs sont mis à jour avec les variables dateFinSouhaitee et
datePublication, cela à partir de 2 variables de dossier repositionnées dans une tâche
antérieure.
@LOOP(WorkcaseAllActiveTasks)
href="/W4/cgi.exe?@CTX&cmd=SetVariable&[email protected].
id&VariableName(.str=dateFinSouhaitee&value.type=WF_UNION_DATA_DATE&
value.date.day=@dateFinSouhait(ee.value.day&value.date.month=@dateFi
nSouhaitee.value.month&value.date.year=@dateF(inSouhaitee.value.year
"
href="/W4/cgi.exe?@CTX&cmd=SetVariable&[email protected].
id&VariableName(.str=datePublication&value.type=WF_UNION_DATA_DATE&v
alue.date.day=@datePublication(.value.day&value.date.month=@datePubl
ication.value.month&value.date.year=@datePubl(ication.value.year"
@/LOOP
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
34
Annexe 1 - Langage W4
7
7.1
Présentation
Cette annexe a pour but de présenter le langage W4 pour les utilisateurs qui souhaitent
programmer l’acteur automatique dans ce langage, sans avoir auparavant appris à
programmer des applications web à l’aide de ce langage.
Le langage de script W4 permet de définir des modèles de pages de texte dans lesquelles
sont référencés des objets workflow. Le langage est quelquefois appelé WSP, W4 Server
Pages, ou @SP pour @ Server Pages, le caractère @ ayant une signification particulière.
Ce langage est utilisable pour définir tout modèle de fichiers texte. Il est utilisé dans
divers contextes que sont :
ƒ les pages HTML de l’interface d’administration standard web de W4 Engine dites
« CGI » ;
ƒ les pages HTML et les documents des applications web W4 dites « CGI » ;
ƒ les URL W4 apparaissant dans ces pages ;
ƒ les scripts de définition du mail interprétés par le moteur W4 Engine ;
ƒ les scripts du langage de commande de l’acteur automatique (ce document).
Noter que le langage W4 n’est plus mis en avant pour la définition des pages HTML : les
modèles d’applications livrés à partir de la version 5 de W4 BPM Suite sont Java/JSP,
.NET et ASP/COM. De même, une interface d’administration est aussi disponible en Java
au lieu de celle définie en langage W4.
Pour plus d’informations sur la définition de pages HTML à l’aide du langage
W4, consultez les documents suivants dont ce texte reprend en partie le contenu :
3 Note technique – Langage W4
3 Documentation de référence en ligne des API CGI
La présentation qui suit est découpée en deux parties :
ƒ un survol des possibilités du langage avec des exemples simples ;
ƒ une description détaillée.
Les exemples sont majoritairement donnés dans le contexte de l’acteur automatique.
Il est donc souhaitable d’avoir compris globalement le mécanisme de fonctionnement de
l’acteur automatique avant de lire ce qui suit.
L Remarque
Le langage W4 n’est pas le langage de l’acteur automatique. Il est uniquement utilisé par
ce dernier comme un pré-processeur selon la séquence suivante :
ƒ soumission du fichier script (modèle de l’activité), dans son ensemble, au
« parseur » du langage W4 ;
ƒ récupération du fichier résultat, dans son ensemble ;
ƒ interprétation du fichier résultat en terme de commandes pour l’acteur automatique,
ligne par ligne.
35
NOTE TECHNIQUE
Annexe 1 - Langage W4
7.2
Détail du langage
Mécanisme de substitution
Le module « parseur » du langage reçoit en entrée :
ƒ le fichier texte à substituer ;
ƒ un contexte de substitution workflow.
Dans un contexte de substitution sont définis notamment : l’acteur, et donc sa langue, la
session de l’acteur (id de connexion à W4 Engine), le dossier courant, la tâche
courante, etc.
Le parseur effectue ses traitements sur le texte passé en paramètre, sous forme de
fichier, et retourne à l’appelant, en une fois, l’ensemble du texte résultat.
Le parseur fonctionne ainsi :
ƒ balayage jusqu’à repérage d’un élément du langage ;
ƒ interprétation de l’élément ;
ƒ si nécessaire, substitution à l’élément du texte résultat de l’interprétation ;
ƒ continuation du balayage (en incluant le texte résultat de la substitution).
Le texte résultat est ensuite interprété par l’appelant comme bon lui semble.
Exemple
Soit le texte suivant,
administrateur :
soumis
au
« parseur »
dans
le
contexte
d’une
session
ABC @actor.name DEF
IJK @id LMN
Le parseur reconnaît certains éléments parce qu’ils sont introduits par @.
Ici sont demandés le nom de l’acteur et son Id.
Dans le contexte d’une session w4adm (dont l’id est 1), il retourne le texte suivant :
ABC w4adm DEF
IJK 1 LMN
Objets workflow
Tous les objets du contexte de substitution W4 Engine sont identifiables. Ils sont
introduits par le caractère @.
Quelques exemples :
ƒ @actor : acteur courant
ƒ
ƒ
W4 BPM Suite
@task : tâche courante
@case : dossier courant
NOTE TECHNIQUE
Acteur automatique
36
ƒ
ƒ
ƒ
@activity : activité correspondant à la tâche courante
@procedure : procédure correspondant au dossier courant
etc.
Pour chaque objet, chaque attribut ou chaque variable peut être référencé :
ƒ @actor.name ou @actor.name.str : identifiant texte de l’acteur courant
ƒ
ƒ
ƒ
ƒ
ƒ
@actor.name.id identifiant numérique de l’acteur courant
@actor.firstname : prénom de l’acteur courant
@task.actor : acteur de la tâche
@task.myvariable.value : valeur de la variable de tâche myvariable
etc.
Des macros existent pour quelques objets courants :
ƒ @lg pour @actor.language
ƒ
ƒ
ƒ
ƒ
@id pour l’id de l’acteur (@actor.name.id)
@lid pour l’identifiant de la session courante (lid pour logical id)
@wfs pour l’identifiant de l’instance de workflow courante (wfs pour workflow service)
@ctx pour la chaîne « lg=@lg&id=@id&lid=@lid&wfs=@wfs », utilisée dans les
URL «CGI » pour propager un contexte de session.
Exemple
Source modèle :
Current actor (login @actor.name) is called: @actor.firstName
@actor.lastName
His language code is '@lg'.
Après substitution dans un contexte de session de l’acteur John Smith, login jsmith :
Current actor (login jsmith) is called: John Smith
His language code is 'en'
Dictionnaires (map)
Les dictionnaires ont été introduits originellement pour traduire des libellés selon le
contexte de langue. Une utilisation dérivée est la génération conditionnelle du code. Les
dictionnaires sont nommés map en anglais. Le terme map s’est imposé, au féminin, en
français. Il sera utilisé dans la suite du texte.
Un dictionnaire est une table de traduction, où à chaque entrée, qui est une chaîne de
caractères quelconque, est associée une traduction en une ou plusieurs autres chaînes de
caractères, éventuellement distinguées par leur langue.
Exemple
Map traduisant des codes couleurs (chaînes "1" et "2") en clair, en anglais et en français.
37
NOTE TECHNIQUE
Annexe 1 - Langage W4
[W4MAP colourmap]
[W4ENTRY 1 en]red[/W4ENTRY]
[W4ENTRY 1 fr]rouge[/W4ENTRY]
[W4ENTRY 2 en]blue[/W4ENTRY]
[W4ENTRY 2 fr]bleu[/W4ENTRY]
[/W4MAP]
La syntaxe de référence à une traduction de la map est {entry_string:map_name}.
Si la langue de l’acteur est l’anglais (en) :
{1:colourmap} est traduit red
Si c’est le français (fr) :
{1:colourmap} est traduit rouge
Une entrée peut être la valeur d’un objet : {@task.prioritycolour.value:colourmap}.
L’ordre des entrées est indifférent et on pourra préférer une organisation par langue. Soit
pour la même map :
[W4MAP colourmap]
[W4ENTRY 1 en]red[/W4ENTRY]
[W4ENTRY 2 en]blue[/W4ENTRY]
[W4ENTRY 1 fr]rouge[/W4ENTRY]
[W4ENTRY 2 fr]bleu[/W4ENTRY]
[/W4MAP]
Exemple
Source modèle :
...
[W4MAP countryname]
[W4ENTRY fr en]France[/W4ENTRY]
[W4ENTRY uk en]United Kingdom[/W4ENTRY]
[W4ENTRY fr fr]France[/W4ENTRY]
[W4ENTRY uk fr]Royaume-Uni[/W4ENTRY]
[/W4MAP]
...
His country code '@actor.country' means
'{@actor.country:countryname}'.
...
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
38
L Remarque
Les « ... » représentent le « reste » du source non significatif pour l’exemple, avant et
après substitution.
Source substitué dans le contexte John Smith, anglais s’il en est :
...
His country code 'uk' means 'United Kingdom'.
...
Noter que les maps « disparaissent » une fois interprétées. Tous les caractères entre
[W4MAP ….] et [/W4MAP], retour à la ligne et ces mot-clés inclus, sont supprimés. Tous
ceux en dehors sont conservés.
Avant substitution :
[W4MAP colour]
[WMAPENTRY NULL en]colour not set[/W4ENTRY]
[W4MAPENTRY 0 en]white[/W4ENTRY]
[W4MAPENTRY 1 en]red[/W4ENTRY]
[W4MAPENTRY 2 en ]blue[/W4ENTRY]
[W4MAPENTRY DEFAULT en]unknown colour code[/W4ENTRY]
[/W4MAP]
{@var:colour}
Après substitution, en supposant le contexte de langue ‘en’ et que @var contient la
chaîne « 1 » :
Red
Qui contient une ligne blanche en-tête correspondant au retour à la ligne suivant
[/W4MAP], caractère se trouvant être en dehors des « frontières » de la map.
Pour ne pas avoir de ligne blanche après substitution, il faut écrire sur la même ligne que
[/W4MAP], soit :
[W4MAP colour]
[W4MAPENTRY NULL]colour not set[/W4ENTRY]
[W4MAPENTRY 0]white[/W4ENTRY]
[W4MAPENTRY 1]red[/W4ENTRY]
[W4MAPENTRY 2]blue[/W4ENTRY]
[W4MAPENTRY DEFAULT]unknown colour code[/W4ENTRY]
[/W4MAP]{@var:colour}
Après substitution, en supposant que @var contient toujours la chaîne ou le nombre 1 :
Red
39
NOTE TECHNIQUE
Annexe 1 - Langage W4
Les éléments syntaxiques suivants sont aussi disponibles :
ƒ reconnaître une entrée vide (objet à valeur vide) ;
ƒ traduction par défaut d’une chaîne non reconnue ;
ƒ traduction par défaut si la langue de l’entrée n’est pas reconnue.
A titre d’exemple, on enrichit au fur et à mesure la map exemple définie auparavant, on
introduit une traduction pour l’entrée NULL en anglais et en français soit :
Reconnaissance de l’entrée vide : mot-clé NULL. Soit :
[W4MAP colourmap]
[W4ENTRY NULL en]no colour[/W4ENTRY]
[W4ENTRY NULL fr]pas de couleur[/W4ENTRY]
[W4ENTRY 1 en]red[/W4ENTRY]
[W4ENTRY 1 fr]rouge[/W4ENTRY]
[W4ENTRY 2 en]blue[/W4ENTRY]
[W4ENTRY 2 fr]bleu[/W4ENTRY]
[/W4MAP]
Puis l’on introduit maintenant l’entrée par défaut qui donne la traduction, ici en anglais et
en français, des entrées non reconnues (en l’occurrence, ni vide, ni 1, ni 2). L’entrée par
défaut est introduite par le mot-clé « default ».
Soit toujours :
[W4MAP colourmap]
[W4ENTRY NULL en]no colour[/W4ENTRY]
[W4ENTRY NULL fr]pas de couleur[/W4ENTRY]
[W4ENTRY 1 en]red[/W4ENTRY]
[W4ENTRY 1 fr]rouge[/W4ENTRY]
[W4ENTRY 2 en]blue[/W4ENTRY]
[W4ENTRY 2 fr]bleu[/W4ENTRY]
[W4ENTRY default en]unknown colour code[/W4ENTRY]
[W4ENTRY default fr]code couleur inconnu[/W4ENTRY]
[/W4MAP]
Enfin, si le contexte de langue n’est pas reconnu, il faut introduire une traduction par
défaut, identifiée à nouveau par le mot-clé default, en seconde position cette fois. Soit,
pour les 4 entrées NULL, 1, 2 et default, les langues en, fr et default (qui donne de
l’anglais) :
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
40
[W4MAP colourmap]
[W4ENTRY NULL en]no colour[/W4ENTRY]
[W4ENTRY NULL fr]pas de couleur[/W4ENTRY]
[W4ENTRY NULL default]no colour[/W4ENTRY]
[W4ENTRY 1 en]red[/W4ENTRY]
[W4ENTRY 1 fr]rouge[/W4ENTRY]
[W4ENTRY 1 default]red[/W4ENTRY]
[W4ENTRY 2 en]blue[/W4ENTRY]
[W4ENTRY 2 fr]bleu[/W4ENTRY]
[W4ENTRY 2 default]blue[/W4ENTRY]
[W4ENTRY default en]unknown colour code[/W4ENTRY]
[W4ENTRY default fr]code couleur inconnu[/W4ENTRY]
[W4ENTRY default default]unknown colour code[/W4ENTRY]
[/W4MAP]
Notez la dernière entrée « default default » : entrée par défaut dans la langue par
défaut.
Le mot-clé @mapentry permet d’afficher la valeur de l’entrée. La fin de la map
précédente peut être enrichie ainsi :
...
[W4ENTRY 2 default]blue[/W4ENTRY]
[W4ENTRY default en]unknown colour code (value: @mapentry)[/W4ENTRY]
[W4ENTRY default fr]code couleur inconnu (value:
@mapentry)[/W4ENTRY]
[W4ENTRY default default]unknown colour code (value:
@mapentry)[/W4ENTRY]
[/W4MAP]
Finalement une entrée de map peut référencer une map définie auparavant ou ellemême selon la syntaxe suivante :
...
[W4ENTRY value language]{value:mapname}[/W4ENTRY]
...
Utilisation pour la génération conditionnelle
En programmation de l’acteur automatique les maps sont surtout utilisées en génération
conditionnelle pour réaliser un « if then else » ou plus généralement un « switch ».
Dans ce cas la langue importe peu, seule la langue default est stipulée :
41
NOTE TECHNIQUE
Annexe 1 - Langage W4
...
[W4MAP ifelsemap]
[W4ENTRY condition default]text generated if condition
verified[/W4ENTRY]
[W4ENTRY default default]text generated if condition not
met[/W4ENTRY]
[/W4MAP]
...
{@something:ifelsemap}
...
Si @something est valué "condition" alors la traduction du source ci-dessus est :
...
text generated if condition verified
...
Pour toute autre valeur de chaîne la traduction est :
...
text generated if condition not met
...
Le « if » simple se traduit ainsi :
[W4MAP ifmap]
[W4ENTRY condition default]text generated if condition
verified[/W4ENTRY]
[W4ENTRY default default][/W4ENTRY]
[/W4MAP]
Le « switch » ainsi :
[W4MAP switch]
[W4ENTRY condition1 default]text generated if condition1
verified[/W4ENTRY]
[W4ENTRY condition2 default]text generated if condition2
verified[/W4ENTRY]
[W4ENTRY default default][/W4ENTRY]
[/W4MAP]
Génération itérative
La génération itérative se fait à partir d’un objet multivalué.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
42
@LOOP(@task.Reference @task.UnitPrice)
Reference: @item.1.value Unit price: @item.2.value
@/LOOP
Si la variable de tâche « Reference » contient la valeur multiple « Part1 », « Part2 » et la
variable UnitPrice contient la les valeurs « 12 », « 23 », on obtient comme affichage :
Reference: Part1 Unit price: 12
Reference: Part2 Unit price: 23
Recherche (script)
Outre les objets du contexte de substitution, il est nécessaire de pouvoir référencer les
autres objets, résultats d’une requête de recherche d’objets serveur. Les exemples les
plus évidents sont la corbeille de l’acteur ou la liste des dossiers en cours de l’acteur.
Pour cela il faut pouvoir spécifier une recherche et après cela itérer sur les résultats de la
recherche. Le résultat est un tableau d’objets.
La spécification de l’API ou de la suite d’API est :
[W4SCRIPT scriptname]
...script definition...
[/W4SCRIPT]
Le script devient un objet référençable du type résultat de la recherche, sur lequel on
peut notamment itérer avec le mot-clé @LOOP :
@LOOP (@scriptname)
...
@/LOOP
La définition est fondée sur les « API URL C » qui permettent de décrire sous forme d’un
URL toutes les API de W4 Engine.
C’est la même que celle utilisée dans les URL des applications web W4, dites « CGI » et
dans la commande href= "" de l’acteur automatique.
Ces APIs URL C et leur usage sont définies en détail dans :
3 Note technique - Langage W4
3 Documentation de référence en ligne des API CGI
Cependant la définition donne une certaine souplesse car le script peut être défini en
plusieurs lignes :
43
NOTE TECHNIQUE
Annexe 1 - Langage W4
[W4SCRIPT mysearch]
cmd=search&
object=task&
...
[/W4SCRIPT]
@include_url
Cette fonction permet de substituer le retour d’un URL. La syntaxe en est :
@include_url(URL)@/include
Où URL est un URL HTTTP complet, y compris la chaîne « http: » (notez la dissymétrie
« include_url » d’un côté, « include » tout court de l’autre).
L’URL est soumis. Son exécution a lieu ; durant ce temps le « parseur » attend. Le texte
réponse de l’URL est récupéré par le « parseur ». Il est substitué à la chaîne
@include_url(URL)@/include.
Dans le contexte de l’acteur automatique, les usages de « include_url» sont multiples :
ƒ mise à jour de base métier ;
ƒ envoi d’un courrier électronique d’information ;
ƒ scripting d’actions trop complexes ou impossibles à exprimer en langage W4.
En contrepartie, les performances d’exécution des URL sont à surveiller.
Exemple commenté
Envoi de mail d’information par l’acteur automatique.
Avant substitution :
// send mail via my Java/JSP script
@include_url(http://scriptserver/scripts/mySendMail.jsp?dest=@dest&.
..)@/include
Après substitution, en supposant que l’URL ne rende rien on obtient :
// send mail via my Java/JSP script
Code valide (vide !) interprété par l’acteur automatique.
Si l’URL « rend » quelque chose du type :
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
44
// send mail via my Java/JSP script
<html> ...
<p>Mail sent</p>
...
</html>
L’acteur automatique « ne reconnaît pas ses petits » et passe en traitement d’erreur de
script non reconnu.
Les scripts sont développés ou remaniés spécifiquement pour répondre à cette
contrainte.
Bien entendu un script peut rendre une séquence valide pour l’acteur automatique.
// send mail via my Java/JSP script
@include_url(http://scriptserver/scripts/mySendMailRC.jsp?dest=@dest
)@/include
MySendMailRC.jsp rend un code retour sous la forme exacte "outvalue=value". Soit par
exemple pour une exécution sans encombre :
// send mail via my Java/JSP script
Outvalue=0
Outvalue= est une syntaxe correcte qui sera reconnue par l’acteur automatique.
45
NOTE TECHNIQUE
Annexe 1 - Langage W4
8
Annexe 2 - Autres commandes de
l’acteur automatique
Attention !
Les commandes ci-dessous sont conservées pour compatibilité ascendante du produit. Leur
usage est déconseillé.
Commande href - exec et clearexec
Exécution d’un URL W4 (uniquement) tel qu’il apparaît dans un document HTML.
Dans href=, la macro « exec » peut être utilisée à la place de « cgi.exe ».
Soit : href="/W4/exec?..."
La macro « clearexec » est utilisée pour indiquer que l’URL ne doit pas être crypté.
href="/W4/clearexec?..."
Si la commande nexttemplate (voir ci-dessous) est utilisée, évite le double cryptage.
Commande href - fileOut
Pour pouvoir récupérer le résultat de la commande, un paramètre complémentaire est
introduit : fileOut qui indique un fichier résultat récupérable par l’acteur automatique.
Si le nom de fichier est relatif, le fichier est créé dans le répertoire de wfautomatic.exe,
soit …/w4/bin. Il est donc souhaitable d’utiliser des chemins absolus (voir exemple cidessous).
Le fichier n’est pas détruit sauf s’il est utilisé dans nextTemplate.
L Remarque
L’environnement disponible dans ce contexte est l’environnement de wfautomatic.exe et non
l’environnement CGI. Le répertoire temporaire est accessible par @env.TEMP.
Exemple
href="/W4/exec?@ctx&cmd=...&template=Acti1&fileOut=@(env.TEMP)/out&..."
nextTemplate=@(env.TEMP)/out
Commande nextTemplate
nextTemplate=nextTemplate
Définition du prochain script interprété par l’acteur automatique. Si plusieurs lignes de ce type
existent, la dernière prévaut. Ce mécanisme permet de chaîner le traitement de plusieurs
scripts pour une même tâche.
Typiquement le contenu variable de ce fichier peut être généré dynamiquement par une ou
plusieurs commandes du script courant.
Plusieurs fichiers de ce type peuvent être chaînés.
W4 BPM Suite
NOTE TECHNIQUE
Acteur automatique
46
Si le nom de fichier est relatif, le fichier est créé dans le répertoire de wfautomatic.exe, soit
<répertoire d’installation>/w4/bin. Il est donc souhaitable d’utiliser des chemins absolus, par
exemple en utilisant le répertoire temporaire (voir exemple ci-dessous).
Ces fichiers sont détruits une fois traités. Ces fichiers suite ne sont pas « parsés ». Ce qui
entraîne, hélas, la subtilité suivante. Si le fichier désigné par nextTemplate= contient la ligne
:
href="/W4/exec?id=123&lid=123332&lg=fr&wfs=w4adm&cmd=…"
il y a erreur.
En effet, la pattern « /W4/exec? » est de fait une forme reconnue par le parseur W4. Elle est
remplacée par « /W4/cgi.exe? », comme chacun peut le voir dans le source des modèles tels
que reçus par les navigateurs. La ligne correcte est donc :
href="/W4/cgi.exe?id=123&lid=123332&lg=fr&wfs=w4adm&cmd=…"
47
NOTE TECHNIQUE
Annexe 2 - Autres commandes de l’acteur automatique
Note technique
W4 Engine
Acteur automatique
Pour toute remarque ou suggestion concernant ce document, vous pouvez contacter le
support technique W4, en précisant la référence W4TN_AUTO_ACTOR_004_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