1
votes

Comment lire le code ABAP à l'aide d'un client Java

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.


1 commentaires

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'instruction READ 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.


3 Réponses :


1
votes

Vous pouvez accéder aux tableaux avec les techniques ci-dessous:

  • Utilisation de connecteurs SAP via RFC (RFC_READ_TABLE)
  • Utilisation du service Web SOAP avec la même fonction (RFC_READ_TABLE)
  • Utilisation de services Web personnalisés avec des fonctions existantes qui lisent des rapports, des fonctions, etc.

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.


0 commentaires

1
votes

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.


0 commentaires

1
votes

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.

 SICF entry

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.


0 commentaires