J'ai besoin de lire du code ABAP écrit par des développeurs SAP. Je veux écrire mon propre client en utilisant Java / Python qui peut s'intégrer au système SAP et me procurer le code ABAP.
Ce que je comprends, c'est que le code ABAP est stocké dans une base de données SAP comme HANA, mysql etc. Il y a donc un moyen que SAP fournit où nous pouvons lire le code comme nous pouvons le faire dans Git / SVN etc.
3 Réponses :
Vous pouvez accéder aux tableaux avec les techniques ci-dessous:
Vous pouvez utiliser à la fois Java ou Pyhton pour RFC, il existe déjà des sorties github repo pour python .
Si vous sélectionnez la lecture directement dans la table db, vous devez connaître la structure des données enregistrées. Il a son propre mécanisme pour les objets POO. Daniel Berlin essaie d'implémenter un analyseur binaire en C ++ dans le projet sap-reposrc-decompressor . N'oubliez jamais cette source dépendante de la version SAP.
Je pense que l'utilisation du plugin ADT (ABAP Development Tools) est bonne pour les systèmes mis à jour. Il existe déjà un plugin Eclipse pour ADT. ADT n'existe pas dans les anciens systèmes.
Si vous prévoyez d'utiliser votre solution dans l'ancien système (après la version 7.01), vous pouvez créer votre propre solution avec abapGit et des services Web personnalisés.
REMARQUE : n'oubliez pas que les éléments de rapport et de données (variables, tableaux, types) sont enregistrés dans des tableaux séparés. Objets Dynpro (écrans, etc.), rapports (Smartforms) des choses difficiles à décompiler.
J'ai utilisé les appels RFC RPY_FUNCTIONMODULE_READ
et RPY_FUNCTIONMODULE_READ_NEW
via le wrapper / bibliothèque perl NWRFC pour récupérer le code ABAP.
Avant de réinventer une roue, jetez un œil à:
Si vous voulez JUSTE le code source, vous pouvez exposer un service de repos / Endpoint très simple dans SAP.
Ce service lirait simplement le code brut et le renverrait sous forme de texte brut.
Chaque abaper pourrait créer cela pour vous.
MAIS est la source brute uniquement. Il y a beaucoup plus à un développement complet
et pourquoi des outils comme ABAPGIT existent.
Dans SICF, créez un nouveau point de terminaison / service. EG ZCODE_MONKEY avec la classe ci-dessous comme exemple.
Maintenant, activez le service.
Appeler le point de terminaison http: // serveur: PORT / zcode_monkey? name = ZCODE_MONKEY
Exemple de mise en œuvre
CLASS zcode_monkey DEFINITION PUBLIC CREATE PUBLIC . PUBLIC SECTION. INTERFACES: if_http_extension. ENDCLASS. CLASS zcode_monkey IMPLEMENTATION. METHOD if_http_extension~handle_request. DATA: lo_src type ref to CL_OO_SOURCE, l_name TYPE string, l_repname type c length 30, l_clskey type seoclskey , l_source type rswsourcet, resultcode TYPE string. FIELD-SYMBOLS: <line> TYPE LINE OF rswsourcet. l_name = server->request->get_form_field( name = 'NAME' ). l_clskey = l_name. l_repname = l_name. create OBJECT lo_src EXPORTING clskey = l_clskey EXCEPTIONS class_not_existing = 1 others = 2 . IF sy-subrc <> 0. read REPORT l_repname into l_source. else. lo_src->read( ). lo_src->if_oo_clif_source~get_source( IMPORTING source = l_source ). ENDIF. LOOP AT l_source ASSIGNING <line>. CONCATENATE resultCode cl_abap_char_utilities=>cr_lf <line> INTO resultCode RESPECTING BLANKS. " always show respect ;) ENDLOOP. SErver->response->set_content_type( content_type = 'text/plain' ). server->response->set_cdata( EXPORTING data = resultcode ). server->response->set_status( EXPORTING code = 200 reason = 'this is a 3.50 piece of code. Dont ask...its a demo ' ). ENDMETHOD. ENDCLASS.
Quelques idées: le code source ABAP est stocké dans la table de base de données
REPOSRC
, mais compressé à l'aide d'un algorithme SAP interne. Pour l'extraire, vous devez créer un programme ABAP avec l'instructionREAD REPORT
et rendre le programme appelable en externe (protocole SAP RFC, ou tout autre moyen classique comme HTTP). Vous pouvez également pousser le code source à l'extérieur via l'outil ABAP abapGit , vers un référentiel HTTP Git. Finalement, vous pouvez créer un programme ABAP que vous appelez, qui exécute abapGit. L'avantage d'utiliser abapGit est qu'il génère d'autres objets de code SAP.