pub
Voila des années que j'ai découvert la librairie ERPConnect. En fait juste après avoir commencé à faire du développement sur le sap.net connector de SAP. Au début d'année SAP a sorti son tout nouveau connecteur le NCo 3.0 dans la lignée du JCo pour JAVA. Même si le NCo est niquel la version 3.0 est bien différente de la version 2.0 qui était un plug'in pour Visual Studio 2003. J'ai finalement pris le temps de réellement plonger dans ERPConnect, et pour paraphraser mes amis québécquois, je suis tombé en amour pour.
Le développeur et sa société
ERP Connect a été développé par Patrick Theobald, un allemand qui s'est spécialisé sur .net et SAP. Il a développé plusieurs outils, mais le focus de cette article se limitera à ERPConnect. Pour en savoir plus allez sur http://www.theobald-software.com . Sa société est certifiée par SAP.
Le produit
Le produit ERPConnect est en fait une collection de DLL pour les différentes version du framework .net. Sa license est une license développeur très économique, 890 Euros par dévelopeur. Le support est fourni et il est remarquable, ainsi que le wiki http://www.theobald-software.com/wiki/ERPConnect_Sample_applications .
Il suffit d'ajouter la bonne DLL par exemple erpconnect20.dll pour le framework 2.0 et de coder.
Plusieurs développements sont réalisables :
- L'appel de BAPI et de RFC (proxy client)
- La génération et l'envoi de iDoc à SAP généré en .net
- Le développement de serveur .net (proxy serveur) permettant de proposer des fonctions écrites en .net aux développeurs SAP via SM59.
- La connexion aux queries SAP et aux queries SAP BW (Business Intelligence)
- etc...
Préambule
Avant de commencer à coder il est nécessaire de passer la clés de développement fournie à l'acquisition d'ERPConnect via une simple méthode
ERPConnect.LIC.SetLic("<xxxxxxx>"); // avec <xxxxxxxx> égale à la clés.
EPRConnect est une librairie très simple à utilisée. Vous allez le découvrir, et elle supporte le développement 32 et 64 bits.
Exemple n°1 : BAPI_EMPLOYEE_GETDATA
Ce premier exemple est un simple appel à la BAPI Employee_getdata, le but étant d'arriver à avoir la liste des employés (d'ou le nom de la BAPI)... Les paramètres d'entrée sont la date et le nom.

Pour ceux qui connaissent le .net connector c'est là ou on se régale tant la librairie ERPConnect est simple. On intialise la connection. On définit la fonction RFC qu'on va consommer. On passe les paramètres. On exécute la fonction, et on récupère les tables en retour. C'est aussi simple que cela.
Remarquez la méthode qui convertit la date .net (datetime) en date au format SAP. Au passage découvrez les méthodes de ERPConnect.ConversionUtils.... Cela vaut le détour.
Vous remarquez aussi qu'on accède à la un champs de la table, par exemple ["PERNO"], mais il est aussi possible d'utiliser une valeur numérique (un entier) qui correspond à la position de la colonne.
Il est possible de la même manière de passer une table en paramètre d'entrée.
Pour cela il suffit de suite la méthode suivante
RFCTable myLines = func.Exports["<NOM DE LA TABLE>"].ToTable(); // on créée une table interne depuis la table SAP
puis on boucle sur l'ajout de données
//début de la boucle
RFCStructure myLine = myLines.AddRow();
myLine["<nomduchamps>"] = <valeur> ;
//fin de la boucle
et on exécute la fonction avec func.execute....
L'importante est de comprendre le mécanisme entre structure et table. C'est un aspect clés quand à l'acquisition d'une bonne compréhension tecnique de ERPConnect.
Exemple n°2 : L'envoi d'iDoc.
Ok ici on a compris que consommer des RFC c'est juste facile... Encore plus dingue, l'envoi d'iDoc. Il suffit juste d'établir sa connection puis de renseigner chaque segment, et enfin d'appeler la méthode send. (facile hein).

L'envoi d'iDoc est très simple.
Exemple n°3 : RFC Server
Le développement d'un RF serveur permet d'offrir des fonctions écrites en .net aux développeurs SAP. Par exemple, du cryptage, des accès SQL via ADO.net des lectures et écritures de fichiers textes et binaires, etc.... Dans des domaines précis cela prend tout son sens. Par exemple dans le domaine du forecasting (modélisation et prévision) l'avantage est d'écrire en C# voir en C++ compilé via l'objet interrop des modèles mathématiques puissants qui seront consommé par les ABAPEURS via de simple CALL FUNCTION. Le plus dingue est que c'est juste trés simple à faire.
Je vous propose là l'exemple de base disponiblke sur le wiki de erpconnect.
On commence d'abort pour démarrer le serveur en indiquant l'ip ou le nom de la machine ou tourne le rfcserver ainsi que le sapgateway (toujours sapgwxx avec xx = numéro de système) et le programID (toutes les informations dans SM59 en TCP/IP).
Puis on enregistre la fonction écrite en .net en indiquant les paramètres d'export et d'import. et on démarre le serveur.

La fonction doit être implémentée. Mais ERPConnect fournit déja le support multithreadé. Donc on n'a pas à gérer en .net le multithread MAIS on ne doit pas oublié que c'est le cas et qu'on doit gérer la communication entre chaque thread.

Notez qu'il est possible d'implémenter plusieurs fonctions via la valeur de CalledFunction.FunctionName=="<nom de la fonction>";
Aprés avoir ajouté une connexion TCP/IP dans SM59, il suffit d'écrire en ABAP un code comme celui ci...

Impact sur les licenses utilisateurs SAP
Se connecter en temps que client sur SAP nécessite une license user. Il faut prendre en compte les aspects liés aux licenses SAP d'autant que c'est assez confu entre license system-to-system et une license utilisateur nécessaire par utilisateur de l'application .net....
Par contre si vous développez un RFC serveur SAP devient le client et donc n'a pas d'impact sur les licenses SAP.
Reste que cette question est à préciser et peut impacter fortement le design et l'architecture de l'application que vous développez.
Conclusion
Il est bien sur possible de se connecter à SAP via des webservice à la condition que le service SOAPRFC et WSDL soient activé sur le WebApplication server de SAP. Mais une connexion native est plus performante et plus sur. La librairie ERPConnect est de loin ce qu'il y'a de mieux sur le marché pour un cout très faible.... Une version d'évaluation est gratuite et le produit est certifié par SAP. En gros, si vous vous devez développer sur .net des applications (Web, Windows, WCF, etc...) connectées à SAP, c'est réellement le meilleur choix.
Reste que la difficulté principale n'est pas tant la technique, que la nécessité de bien connaitre SAP (RFC, BAPI, iDOC) mais aussi .net et les meilleures pratiques d'intégration. L'essentiel repose sur les réponses à apporter à ses 4 critères :
- L'internationalisation
- La performance
- La sécurité
- La maintenabilité
Pour en savoir plus : http://www.theobald-software.com/en/products/erpconnect.htm
Pour info j'assure un support gratuit sur http://www.b-integration.net/Forums/tabid/405/view/topics/forumid/667/language/fr-FR/Default.aspx