dimanche 23 mars 2008

Passer des variables BPEL vers une transformation XSL


Par défaut BPEL process Manager propose d'effectuer des transformations XSL avec XSLMapper (outil graphique de mapping dans Jdev).

Lors de l'ajout d'une tâche "transformation", Bpel process manager génère la ligne suivante :

ora:processXSLT('Transformation_1.xsl',bpws:getVariableData('inputVariable','payload')) vers votre variable de destination.

Mais dans beaucoup de cas de format pivot ou de boucle sur un tableau XML il parait necessaire de passer à la transformation XSLT des données du processus BPEL. Ainsi, dynamiquement on peut re utiliser la même transformation XSL avec des paramètres non fixe.

Pour faire cela, il faut utiliser la même ligne, mais en rajoutant des 'properties' :

ora:processXSLT('Transformation_1.xsl',bpws:getVariableData('inputVariable','payload'),bpws:getVariableData('BPELxslparameters'))

où 'BPELxslparameters' est une variable de ce type XSD (ICI)

qu'il faut créer dans votre processus Bpel. Ensuite, il faut renseigner les propriétés "name" et "value". Le champ "name" correspond à votre "parameter" XSL que vous déclarer graphiquement dans XSLMapper:



"cpt" correspond à un parameter en XSL sur la source. Ce paramètre peut être utilisé dans votre transformation XSL. Pour mon exemple, je m'en sert en tant que compteur, pour boucler sur ma structure de départ (à gauche dans la copie d'écran de mapper xsl).

Je vous propose mon exemple XSL : ICI


Ensuite il faut créer 2 "assign" dans Bpel :



- 1 pour initialiser la structure XML (remplir la propriété "name")


- 1 pour initialiser la valeur (remplir la propriété "value")







Mon code Bpel, afin de voir la création de la variable 'BPELxslparameters' et le reste des infos en détail (ici)



Ainsi, comme cela on peut facilement passer des paramètres entre l'instance BPEL et le moteur de transformation XSL.


Un projet Jdev Bpel/XSL qui démontre tout cela sur ce lien (ICI)



La même utilisation en anglais : http://blogs.oracle.com/rammenon/2007/05/07

Aucun commentaire: