[ABAP] Case-insensitives SORT von internen Tabellen

TYPES: BEGIN OF ty_name,
         name    TYPE string,
         name_lc TYPE string,
       END OF ty_name.

TYPES: ty_it_name TYPE STANDARD TABLE OF ty_name WITH DEFAULT KEY.

* Tabelle mit Strings, die sortiert werden soll
DATA(it_names) = VALUE ty_it_name( ( name = 'Albert' )
                                   ( name = 'Emma' )
                                   ( name = 'Zorro' )
                                   ( name = 'Donald' )
                                   ( name = 'Lion' )
                                   ( name = 'answer' )
                                   ( name = 'type' )
                                   ( name = 'second' ) ).

* zweite Spalte mit lower-case Strings füllen
LOOP AT it_names ASSIGNING FIELD-SYMBOL(<n>).
  <n>-name_lc = to_lower( <n>-name ).
ENDLOOP.

* erstmal regulär sortieren
SORT: it_names BY name.

* zweite Tabelle anlegen (kopieren)
DATA(it_names_lc) = it_names.

* Spalte lower-case sortieren
SORT: it_names_lc BY name_lc.

* Ausgabe der Ergebnisse
cl_demo_output=>write_data( value = it_names    name = 'case-sensitives SORT' ).
cl_demo_output=>write_data( value = it_names_lc name = 'SORT nach lower-case' ).
cl_demo_output=>display( ).

[OpenUI5] OpenUI5 / JavaScript Code-Vervollständigung mit IntelliSense in Visual Studio Code einrichten

  1. ein Projektverzeichnis anlegen
  2. Im Projektverzeichnis eine initiale package.json manuell oder über
    npm init
    

    anlegen

  3. Erweitern der package.json (im Root-Verzeichnis des Projektes) um die types
    "devDependencies": {
        "@types/openui5": "^1.40.1",
        ...
    }
    

    wobei “^1.40.1” bedeutet: nimm alles was ab Version 1.40.1 verfügbar ist (Mindestanforderung)

  4. das OpenUI5-Package ist unter https://www.npmjs.com/ registriert: https://www.npmjs.com/package/@types/openui5
  5. Kommando

    npm install
    
    (detaillierterer Aufruf: npm install --save @types/openui5)
    

    im Projektverzeichnis ausführen, hierbei wird nach der package.json im akt. Verzeichnis geschaut und ein Unterverzeichnis node_modules mit den Dependencies erzeugt

  6. jsconfig.js neben package.json mit folgendem Inhalt anlegen (manuell oder im VS Code über Button “Glühbirne” (unten rechts) generieren lassen):
    {
        // Unter https://go.microsoft.com/fwlink/?LinkId=759670
        // finden Sie die Dokumentation zum jsconfig.json-Format.
        "compilerOptions": {
            "target": "es6",
            "module": "commonjs",
            "allowSyntheticDefaultImports": true
        },
        "exclude": [
            "node_modules",
            "bower_components",
            "jspm_packages",
            "tmp",
            "temp"
        ]
    }
    
  7. Codevervollständigung solle nun funktionieren, wenn nicht, gibt es hier noch Hinweise: http://shrekshao.github.io/2016/06/20/vscode-01/
  8. Hinweis: die Codevervollständigung funktioniert nur, wenn vollqualifizierte JS-Objekte benutzt werden (z.B.: sap.m.MessageBox anstatt MessageBox)

[ABAP] Texttabelle zu einer Tabelle suchen

DATA: lv_tabname TYPE dd08v-tabname.
DATA: lv_for_key TYPE dd08v-fieldname.

* Prüft über die Tabelle DD08L zu Verfügbarkeit einer Texttabelle
* Siehe auch SE11 -> Tabelle anzeigen -> Menü -> Springen -> Texttabelle
CALL FUNCTION 'DDUT_TEXTTABLE_GET'
  EXPORTING
    tabname    = 'TPAR'
  IMPORTING
    texttable  = lv_tabname
    checkfield = lv_for_key.

WRITE: / 'Texttabelle:', lv_tabname.
WRITE: / 'Fremdschlüssel:', lv_for_key.

[ABAP] Datenelement und zugehörige Domäne auslesen

* Name Datenelement
PARAMETERS: p_elem TYPE rollname DEFAULT 'TXT50'.
* Sprachenschlüssel
PARAMETERS: p_lang TYPE ddlanguage DEFAULT 'D'.

SELECT * INTO TABLE @DATA(it_dd04l) FROM dd04l
  WHERE rollname  = @p_elem.

IF sy-subrc = 0.
* Bezeichner zum Datenelent holen
  SELECT * INTO TABLE @DATA(it_dd04t) FROM dd04t
    WHERE rollname   = @p_elem
      AND ddlanguage = @p_lang.

* aktive Domäne holen
  DATA(lv_domname) = it_dd04l[ as4local = 'A' ]-domname.
  SELECT * INTO TABLE @DATA(it_dd01l) FROM dd01l
    WHERE domname = @lv_domname.

* Bezeichner zur Domäne holen
  SELECT * INTO TABLE @DATA(it_dd01t) FROM dd01t
    WHERE domname    = @lv_domname
      AND ddlanguage = @p_lang.

  IF sy-subrc = 0.
    cl_demo_output=>write_data( value = it_dd04l name = |Datenelement: { p_elem }| ).
    cl_demo_output=>write_data( value = it_dd04t name = |Datenelement: { p_elem }| ).
    cl_demo_output=>write_data( value = it_dd01l name = |Domäne: { lv_domname }| ).
    cl_demo_output=>write_data( value = it_dd01t name = |Domäne: { lv_domname }| ).
    cl_demo_output=>display(  ).
  ENDIF.
ENDIF.

Links