0SB 12c – l'activité javascript

Préambule

Le javascript peut s’avérer très utile pour débloquer grand nombre de situations, et cela très rapidement.
Initialement prévue pour manipuler le json, la nouvelle activité proposée dans la SOA 12c pour utiliser ce langage dans les flux peut ainsi être une bonne alternative à l’utilisation du java, ce dernier étant assez contraignant à utiliser puisqu’il nécessite souvent la création d’un jar suivi de son déploiement sur les serveurs et leur redémarrage.

Cas pratique

Pour illustrer l’utilisation du javascript à l’aide de l’activité JS, nous mettons en place dans un flux OSB un appel à une fonction de « decodage base 64 ».
Prenons pour base ce code qui permet de réaliser de l’encodage ou du décodage base 64 :
{_keyStr: »ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= »,encode:function(e){var t= » »;var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t= » »;var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g, » »);while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g, »n »);var t= » »;for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t= » »;var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}} process.customerInformationsDecoded = Base64.decode(process.customerInformations);
Il suffit ensuite d’insérer l’activité JS dans le flux de la façon suivante :

insertion activite js

parametrage activite js

Ceci a pour effet de déclarer une première variable locale « Base64 » contenant le code JS fourni précédemment, puis d’initialiser une seconde variable « customerInformationsDecoded ». Celle-ci contiendra le résultat du décodage d’une variable existante nommée « customerInformations ».
La variable ainsi déclarée peut par la suite être utilisée dans le reste du process, par exemple dans un « java callout » ($customerInformationsDecoded).
utilisation java callout

Documentation officielle