This is a test message to test the length of the message box.
Login
|
Foto von Nick Fewings auf Unsplash

Code vs. Stellenausschreibung

206

Wir sind auf eine aktuelle Stellenausschreibung auf LinkedIn gestoßen, die uns etwas zum Schmunzeln brachte. In diesem Artikel nehmen wir sie per Reverse Engineering auseinander.

Werbung


Als wir auf LinkedIn unterwegs waren, sind wir auf eine Stellenausschreibung gestoßen, die wir dir nicht vorenthalten wollen. Dort wird mit ABAP Coding nach einem ABAP Entwickler gesucht, hier würde man annehmen, bewerben sich auch nur Menschen die Ahnung von der Materie haben und das Beispiel auch verstehen.

 

Einleitung

Schauen wir uns zuerst einmal die Anzeige an. Auf den ersten Blick sieht es nach validem Coding aus, außer das es in Stichpunkt gepackt ist und damit für den Compiler nicht interpretierbar wäre.

 

Nehmen wir uns einmal der Herausforderung an und validieren, ob der Code durch einen Entwickler geschrieben wurde oder sich die Personalabteilung nur etwas ausgedacht hat. Per Reverse Engineering bauen wir uns die Originalobjekte zusammen.

 

Analyse

In der ersten Analyse wird ein Objekt einer Klasse erzeugt, wenn man sich die einzelnen Methoden der Klasse ansieht, stellt man schnell fest, dass diese Klasse kein Interface besitzt. Zumindest wird auch keines bei den Aufrufen verwenden, die Instanziierung läuft direkt über die Klasse per Inline-Deklaration. Damit können wir feststellen, welchen Datentyp die Referenz "lo_employee" haben wird.

 

Klasse

Legen wir im ersten Schritt einmal die Klasse an. Da es sich um eine Ausführung handelt, implementieren wir noch das Interface, um eine Konsolen Applikation daraus zu machen.

 

Damit haben wir eine leere Hülle, um das Coding einzufügen:

CLASS zcl_rewe_digital_employee DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_rewe_digital_employee IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.

  ENDMETHOD.
ENDCLASS.

 

Im nächsten Schritt können wir das Coding aus der Stelleausschreibung übernehmen, hier solltest du aber darauf achten die Punkte zu entfernen, damit wir keine Fehler im Compiler bekommen. Natürlich werden wir trotzdem mit jeder Menge Fehlermeldungen belohnt, da uns noch einige Dinge fehlen:

 

Refactoring

Als Nächstes sollten wir nun mit dem Refactoring des Codes starten, um eine aktivierbare Klasse zu erhalten. Im ersten Schritt legen wir alle Methoden an, dazu können wir die Refactoring Tools von den ABAP Development Tools (ADT) verwenden.

 

Nach der Abfrage der Methode und der Parameter, wird die Methode im privaten Bereich der Klasse angelegt. Weiterhin fällt auf, das die ADTs den Code leicht verändert haben:

lo_employee->connect_to( 'Experten' ) ( 'Workshops/Schulungen' ) ( 'Community' ) ) ).
lo_employee->add_content( 'SAP Learning Hub' ) ( 'Lernzeit' ) ( 'Dev-Buddy' ) ) ).

 

Die Klammer und das VALUE Statement sind verschwunden, das Refactoring scheint in diesem Fall nicht sauber zu arbeiten. Wir können aber erst einmal alle Methoden über diesen Weg anlegen und später einfach noch einmal den Original-Code einfügen. Da die Methoden aber von außen aufgerufen werden, müssen wir sie noch von PRIVATE auf PUBLIC setzen.

Nachdem alle Methoden angelegt sind, müssen wir noch bei allen verwendeten Methoden mit CHECK, einen Returning Parameter definieren. CHECK erwartet einen Vergleich, da keiner hinter dem Check aufgeführt ist, wird sehr wahrscheinlich ein boolscher Wert zurückgegeben. Demnach brauchen wir einen Returning Parameter vom Typ ABAP_BOOL oder ABAP_BOOLEAN.

 

Typen

Nachdem nun alle Methoden definiert sind und auf öffentlich stehen, können wir mit der Typisierung beginnen. Die Methoden haben Importing Parameter und es gibt einen offensichtlichen Typen, der im zweiten Abschnitt zur Generierung der Features verwendet wird. Hierbei scheint es sich um eine Struktur zu handeln, die in den folgenden Stichpunkten befüllt wird. Die meisten sind einfache Tabellen die Texte übernehmen, wobei man hier nicht den Typ STRING verwenden kann. Die verwendeten Literale können nur zusammen mit Feldern vom Typ CHAR verwendet werden, andere Typen führen zu Fehlermeldungen. Das Feld "Training" ist vom Typ ABAP_BOOL, da hier die Inline Funktion XSDBOOL verwendet wird, die einen boolschen Wert zurückliefert. Damit würde man aus dem Beispielcode die folgenden Typen generieren:

TYPES:
  tt_char     TYPE STANDARD TABLE OF char40 WITH EMPTY KEY,
  tt_language TYPE STANDARD TABLE OF char2 WITH EMPTY KEY,

  BEGIN OF tt_employee_features,
    Personality         TYPE tt_char,
    Attributes          TYPE tt_char,
    Experience          TYPE tt_char,
    Optional_Experience TYPE tt_char,
    Nice_to_Have        TYPE tt_char,
    Languages           TYPE tt_language,
    Training            TYPE abap_bool,
  END OF tt_employee_features.

 

Komplette Klasse

Wie immer hier noch einmal das vollständige Beispiel, welches auch ausgeführt und debuggt werden kann. Nur sollte man in diesem Zustand keine Ausgabe erwarten:

CLASS zcl_rewe_digital_employee DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

    TYPES:
      tt_char     TYPE STANDARD TABLE OF char40 WITH EMPTY KEY,
      tt_language TYPE STANDARD TABLE OF char2 WITH EMPTY KEY,

      BEGIN OF tt_employee_features,
        Personality         TYPE tt_char,
        Attributes          TYPE tt_char,
        Experience          TYPE tt_char,
        Optional_Experience TYPE tt_char,
        Nice_to_Have        TYPE tt_char,
        Languages           TYPE tt_language,
        Training            TYPE abap_bool,
      END OF tt_employee_features.

    METHODS:
      has_sap_business_processes
        RETURNING VALUE(rd_result) TYPE abap_bool,

      want_to_use_technology
        IMPORTING
                  it_data          TYPE tt_char
        RETURNING VALUE(rd_result) TYPE abap_bool,

      validate_periodically
        IMPORTING
                  it_data          TYPE tt_char
        RETURNING VALUE(rd_result) TYPE abap_bool,

      connect_to
        IMPORTING
          it_data TYPE tt_char,

      add_content
        IMPORTING
          it_data TYPE tt_char,

      add_new_employee
        IMPORTING
          is_data TYPE tt_employee_features.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_rewe_digital_employee IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA:
      ld_studies  TYPE abap_bool,
      ld_training TYPE abap_bool.

    DATA(lo_employee) = NEW zcl_rewe_digital_employee( ).

    CHECK lo_employee->has_sap_business_processes( ).
    CHECK lo_employee->want_to_use_technology( VALUE #( ( 'BTP' ) ( 'RAP' ) ( 'ODATA' ) ( 'S/4 HAHA' ) ) ).
    CHECK lo_employee->validate_periodically( VALUE #( ( 'Qualität' ) ( 'Beratung' ) ( 'Optimale Lösung' ) ) ).

    lo_employee->connect_to( VALUE #( ( 'Experten' ) ( 'Workshops/Schulungen' ) ( 'Community' ) ) ).
    lo_employee->add_content( VALUE #( ( 'SAP Learning Hub' ) ( 'Lernzeit' ) ( 'Dev-Buddy' ) ) ).

    DATA(lt_your_features) = VALUE zcl_rewe_digital_employee=>tt_employee_features(
      Personality = VALUE #( ( 'Sorgfalt' ) ( 'Zuverlässigkeit' ) ( 'Engagement' ) ( 'Mut' ) ( 'Verantwortung' ) ( 'Teamgeist' ) )
      Attributes = VALUE #( ( 'mutig' ) ( 'wissbegierig' ) ( 'offen' ) ( 'etwas wagen' ) ( 'proaktiv' ) )
      Experience = VALUE #( ( 'ABAP' ) ( 'ABAP OO' ) )
      Optional_Experience = VALUE #( ( 'SAP Module FI, SD, CO' ) ( 'Schnittstellen IDOC, REST' ) ( 'RAP' ) ( 'Webdynpro' ) ( 'ABAP Unit' ) )
      Nice_to_Have = VALUE #( ( 'S/4 HANA' ) ( 'Agile Skills' ) )
      Languages = VALUE #( ( 'DE' ) ( 'EN' ) )
      Training = xsdbool( ld_studies = abap_true OR ld_training = abap_true )
    ).

    lo_employee->add_new_employee( lt_your_features ).
  ENDMETHOD.


  METHOD has_sap_business_processes.
  ENDMETHOD.


  METHOD want_to_use_technology.
  ENDMETHOD.


  METHOD validate_periodically.
  ENDMETHOD.


  METHOD connect_to.
  ENDMETHOD.


  METHOD add_content.
  ENDMETHOD.


  METHOD add_new_employee.
  ENDMETHOD.
ENDCLASS.

 

Fehler

Im Großen und Ganzen kann man sagen, dass das Coding höchstwahrscheinlich von einem Entwickler kommt und nicht von der HR-Abteilung selbst. Die Benennung des Typen fühlt sich nicht korrekt an, da es hier eigentlich um eine Struktur und nicht um eine Tabelle handelt. Die beiden Variablen für die Ausbildung scheinen lokal definiert wurden zur sein, die korrekte Definition fehlt noch oder muss durch den Bewerber ergänzt werden.

 

Fazit

Vielleicht soll der Bewerber auch die Augen offenhalten und die gefundenen Fehler bringen Pluspunkte bei einem neuen Arbeitgeber. Grundsätzlich wurde der Code solide in Modern ABAP geschrieben und würde am Ende auch funktionieren, wenn man ihn ausführt. Am Ende bleibt nur zu sagen, die Variablennamen, Methodennamen ergeben scheinbar die Überschriften, die Festwerte sind die Anforderungen und Inhalte.

 

Quelle
LinkedIn


Enthaltene Themen:
ABAPLustige Stellenausschreibung
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP Cloud - Eigene Einheit

Kategorie - ABAP

In diesem Artikel schauen wir uns an, wie wir eigene Einheiten im System definieren können und diese dann in unserer RAP Anwendung anbinden.

06.02.2026

ABAP in der Praxis - Objekt Generator

Kategorie - ABAP

In diesem Beispiel schauen wir uns an, wie wir mit der XCO Bibliothek einen wiederverwendbaren Generator erstellen, um uns für unsere Tutorials etwas Arbeit zu sparen und automatisiert DDIC Objekte zu generieren.

09.01.2026

031: Recycling-Heroes - Unit Testing (Configuration API)

Kategorie - YouTube

Nachdem wir die Configuration API fertiggestellt haben, schauen wir uns einmal das Thema Unit Tests an und wie wir unsere API automatisch testen können. Damit sparen wir uns später den Aufwand für manuelle Tests.

05.01.2026

Transformation des ABAP Entwicklers

Kategorie - ABAP

Die Rolle des ABAP Entwicklers befindet sich seit einer Weile in der Transformation zu einem neuen Bild, mit neuen Technologien und Möglichkeiten. Schauen wir uns einmal diesen Weg an und diskutieren, wo die Reise hingeht.

02.01.2026

ABAP OO - Injector

Kategorie - ABAP

Beim letzten Artikel hatten wir uns ABAP OO und die Evolution der Design Pattern angeschaut und wie wir sie am besten nutzen können. Daher gehen wir in diesem Artikel noch einmal in die Details des Injector für die Testbarkeit.

23.12.2025