Vue d’ensemble
Cet article de blog décrit comment recevoir un IDOC d’un système SAP, à l’aide de SAP .Net Connector 2.0 et de Microsoft C#.
NOTE DE L’ÉDITEUR : SAP .Net Connector 2.0 a été remplacé par NCo 3.0. La maintenance de SAP .Net Connector 2.0 est prévue pour le 31 mars 2013.
Introduction
Le connecteur SAP .Net simplifie la création de programmes C# pouvant interagir avec un hôte SAP. Le connecteur SAP .Net est disponible à partir du Marché des services SAP. Vous devez avoir accès à SAP Service Marketplace pour pouvoir télécharger le connecteur SAP .Net. Le connecteur SAP .Net doit être installé sur votre machine de développement avant de commencer.
Un IDOC est un document d’interface utilisé pour envoyer ou recevoir des informations vers ou depuis un hôte SAP. Un IDOC sera composé d’un enregistrement d’en-tête et d’autant d’enregistrements de détail que nécessaire. Les enregistrements d’en-tête suivent le format de la table EDI_DC40 et les enregistrements de détail suivent le format de la table EDI_DD40. Le format exact de la charge utile dans les enregistrements détaillés dépend du type d’IDOC transmis.
C# Code
Nous allons créer une application qui affiche le contenu des IDOC reçus d’un hôte SAP. Utilisez Visual Studio 2008 et créez une nouvelle application console C#. Nommez la nouvelle application IdocReceive.
Ajoutez une référence au connecteur SAP .Net.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Références et choisissez Ajouter une nouvelle référence. Sélectionnez à la fois SAP.Connector.dll et SAP.Connector.Rfc.dll. En règle générale, ces fichiers se trouvent dans C:Program FilesSAPSAP .Net Connector 2.0.
Notre programme instanciera une classe personnalisée, IdocReceiver, qui encapsule la logique de transmission et de réception SAP.
IdocReceiver hérite du connecteur SAP .Net. IdocReceiver remplace les méthodes du connecteur SAP .Net pour gérer le flux d’IDOC depuis l’hôte SAP. IdocReceiver s’abonne également à deux événements exposés par le connecteur SAP .Net qui effectuent la transmission réelle.
La ligne 5 contient la référence au connecteur SAP .Net dont nous avons besoin.
L’objet IdocReceiver nécessite un objet SAPHost utilisé pour configurer la connexion à SAP Gateway. La ligne 9 instancie l’objet SAPHost.
La ligne 14 appelle le constructeur IdocReceiver. Le premier paramètre est la chaîne de connexion SAP, utilisée pour se connecter à l’hôte SAP. Il existe trois parties d’une chaîne de connexion SAP :
-aProgramName est le nom du programme tel qu’il est défini sur SAP Gateway. Cette valeur doit correspondre à l’ID de programme configuré sur SAP Gateway. Utilisez la commande SAP SM59 pour afficher les paramètres de SAP Gateway.
-xSAPGWnn est le numéro SAP Gateway auquel le récepteur IDOC s’enregistrera. La passerelle SAP écoute sur un numéro de port TCP/IP basé sur la valeur nn. Le numéro de port réel est égal à 3300 plus la valeur nn. Dans ce cas, nn vaut zéro, donc le port 3300 est utilisé.
-gHostName est le nom d’hôte DNS du serveur SAP . Il est également possible de spécifier une adresse IP, comme -g192.168.10.1.
La ligne 16 démarre l’hôte SAP, ce qui permet de commencer à recevoir les IDOC. À ce stade, notre programme sera désormais visible pour l’hôte SAP, ce que vous pourrez vérifier à l’aide de la commande Test Connection via la transaction SAP SM59. Tant que l’objet IdocReceiver reste dans la portée, il recevra les IDOC.
IdocReceiver Class
Pour recevoir un IDOC, la classe IdocReceiver hérite de la classe SAP .Net Connector SAPIdocReceiver. Pour contrôler le flux des IDOC, la classe IdocReceiver remplace certaines méthodes de la classe SAPIdocReceiver. Pour recevoir réellement un IDOC, IdocReceiver s’abonne à deux événements exposés par la classe SAPIdocReceiver.
Constructeur
Voici le code du constructeur IdocReceiver.
IdocReceiver Constructor
À la ligne 25, nous déclarons notre IdocReceiver et héritons de l’objet SAP .Net Connector approprié. Nous utilisons StringWriter sur la ligne 27 pour stocker le contenu de l’IDOC réel reçu.
Le constructeur nécessite deux paramètres, la chaîne de configuration SAP et un objet SAPServerHost qui est un conteneur pour IdocReceiver. La ligne 30 est l’endroit où nous appelons le constructeur de base.
Le transfert de l’IDOC déclenche un événement à deux moments : lorsque le transfert commence et lorsque le transfert se termine. Aux lignes 32 et 33, nous connectons nos méthodes IdocReceiver aux événements BeginReceive et EndReceive exposés par la classe SAPIdocReceiver. Notre méthode IdocBeginReceive sera appelée au début de la transmission IDOC, et notre méthode IdocEndReceive sera appelée à la fin de la transmission IDOC.
IDOC Flow Control
Les IDOC sortent d’un système SAP de manière transactionnelle, dans la mesure où un hôte SAP enverra un IDOC particulier une seule fois. Pour ce faire, l’hôte SAP rassemblera un ou plusieurs IDOC dans une transaction et l’enverra à l’IdocReceiver qui s’est enregistré sur la passerelle SAP. La transaction est identifiée par un ID de transaction (TID) unique fourni par l’hôte SAP. L’hôte SAP communiquera avec notre IdocReceiver en utilisant l’ID de transaction pour contrôler le flux d’IDOC de SAP vers notre programme.
Il existe quatre méthodes de la classe de base SAPIdocReceiver que nous devons remplacer.
Dans chaque cas, l’hôte SAP s’attend à ce que notre code renvoie un zéro s’il n’y a pas de difficultés. Les TID transmis en paramètres peuvent être utilisés pour vérifier l’état de la transmission. Ce code de démonstration exclut tout traitement que vous souhaiterez peut-être utiliser pour valider l’état de la transaction.
L’hôte SAP appellera d’abord la méthode CheckTransaction. Si un zéro est renvoyé, l’hôte SAP appellera ConfrimTransaction. Si un zéro est ensuite renvoyé, l’hôte SAP commencera à transmettre les IDOC. Une fois la transmission terminée, l’hôte SAP appellera CommitTransaction.
IDOC Reception
Nous utilisons deux méthodes pour recevoir les IDOC réels. Au début de la transmission, nous attribuons un StringWriter à EventArg, qui indique au connecteur SAP .Net où nous voulons placer la charge utile de la transmission. Une fois la transmission terminée, nous pouvons lire à partir du StringWriter pour extraire la charge utile.
Un ou plusieurs IDOC peuvent être transmis à la fois. Votre code devra analyser la charge utile pour déterminer ce qui va où.
Si l’un de vos codes génère une exception, le connecteur SAP .Net le détectera et alertera le côté SAP. Le côté SAP appellera alors votre méthode Rollback.
Résumé
L’utilisation du connecteur SAP .Net facilite la réception d’un IDOC d’un hôte SAP.