[Gratis tool] Een Business Object ABAP-klasse genereren in 5 seconden?

SAP abap oo 1

ABAP-ontwikkelaars moeten object georiënteerd programmeren (ook wel OO genoemd) in plaats van procedureel. Redenen hiervoor zijn onder andere dat het beter geheugenbeheer heeft, betere syntaxiscontroles en meer hergebruikmogelijkheden. Ook SAP geeft aan dat OO de voorkeur heeft. De meeste bedrijfslogica van SAP moet echter benaderd worden via BAPIs *1, die procedureel zijn.

Om deze omslag te maken van procedureel naar OO, schrijf ik Business Object ABAP-klassen code, voor het “inpakken” van deze BAPI’s in klassen. Meestal begon ik met het inpakken van de Create, Read en Update BAPI’s en daarna het toevoegen van extra bedrijfslogica en bedrijfsgegevens aan de klasse.

image 3

Het handmatig maken van BO ABAP-klassen is foutgevoelig en kost veel tijd. Dit maakt het een mooi startpunt voor innovatie. Ik kreeg het idee om deze stap te automatiseren door een tool te maken die de Business Object ABAP-klasse code genereert o.b.v. de Create, Read en Update BAPI’s van de SAP Business Objecten.

Dit simpele idee was niet zo simpel te realiseren, omdat BAPI’s er zijn in verschillende varianten. Dit onderscheidt zich in de verschillende parameters (element, structuur en tabelparameters), verschillende return parameters (structuur vs. tabel) (BAPIRET2, BAPIRET1, BAPIRETURN) en verschillende manieren van read BAPI’s (GET_DETAIL en GET_LIST BAPI’s). Het heeft me veel tijd gekost om de tool af te maken, maar nu is deze klaar voor gebruik. Het programma heet “ABAP BAPI BO Class Generator”. Het is open source en kan vrij worden ingezet en aangepast.

De code generator genereert ongeveer 95 tot 100 procent van de code, afhankelijk van de data van de BOR-object type *2, main DB table *3 en de BAPI’s. Soms moet je enkele aanpassingen maken om de klasse werkende te maken.

Installatie

De installatie is eenvoudig. Download het ABAP-programma van de GitHub site: https://github.com/alwinvandeput/abap_bapi_bo_class_generator.

Kopieer vervolgens het programma ZAB_ABAP_BAPI_BO_CLASS_GEN_P.txt naar jouw systeem en noem het bijvoorbeeld ZAB_ABAP_BAPI_BO_CLASS_GEN_P.

Demo

In deze demo case gaan we SAP-artikel data lezen. We zullen de volgende stappen uitvoeren.

  1. De code genereren;
  2. Het testprogramma maken;
  3. Het testprogramma uitvoeren.

De code genereren

  • Start transactie SA38 om het onderstaande programma uit te voeren: ZAB_ABAP_BAPI_BO_CLASS_GEN_PRG.
    image 4
  • Druk op knop “Select business object”.
    image 5
  • Vul Main DB table “MARA” en dubbelklik op “Added – BUS1001 Material”.
    image 6
  • Dubbelklik op Module afkorting MM.
    image 7
  • Het selectiescherm is nu gevuld.
    image 9
  • Controleer of de ABAP naming gevuld is.
  • Druk op F8.
  • De code is gegenereerd, en alle code is automatisch geselecteerd.
    image 10
  • Druk op de knop Copy.

Testprogramma creëren

Om het testprogramma te creëren, doorloop je de volgende stappen:

  • Start transactie SE80 en creëer een nieuw ABAP executable program.
  • Plak de gegenereerde code in het programma.
  • Activeer de code.
  • Zie de gegenereerde klassen.
    image 11
  • De belangrijkste klasse is de Business Object klasse ZMM_MATERAIL_BO.
    Het bevat de BAPI’s:
    • CREATE_INSTANCE_BO = BAPI_MATERIAL_SAVE
    • GET_DATA = BAPI_MATERIAL_GET_DETAIL
    • UPDATE_DATA = BAPI_MATERIAL_SAVE

De overige klassen zijn voor het Test framework en het Business Object framework. Klasse ZMM_MATERAIL_BO_TT is de Unit Test klasse voor de BO-klasse.

Test van de read methode

De volgende stap is het testen van de read methode. Dit doe je als volgt:

  • Voer het programma uit door op F8 te drukken.
  • Zie de resultaten.
    image 12

    Het toont alle data die gelezen is door methode GET_DATA.
    De andere unit tests voor CREATE en UPDATE zullen in volgende blogs worden uitgelegd.

  • Voor het lezen van de data enkel deze regels waren nodig.
    image 13
    En dit kan zelfs op 1 regel.
    image 14

Filter functionaliteit

BAPI’s bevatten vaak veel velden en via de standaard functiebouwsteen transactie SE37 is het soms lastig om snel het gewenste veld te vinden. Daarom toont het test programma de data in een ALV tree waarbij ook nog gefilterd kan worden op namen, interne waarde, externe waarden en nog enkele velden.

  • Stel ik wil weten welk veld de waarde “PC” (pieces) bevat dan kan ik bijvoorbeeld filteren op *P*.
    image 15
  • En het resultaat is
    image 16

SDN-weblog

Wil je op de hoogte blijven van ontwikkelingen rondom deze tool? Volg dan deze SDN-weblog: https://blogs.sap.com/2019/08/27/abap-bapi-bo-class-generator/

Ik hoop dat je het programma gaat gebruiken en gaat delen. Voor meer informatie kan contact met mij worden opgenomen.
Alwin van de Put – SAP ABAP ontwikkelaar | Email: alwin.vandeput@mybrand.nl

Specifieke woorden

*1 BAPI betekent Business Application Programming Interface. Deze interface kan aangeroepen worden vanuit SAP of door programma’s buiten SAP.
*2 BOR-object type betekent Business Object Repository object type. BOR types zijn de Business Objecten van SAP en kunnen bekeken worden via UI-transactie BAPI.
*3 Main DB table is de hoofdtabel van het BOR-object type. SAP slaat deze op in de tabel SWOTLV in veld REFSTRUCT op BAPI-niveau.

Alwin van de Put SAP consultant

Alwin van de Put

Senior SAP Developer bij myBrand Conclusion