jeudi 24 octobre 2013

AngularJS : le framework architectural Web de Google

Si vous n'avez pas vécu coupé du monde (donc sans Internet...) ces derniers mois, vous avez certainement entendu parler d'AngularJS.


J'avais déjà évoqué ce framework architectural lors de mon dernier billet sur BRF+.

Pas grand-chose à voir avec SAP me direz-vous ? Oui et non : oui car AngularJS est une solution Open source largement développée par Google; non car votre serveur d'application NetWeaver est capable de servir aussi bien des données à une application SAP qu'à une application non-SAP !  :)
Ainsi, avec les nouvelles fonctionnalités de NW 7.02 (version qui commence même à dater maintenant), vous pouvez facilement passer d'un format ABAP à un format JSON et réciproquement ce qui rend les échanges avec notre application AngularJS particulièrement aisés.

Pour cette entrée en matière, je vous propose simplement de voir un petit "sélecteur localisateur" (largement inspiré de http://tympanus.net/Tutorials/Cust"omDropDownListStyling/index3.html) conçu par votre serviteur.

Cet exemple vous est servi par le service en ligne Plunker (concurrent de JSFiddle) mais qui a le bon goût d'être largement écrit... en AngularJS !  ;)

Merci de répondre positivement à la demande de votre navigateur concernant votre géolocalisation pour profiter pleinement de l'exemple.




A bientôt !

mardi 1 octobre 2013

BRF+ : le moteur de règles métier de SAP

Dans le cadre de ma mission actuelle, la solution BRF+ (Business Rules Framework) a fait son chemin lors de la mise en place d'un menu pour des services ESS (Employee Self-Service) développés en spécifique (AngularJS au-dessus d'un SAP HCM) pour un grand groupe cosmétique. (NDLR : principe similaire aux classes proxy qui existaient pour la solution standard mais en BRF+ cette fois)

Plusieurs avantages pour ce moteur de règles métiers apparu avec l'Enhancement Package 1 pour SAP NetWeaver (SAP NW 7.01) :
  • une lisibilité des règles par tous
  • une maintenance possible par une population pas forcément rompu au langage de développement ABAP (il faut quand même être très à l'aise avec l'outil informatique !)
  • une performance correcte (surtout en NW 7.02+ a priori) du fait que le code est généré en ABAP Objects
Petite mise en garde : la modélisation sous BRF+ est néanmoins plus longue que pour du code ABAP, il ne faut la réserver aux seules règles d'évoluer fréquemment. Vous savez celles pour lesquelles on vient vous voir au moins 1 fois par mois en vous demandant "Quelle est la règle ?"

Si la table de décision répondra à 80% des besoins,
Source : SCN (par le grand guru de BRF+ : Carsten Ziegler)

il y a pléthore d'expressions pour arriver à modéliser les règles les plus complexes auxquelles votre MOA aura pu penser...  :)
  • arbre de décision
  • détermination dynamique de l'expression à appeler
  • lecture d'une table ABAP
  • module fonction ABAP / méthode de classe ABAP
  • ...

Un aspect déroutant au début : les Data Objects sont plus que des simples types (comme pourraient l'être des objets du DDIC) mais de véritables variables d'où un mapping nécessaire lors de l'appel d'une fonction BRF+ par exemple.
Enfin, BRF+ dispose d'une API très complète de manipulation de ses propres objets ce qui peut être bien utile quand tout a été correctement référencé dans de beaux fichiers Excel.  :D





vendredi 16 août 2013

JSON et ABAP

SAP a fait évoluer le noyau ABAP pour prendre en compte des fonctionnalités JSON.
Ce qui suit est disponible à partir de la version 7.02 (il s’agit d’un backport de la 7.40 vers la 7.31 et la 7.02)
Voir le blog d’un des gourous, Horst Keller, sur le sujet (ainsi que les commentaires qui sont tout aussi instructifs sinon plus !) :
http://scn.sap.com/community/abap/blog/2013/01/07/abap-and-json
J’ai relevé 2 apports intéressants :
  • une conversion ABAP <-> JSON prise en charge par le Kernel (on peut en espérer une performance bien meilleure, à vérifier…)
  • une visualisation dédiée des variables JSON dans le débugger

Un petit aperçu du dernier point
Source : SDN
Il existe des bibliothèques JSON si vous n'êtes pas encore dans cette version.
Attention au sérialiseur estampillé TREX (classe CL_TREX_JSON_SERIALIZER) qui ne produit pas un JSON valide.

Je vous recommande :
http://wiki.sdn.sap.com/wiki/display/Snippets/JSON+and+ABAP
https://code.google.com/p/zjson/

dimanche 27 janvier 2013

URL d'une image du MIME et NWBC for HTML

NWBC for HTML

Rappelez-vous, le NetWeaver Business Client est un nouveau client pour les écrans SAP Gui, Web Dynpro, etc... Naturellement, SAP a laissé une (toute petite) latitude pour personnaliser l'interface utilisateur à l'aide d'une image. (cf. capture ci-dessous dans la partie inférieur du bandeau latéral gauche)


MIME Repository

C'est où sont stockés les fichiers tels que les images, feuilles de style, Javascript... qui ont vocation a être utilisés sur le Web (dans les BSP, Web Dynpro, Web Templates BI, etc...). Il arrive même qu'on y stocke des fichiers (aide en ligne par exemple) au format PDF ou encore des .doc et .xls, bref ne nous limitons pas ! :)
Pour accéder à ces documents directement, ce n'est pas évident (non pas que ce soit impossible en standard comme on le verra). Et surtout, que de circonvolutions nécessaires alors que le chemin "naturel" est tout trouvé : celui du MIME !

Source : Help SAP

Configuration de NWBC

Une table de configuration est mise à disposition : NWBC_CFG (anciennement, on utilisait plutôt NWBC_CONFIG). Cette table contient des paramètres d'affichage dont vous trouverez la liste à cette adresse :


Le paramètre qui nous intéresse est BRANDING_IMAGE que l'on va associer à une URL de notre crû pointant vers un service ICF maison. Notez comment l'URL paramétrée (http://<serveur>:<port>/sap/zmime/SAP/PUBLIC/<votre fichier>) contient le nom du service suivi du chemin vers le fichier du logo stocké dans le MIME Repository.

Service ICF

Basiquement, c'est derrière ce service que se passe tous les traitements des requêtes HTTP(S).
Nous en créons donc un nouveau avec un gestionnaire de service sous la forme d'une classe ABAP OO et y implémentons l'interface IF_HTTP_EXTENSION.
Le coeur de la solution repose sur l'appel au module fonction standard 'SDOK_GET_PHIO_ACCESS' qui retourne le contenu du fichier du MIME Repository. Il ne nous restera plus qu'à renvoyer ce contenu dans la réponse HTTP.

Voici le code complet de classe (bien entendu, si un membre de votre équipe ou vous-même étiez amenés à l'utiliser en Production, nous nierons avoir eu connaissance de vos agissements...). Il faut créer une classe ZCL_HTTP_MIME en implémentant l'interface IF_HTTP_HANDLER.


Pour ceux qui ont tout suivi et qui se demande comment faire pour appeler cette même image de façon standard, sans une lilgne de spécifique, le fameux module fonction renvoie également une URL d'appel mais de la forme :
http://:/sap/bc/contentserver/?get&pVersion=0045&contRep=MIME&docId=F2E0E661BCA5F1ED291A78156D38AD2022E0E661BCA5F1ED291A78156D3BF5202&compId=