Intégration SAP et Python ou comment récupérer des données de SAP plus facilement

Bonjour, Habr!

Je veux partager l'expérience d'une tâche intéressante sur la façon d'interagir facilement avec les systèmes SAP à l'aide de Python - peu importe le module ou la version de la plate-forme.

Si seule la solution technique est intéressante, sautez toutes les paroles et voyez un exemple d'implémentation.

Paroles


Tout se résumait au fait que l'un des clients avait besoin de télécharger des données de leur système SAP ERP, en manipulant déjà créer des rapports et des envois par courrier électronique aux personnes intéressées, ainsi que d'autres actions.

En fait, lorsque nous discutons de la solution d'un tel problème, nous, en tant qu'entrepreneur, avons proposé diverses options et l'une des plus évidentes est de tout faire à l'aide de la fonctionnalité SAP interne, de manière simple parmi les «sapeurs» de Zed all avec ABAP.

La première chose que nous avons rencontrée a été les critères de sélection des données qui ne sont pas complètement transparentes des mots du client, à savoir les données de quels tableaux, pourquoi, pourquoi, quelles actions doivent être effectuées avec eux. Si vous donnez un exemple, le client devait décharger la présence des employés de bureau, avec des données dans le contexte des feuilles de temps et des vacances. Il était également nécessaire de créer des rapports sur la performance des employés avec des analyses sur son temps au travail, je n'entrerai pas dans les détails, mais je dirai que le temps passé affecte la productivité, mais pour le savoir, vous devez calculer la quantité de temps au travail avec le résultat du travail et bien plus un autre. Ce n'est qu'un exemple de rapport, et le client a généré beaucoup lors des discussions.

Après de longues conversations, nous avons réalisé que SAP Query ou BI \ BO pouvait devenir une telle solution, mais le client n'était pas très satisfait du coût estimé de la solution et pas de la flexibilité la plus pratique.

Solution Python


Puis j'ai pensé à ma propre tête à un article sur une ressource sur la bibliothèque pyrfc et comme moi, n'ayant pas été programmeur python, mais ayant lu une fois à ce sujet, j'ai décidé de l'étudier à la maison, et à ma grande surprise, j'étais un amateur à l'aise de ce langage de programmation, j'ai trouvé que la connexion à n'importe quel système SAP est incroyablement simple; en outre, cela prend 20 minutes.

Vingt minutes CARL !!!

Imaginez simplement que vous pouvez configurer l'interface de connexion avec le système SAP ERP sans utiliser de bus de données et toutes sortes de PI \ XI là-bas en si peu de temps.

Implémentation


Après m'être finalement assuré que cette solution fonctionne et satisfait le client, j'ai étudié plusieurs plateformes (je l'ai étudiée, je lis environ toutes les 10 minutes), j'ai choisi la plateforme Odoo, entre autres, car elle est plus facile à déployer et possède toutes les propriétés nécessaires, telles que: Bon interface, système de droits d'accès, application mobile, serveur de messagerie, bonne interface de base de données (psql).

De plus, tout est très simple.

Installez Odoo sur la machine virtuelle du client (j'ai pris la version 8) car c'est le plus simple pour le moment, je sais que la version 12 est déjà, mais la tâche ne nécessite pas tous les nouveaux produits sympas.

Installation de toutes les bibliothèques nécessaires, en particulier pyrfc - un lien vers un article sur l'installation et la connexion .

De plus, il était seulement nécessaire d'écrire un petit module dans la plate-forme Odoo elle-même, pour la connectivité, et il avait beaucoup d'outils pour visualiser les données.

Connectez-vous au système client:

from pyrfc import Connection user = 'user' passwd = 'secretuser' saprouter = '/H/192.168.0.140/S/3297' conn = Connection(user=user, passwd=password, mshost='CLient', msserv='192.168.0.140', sysid='01', group="SPACE", saprouter=saprouter, client='900') 

Appelez BAPI pour obtenir des informations sur l'utilisateur

 b_result = conn.call('BAPI_USER_GET_DETAIL', USERNAME = 'user', CACHE_RESULTS = ' ') 

Changement d'utilisateur

 updated_address['CITY'] = u'Moscow' r = conn.call('BAPI_USER_CHANGE', USERNAME='user', ADDRESS=updated_address) 

L'outil le plus important pour obtenir des données de SAP, en ce qui concerne les tables, est le module fonctionnel RFC_READ_TABLE, il y a d'autres modules dans la plateforme SAP qui peuvent être appelés, il doit y avoir un paramètre sur eux qui dit qu'ils peuvent être appelés à l'aide de RFC.

Par exemple:

 from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError from ConfigParser import ConfigParser from pprint import PrettyPrinter def main(): try: config = ConfigParser() config.read('sapnwrfc.cfg') - # ,        SAP ERP params_connection = config._sections['connection'] conn = Connection(**params_connection) #    options = [{ 'TEXT': "FCURR = 'USD'"}] pp = PrettyPrinter(indent=4) ROWS_AT_A_TIME = 10 rowskips = 0 while True: print u"----Begin of Batch---" result = conn.call('RFC_READ_TABLE', \ QUERY_TABLE = 'TCURR', \ OPTIONS = options, \ ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME) pp.pprint(result['DATA']) rowskips += ROWS_AT_A_TIME if len(result['DATA']) < ROWS_AT_A_TIME: break except CommunicationError: print u"Could not connect to server." raise except LogonError: print u"Could not log in. Wrong credentials?" raise except (ABAPApplicationError, ABAPRuntimeError): print u"An error occurred." raise 

Résultat


Dans cette image, une liste des rapports qui sont déchargés par cette méthode, et un exemple de l'un d'eux.



Résumé


Dans l'ensemble, cette méthode ouvre de grandes opportunités pour remplacer des outils SAP très coûteux et d'autres par des outils plus flexibles et ouverts.

Les exemples de code sont tirés de sources ouvertes. Je n'ai pas le droit d'utiliser le code client dans l'article, et je ne suis pas un programmeur Python, j'aurais pu faire une erreur quelque part.

Je veux ajouter que nous utilisons déjà cet outil dans un très large éventail de tâches liées au calcul des KPI, à la sortie de données vers d'autres sources (sites Web, bases de données de fournisseurs et de clients), à l'envoi d'informations à partir de systèmes basés sur des données de SAP, et bien plus encore.
En général, une telle opportunité a été une découverte pour moi, si quelqu'un a une expérience similaire, j'aimerais l'écouter.

PS: je n'ai pas abordé la question des licences, donc je ne peux rien dire avec certitude sur cette question.
Je vous remercie!

Habr Link
Cordialement, Consultant SAP

Source: https://habr.com/ru/post/fr422681/


All Articles