[ABAP] Übersicht SAP-Klassen und -Interfaces

Klasse                        Paket                         Funktion

/ui2/cl_abap2json             /UI2/BASIS_SERVICES_START_UP  ABAP nach JSON konvertieren
/ui2/cl_json                  /UI2/NWBC_CORE                JSON converter
/ui2/cl_number                /UI2/BASIS_TINY_DATA          Generic compressed serialization class

/ui5/cl_theme_util            /UI5/THEMING_INFRA            UI Theming: Utility functions

cf_reca_message_list          RE_CA_BC                      Nachrichtensammler: Factory

cl_abap_browser               SABAPDOCU                     Anzeige einer HTML- oder XML-Datei
cl_abap_char_utilities        S ABP_CONVERT                 Hilfsmittel für Zeichenverarbeitung
cl_abap_classdescr            SABP_RTTI                     Run Time Type Services
cl_abap_codepage              SABP_CONVERT                  codepage utility class
cl_abap_conv_obj              SCP                           Ein CCC Converter-Objekt
cl_abap_container_utilities   SABP_CONVERT                  Container Programmierung
cl_abap_conv_in_ce            SABP_CONVERT                  Codepage- und Endian Konvertierung (Extern -> Systemformat)
cl_abap_conv_out_ce           SABP_CONVERT                  Codepage- und Endian Konvertierung (Systemformat -> Extern)
cl_abap_datadescr             SABP_RTTI                     Run Time Type Services
cl_abap_datfm                 SABP_CONVERT                  Internationalisierung und Datumsformat
cl_abap_dyn_prg               SABP                          Support for dynamic programming
cl_abap_elemdescr             SABP_RTTI                     Run Time Type Services
cl_abap_exceptional_values    SABP_CORE                     Liefert min,max...-Werte vordefinierter Typen
cl_abap_file_utilities        SABP                          Hilfsmittel für Files
cl_abap_format                SABP                          Hilfsmittel zur Formatierung
cl_abap_gzip                  ABAP_EXPIMP                   Klasse zur (De-) Kompression (gzip)
cl_abap_hmac                  SECH                          Message Authentication Code (MAC) einer Nachricht
cl_abap_list_layout           SABP_LIST_TOOLS               Hilfsmittel für ABAP-Listen
cl_abap_matcher               SABP_REGEX                    Reguläre Ausdrücke
cl_abap_message_digest        SECH                          Kryptografischer Hash-Wert einer Nachricht
cl_abap_memory_utilities      SABP_CORE                     Hilfsmittel zur ABAP-Speicherverwaltung
cl_abap_random                SABP_RANDOM                   Pseudozufallszahlengenerator
cl_abap_random_int            SABP_RANDOM                   Integer Zufallszahlen
cl_abap_random_float          SABP_RANDOM                   Float Zufallszahlen
cl_abap_runtime               SABP_RUNTIME                  Hilfsklasse für Laufzeitmessungen
cl_abap_session_temperature   SABP_DAAG                     DB-Zugriffssteuerung für Data Aging
cl_abap_stack_temperature     SABP_DAAG                     DB-Zugriffssteuerung für Data Aging
cl_abap_structdescr           SABP_RTTI                     Run Time Type Services
cl_abap_syst                  SABP_CORE                     Sichere Ermittlung der SYST-Werte
cl_abap_tabledescr            SABP_RTTI                     Run Time Type Services
cl_abap_timefm                SABP_CONVERT                  Zeitformat
cl_abap_tstmp                 SABP_CONVERT                  Arithmetik- und Konvertierung für TimeStamps
cl_abap_typedescr             SABP_RTTI                     Run Time Type Services
cl_abap_zip                   ABAP_EXPIMP                   Zip-Utility

cl_alink_connection           SAOP                          ArchiveLink Verknüpfungen

cl_alv_table_create           SLIS                          Dynamischer Create einer ALV-Datentabelle

cl_binary_relation            SOBL                          API für Binäre Verknüpfung

cl_bcs_convert                SBCOMS                        BCS: Utilities für den Dokumenteninhalt
cl_bcs_message                SBCS_SEND                     BCS: Nachricht versenden
cl_bcs_utilities              SBCS_SEND                     Hilfsfunktionen zur Sendeschnittstelle

cl_bs_period_toolset_basics   BS_PERIOD_API                 Period Toolset - Basic Functions

cl_ci_query_attributes        S_CODE_INSPECTOR              Code Inspector: Abfrage von Attributen

cl_clb_tools                  S_CLB_COMMON                  Collaboration: Common Tools
cl_clb_parse_json             S_CLB_COMMON                  Utility Class to Parse JSON
cl_ctmenu                     SGUI                          Context Menu
cl_cts_language_file_io       STRALAN                       Filezugriffklasse des Sprachentransports

cl_db_sys                     SABP_CORE                     Abfragen von Datenbank-Informationen
cl_demo_output                SABAP_DEMOS_OUTPUT_STREAM     Demo-Ausgaben mit statischen Methoden oder Instanzmethoden

cl_fdt_xl_spreadsheet         SFDT_EXCEL_CORE               FDT:Spreadsheet document

cl_fxs_image_processor        S_XSLFO_SUPPLEMENTARY_IMAGE   Image Processor
cl_fxs_image_info             S_XSLFO_SUPPLEMENTARY_IMAGE   Image Information Determiner
cl_fxs_mime_types             S_XSLFO_SUPPLEMENTARY         Mime Type Constants

cl_gos_attachment_query       SGOS_ATTA                     Statistiken für Anlagen

cl_gui_abapedit               SEDI                          Abap Edit Control
cl_gui_alv_grid               SLIS                          ALV List Viewer
cl_gui_calendar               SAPCALENDAR                   Calendar Control Proxy Class
cl_gui_cfw                    SCET                          Control Framework Basisklasse
cl_gui_chart_engine           SPIG                          Graphics: Präsentationsgrafiken
cl_gui_chart_engine_win       SPIG                          Graphics: Präsentationsgrafiken (WinGUI)
cl_gui_column_tree            SEU_TREE_CONTROL              Column Tree Control
cl_gui_container              SCET                          Abstracter Container fuer GUI Controls
cl_gui_control                SCET                          Proxy-Klasse für Control im GUI
cl_gui_custom_container       SCET                          Container fuer Custom Controls in der Dynpro Area
cl_gui_dialogbox_container    SCET                          Container fuer Custom Controls in der Dynpro Area
cl_gui_docking_container      SCET                          Docking Control Container
cl_gui_ecl_2dviewer           SECLVIEWER                    Engineering Client 2D Viewer
cl_gui_ecl_3dviewer           SECLVIEWER                    Engineering Client 3D Viewer
cl_gui_ecl_viewerbox          SECLVIEWER                    ECL Viewer als Pop-up Fenster
cl_gui_frontend_services      SCET                          Frontend Services
cl_gui_gos_container          SCET                          Generic Object Services Container
cl_gui_html_viewer            SAPHTML                       HTML Control proxy class
cl_gui_list_tree              SEU_TREE_CONTROL              List Tree Control
cl_gui_picture                SAPPICTURE                    SAP Picture Control
cl_gui_props_consumer         SCET                          Nimmt globale Gui-Props entgegen
cl_gui_simple_tree            SEU_TREE_CONTROL              Simple Tree Control
cl_gui_splitter_container     SCET                          Splitter Control
cl_gui_textedit               SAPTEXTEDIT                   SAP TextEdit Control
cl_gui_timer                  SCET                          SAP Timer Control
cl_gui_toolbar                SAPTOOLBAR                    Toolbar Control

cl_fdt_json                   SFDT_CORE                     Create JSON format from ABAP data and vice versa

cl_hrpad_date_computations    PAOC_PAD_DATE_COMPUTATIONS    Datumsberechnungen

cl_http_client                SHTTP                         HTTP client control block
cl_http_server                SIHTTP                        HTTP Framework (iHTTP) HTTP Server
cl_http_utility               SIHTTP                        HTTP Framework (iHTTP) HTTP Utilities

cl_icf_csv                    SHTTP                         ICF-Schnitstelle für CSV-File
cl_igs_image_converter        SPIG                          Internet Graphics Service: Image Converter

cl_openxml_helper             S_OOXML_CROSS                 OpenXML Helper Class

cl_s_aut_bal_log              S_AUT                         Meldungsprotokoll-Behandler

cl_salv_controller_metadata   SALV_OM_OBJECTS               ALV: abstrakter Controller
cl_salv_ex_util               SALV_EX                       utlity Klasse
cl_salv_table                 SALV_OM_OBJECTS               Basisklasse für einfache Tabellen

cl_time_chart_simple          S_DBMON_ORA_COCKPIT           Simple time chart (based on chart engine)

cl_xml_document               SWXML                         XML-Dokument für WF- WEB-Aktivität

if_salv_gui_table_ida         SALV_IDA_PUB                  ALV with integrated data access (ALV with IDA)

[JavaScript] Eine Klasse definieren

Klassendefinition ab ES6

// https://javascript.info/class
// https://javascript.info/property-accessors
class Rechteck
{
  // Konstruktor
  constructor(h, b) {
    this.h = h;
    this.b = b;
  }
   
  // public Properties
  get flaeche() {
    return this.Flaeche();
  }
 
  set hoehe(value) {
    this.h = value;
  }
  
  set breite(value) {
    this.b = value;
  }
  
  // public Methoden
  Flaeche() {
    return this.h * this.b;
  }
  
  // statische Methoden
  static Calc(h, b) {
    return h * b;
  }
}
 
const q = new Rechteck(10, 10);
 
console.log(q.flaeche);
q.hoehe = 5;
console.log(q.Flaeche());
console.log(Rechteck.Calc(2, 3));
console.log(Object.getOwnPropertyNames(Rechteck.prototype));

herkömmlich über „function“

function Rechteck(h, b)
{ 
    this.h = h;
    this.b = b;
   
    Rechteck.prototype.Flaeche = function() {
      return this.h * this.b;
    }
}
 
let q = new Rechteck(10, 10);
 
console.log(q.Flaeche());
console.log(Object.getOwnPropertyNames(Rechteck.prototype));

[JavaScript] Fortgeschrittene Objektdefinition: Revealing Module Pattern (Kapselung plus öffentliche Schnittstelle)

// https://wiki.selfhtml.org/wiki/JavaScript/Module_und_Kapselung

// Klasse / Modul definieren
// Grundmodul
let oModule = (function() {
  // private
  let priv1 = 100;
  let priv2 = 200;
   
  function priv_func1(var1, var2) {
    return var1 + var2 + priv1;
  }
 
  function priv_func2(var1, var2) {
    return var1 + var2 + priv2;
  }
   
  // public 
  return {
    public_func1: function(var1, var2) {
      return priv_func1(var1, var2) + priv_func2(var1, var2);
    }
  };
 
})();

// Erweiterung des Grundmoduls um public und private Methoden
(function (module) {
  // private
  let priv3 = 200;
  
  function priv_func3(var1, var2) {
    return var1 + var2 + priv3;
  }
  
  // public
  module.public_func2 = function(var1, var2) {
    return priv_func3(var1, var2);
  };
})(oModule);

// ok -> 306
console.log(oModule.public_func1(1, 2));
// ok -> 203
console.log(oModule.public_func2(1, 2));
// undefined
console.log(oModule.priv1);
// undefined
console.log(oModule.priv3);
// "error"
console.log(oModule.priv_func1(1, 2));
// "error"
console.log(oModule.priv_func3(1, 2));

[ABAP] OO: Vererbung, Methodenredefinition, Vererbungshierarchie

* Einfache Klasse für Demo von Vererbung von Oberklasse an Unterklasse
* Methodenredefinition, Vererbungshierarchie

* Oberklasse
CLASS lcl_auto DEFINITION.
  PUBLIC SECTION.
* Instanzkonstruktor
    METHODS:
      constructor
        IMPORTING
          i_name TYPE string.

* funktionale Instanzmethode, gibt Namen zurück
    METHODS:
      get_name
        RETURNING VALUE(rv_name) TYPE string.

* funktionale Instanzmethode, gibt Ergebnis zurück
    METHODS:
      get_type_and_name
        RETURNING VALUE(rv_type_name) TYPE string.

  PROTECTED SECTION.
* funktionale Instanzmethode, ist nur innerhalb der Vererbungshierarchie sichtbar
    METHODS:
      get_type
        RETURNING VALUE(rv_type) TYPE string.

  PRIVATE SECTION.
    DATA: gv_name TYPE string.
ENDCLASS.

CLASS lcl_auto IMPLEMENTATION.
  METHOD constructor.
    gv_name = i_name.
  ENDMETHOD.

  METHOD get_name.
    rv_name = gv_name.
  ENDMETHOD.

  METHOD get_type_and_name.
* Aufruf der verdeckten Klassen-Funktion über me-> (kann auch weggelassen werden)
    rv_type_name = |{ me->get_type( ) }: { gv_name }|.
  ENDMETHOD.

  METHOD get_type.
    rv_type = 'AUTO'.
  ENDMETHOD.
ENDCLASS.

* Unterklasse lcl_kombi, erbt von lcl_auto
CLASS lcl_kombi DEFINITION INHERITING FROM lcl_auto.
  PROTECTED SECTION.
* Methode der Oberklasse wird überschrieben
    METHODS:
      get_type REDEFINITION.
ENDCLASS.

CLASS lcl_kombi IMPLEMENTATION.
  METHOD get_type.
* Aufruf der Funktion der Oberklasse über "super"
    rv_type = |{ super->get_type( ) } -> KOMBI|.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Kombi erzeugen
  DATA(o_kombi) = NEW lcl_kombi( 'Audi A3' ).
* Methode der Klasse lcl_auto auftrufen
  WRITE: / o_kombi->get_name( ).
* Methode der Klasse lcl_kombi auftrufen
  WRITE: / o_kombi->get_type_and_name( ).

[ABAP] OO: Vererbung, Polymorphie, Aggregation, CAST

* Einfache Klasse für Demo von Vererbung, Polymorphie und Casting (Up/Down) von Objektreferenzen

* Oberklasse
CLASS lcl_auto DEFINITION.
  PUBLIC SECTION.
    METHODS:
      constructor
        IMPORTING
          i_name TYPE string.

    METHODS:
      get_name
        RETURNING VALUE(rv_name) TYPE string.

  PRIVATE SECTION.
    DATA: gv_name TYPE string.
ENDCLASS.

CLASS lcl_auto IMPLEMENTATION.
  METHOD constructor.
    gv_name = i_name.
  ENDMETHOD.

  METHOD get_name.
    rv_name = gv_name.
  ENDMETHOD.
ENDCLASS.

* Unterklasse, erbt von lcl_auto
CLASS lcl_kombi DEFINITION INHERITING FROM lcl_auto.
  PUBLIC SECTION.
    METHODS:
* neue funktionale Methode
* gibt Stauraum des Kombis zurück
      get_space
        RETURNING VALUE(rv_room) TYPE i.
ENDCLASS.

CLASS lcl_kombi IMPLEMENTATION.
  METHOD get_space.
    rv_room = 3.
  ENDMETHOD.
ENDCLASS.

* Unterklasse, erbt von lcl_auto
CLASS lcl_limo DEFINITION INHERITING FROM lcl_auto.
  PUBLIC SECTION.
    METHODS:
* neue funktionale Methode
* gibt cw-Wert zurück
      get_cw
        RETURNING VALUE(rv_cw) TYPE f.
ENDCLASS.

CLASS lcl_limo IMPLEMENTATION.
  METHOD get_cw.
    rv_cw = '1.22'.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Aggregation: iTab mit Referenzen auf Autos
  DATA: it_cars TYPE STANDARD TABLE OF REF TO lcl_auto.

* verschiedene Autotypen erzeugen und in iTab ablegen
* impliziter Up-Cast (Widening-Cast) von lcl_kombi und lcl_limo -> lcl_auto
  APPEND NEW lcl_kombi( 'Audi A3' ) TO it_cars.
  APPEND NEW lcl_kombi( 'VW Passat' ) TO it_cars.
  APPEND NEW lcl_limo( 'Mercedes C' ) TO it_cars.
  APPEND NEW lcl_limo( 'Skoda Octavia' ) TO it_cars.

* Tabelle mit Autos durchgehen
  LOOP AT it_cars ASSIGNING FIELD-SYMBOL(<fs_car>).

* funktionale Methode von lcl_car aufrufen
    WRITE: / <fs_car>->get_name( ).

* spezielle Methoden der von lcl_auto abgeleiteten Unterklassen aufrufen
    TRY.
* probieren, ob sich das Auto zu einem Kombi casten lässt
* expliziter Down-Cast (Narrowing-Cast) von lcl_auto -> lcl_kombi
        DATA(o_kombi) = CAST lcl_kombi( <fs_car> ).
* Stauraum des Kombis ausgeben
        WRITE: / o_kombi->get_space( ), 'm³'.
      CATCH cx_sy_move_cast_error.
        WRITE: / 'Kein Kombi'.
    ENDTRY.

    TRY.
* probieren, ob sich das Auto zu einer Limo casten lässt
* expliziter Down-Cast (Narrowing-Cast) von lcl_auto -> lcl_limo
        DATA(o_limo) = CAST lcl_limo( <fs_car> ).
* cw-Wert der Limo ausgeben
        WRITE: / 'cw = ', o_limo->get_cw( ).
      CATCH cx_sy_move_cast_error.
        WRITE: / 'Keine Limo'.
    ENDTRY.

    ULINE.

  ENDLOOP.

[ABAP] OO: Implementation einer Factory-Klasse, Methodenverkettung (Method-Chaining)

* Einfache Klasse für Demo einer Factory-Klasse

* ist nicht über den Kontruktor von außen instanziierbar (CREATE PRIVATE), kann nur sich selbst instanziieren
* von lcl_factorydemo kann nicht geerbt werden (FINAL)
CLASS lcl_factorydemo DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
* statische Factory-Methode, übernimmt die Funktion des Konstruktors mit einigen organisatorischen Verbesserungen
    CLASS-METHODS:
      factory
        IMPORTING
                  i_object_name      TYPE string
        RETURNING VALUE(ro_instance) TYPE REF TO lcl_factorydemo.

* statische Methode, zeigt die interne sortierte Objektliste
    CLASS-METHODS:
      get_object_list.

* Instanzmethode, gibt Objektnamen
    METHODS:
      get_name
        RETURNING VALUE(rv_object_name) TYPE string.

  PRIVATE SECTION.
* eigener Listtyp zur Verwaltung der internen Objektreferenzen
* über "name" können die Objektreferenzen gesucht werden
    TYPES: BEGIN OF ty_instances,
             name       TYPE        string,
             o_instance TYPE REF TO lcl_factorydemo,
           END OF ty_instances.

* sortierte Liste zur Verwaltung der Objektreferenzen, Primärschlüssel ist "name"
    CLASS-DATA: git_instances TYPE SORTED TABLE OF ty_instances WITH UNIQUE KEY name.

* Instanzvariable, speichert Objektnamen
    DATA: gv_object_name TYPE string.

* versteckter Instanzkonstruktor, ist von außerhalb der Klasse nicht aufrufbar (CREATE PRIVATE)
    METHODS:
      constructor
        IMPORTING
          i_object_name TYPE string.
ENDCLASS.

CLASS lcl_factorydemo IMPLEMENTATION.
* versteckter Instanzkonstruktor, ist von außerhalb der Klasse nicht aufrufbar (CREATE PRIVATE)
  METHOD constructor.
    gv_object_name = i_object_name.
  ENDMETHOD.

* statische Factory-Methode
  METHOD factory.
    TRY.
* Instanz über den Namen suchen, wenn nicht vorhanden wird eine Exception CX_SY_ITAB_LINE_NOT_FOUND geworfen
        ro_instance = git_instances[ name = i_object_name ]-o_instance.
      CATCH cx_sy_itab_line_not_found.
* wenn also das Objekt nicht vorhanden ist, dann neues erzeugen
        ro_instance = NEW #( i_object_name ).
* und in die iTab eintragen, wird automatisch anhand des Namens einsortiert
        INSERT VALUE #( name = i_object_name
                        o_instance = ro_instance ) INTO TABLE git_instances.
    ENDTRY.
  ENDMETHOD.
* Instanzmethode, gibt Objektnamen
  METHOD get_name.
    rv_object_name = gv_object_name.
  ENDMETHOD.
* statische Methode, zeigt die interne sortierte Objektliste
  METHOD get_object_list.
    LOOP AT git_instances ASSIGNING FIELD-SYMBOL(<fs_inst>).
      WRITE: / <fs_inst>-name.
    ENDLOOP.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Drei Objekte per Factory-Methode erzeugen
* die ersten zwei Objekte werden erzeugt, da die Namen noch nicht
* in der internen Liste vorhanden sind
* die Objekte werden automatisch nach Namen sortiert (SORTED TABLE)
  DATA(o_ref1) = lcl_factorydemo=>factory( i_object_name = 'OBJ_2' ).
  WRITE: / o_ref1->get_name( ).

* Beispiel für Methodenverkettung (Method-Chaining)
  WRITE: / lcl_factorydemo=>factory( i_object_name = 'OBJ_1' )->get_name( ).

* das dritte Objekt wird nicht erzeugt, da schon ein Objekt mit dem gleichen Namen existiert
* daher wird nur die Referenz auf das namensgleiche Objekt zurückgegeben
  DATA(o_ref3) = lcl_factorydemo=>factory( i_object_name = 'OBJ_1' ).
  WRITE: / o_ref3->get_name( ).

  ULINE.

* sortierte Objektliste ausgeben -> nur zwei Objekte
* mit unterschiedlichen Namen werden angezeigt
  lcl_factorydemo=>get_object_list( ).