[ABAP] Datenbanktabellen mittels SE16N editieren

* Tabellename
PARAMETERS: lv_tab TYPE se16n_tab DEFAULT 'T024'.
* max. Anzahl Datensätze für die Anzeige
PARAMETERS: lv_maxl TYPE sytabix DEFAULT 500.
* Edit-Parameter, diese entsprechen den Variablen GD-EDIT und GD-SAPEDIT in der SE16N
PARAMETERS: lv_edit TYPE abap_bool AS CHECKBOX DEFAULT abap_true.
PARAMETERS: lv_sedit TYPE abap_bool AS CHECKBOX DEFAULT abap_true.
* Mandantenspalte ausblenden
PARAMETERS: lv_clnt TYPE abap_bool AS CHECKBOX DEFAULT abap_false.
* technische Namen anzeigen
PARAMETERS: lv_tech TYPE abap_bool AS CHECKBOX DEFAULT abap_false.

INITIALIZATION.
  %_lv_tab_%_app_%-text = 'Tabelle:'.
  %_lv_edit_%_app_%-text = 'Edit Parameter 1 (GD-EDIT)'.
  %_lv_sedit_%_app_%-text = 'Edit Parameter 2 (GD-SAPEDIT)'.
  %_lv_maxl_%_app_%-text = 'Maximale Trefferzahl'.
  %_lv_clnt_%_app_%-text = 'Tabelle ist mandantenabhängig'.
  %_lv_tech_%_app_%-text = 'Technische Namen'.

START-OF-SELECTION.
* Anzeige einer Tabelle als Vollbild, analog SE16N
* Achtung: Tabelle lv_tab kann analog zum bekannten SE16N-Parameter &sap_edit vollumfänglich editiert werden,
*          dies kann bei Fehlbedienung zu Dateninkonsistenzen führen --> Funktion daher nicht im Produktivsystem verwenden!
  CALL FUNCTION 'SE16N_INTERFACE'
    EXPORTING
      i_tab        = lv_tab
      i_edit       = lv_edit
      i_sapedit    = lv_sedit
      i_max_lines  = lv_maxl
      i_clnt_dep   = lv_clnt
      i_tech_names = lv_tech
* CHANGING
*     IT_AND_SELFIELDS            =
    EXCEPTIONS
      no_values    = 1
      OTHERS       = 2.

  IF sy-subrc <> 0.
    WRITE: / 'Fehler:', sy-subrc.
  ENDIF.

Links

[ABAP] Neue / obsolete Transaktionscodes für S/4 HANA suchen

* https://thinkdoforward.com/neue-transaktionen-mit-s-4hana-so-einfach-findest-zu-sie/
PARAMETERS: p_rel TYPE saprl DEFAULT '751'.
SELECT-OPTIONS: so_ta FOR lv_s_tcode.

START-OF-SELECTION.

  SELECT c~rel_name, c~s_tcode, c~t_tcode, tx~ttext
    INTO TABLE @DATA(it_prgn_corr2)
    FROM prgn_corr2 AS c
    INNER JOIN tstc AS t ON ( c~t_tcode = t~tcode )
    RIGHT OUTER JOIN tstct AS tx ON ( t~tcode = tx~tcode )
    WHERE c~rel_name >= @p_rel
      AND c~s_tcode IN @so_ta
      AND tx~sprsl = @sy-langu.

  SORT: it_prgn_corr2 BY s_tcode rel_name.


  TRY.
* SALV-Table
      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING
                                r_salv_table = o_salv
                              CHANGING
                                t_table      = it_prgn_corr2 ).

* Grundeinstellungen
      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'Überschrift' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        DATA(o_col) = <c>-r_column.
        o_col->set_short_text( || ).
        o_col->set_medium_text( || ).
        o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
      ENDLOOP.

      o_salv->display( ).
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

[ABAP] Mandanten und zugeordnete logische Systeme auslesen

* Mandantenpflege: SCC4
* Zuweisung logisches System zu Mandant: Springen -> Detail
* Tabelle Mandanten: T000

* Tabelle Logische Systeme: TBDLS

* Sucht aus der Liste der gepflegten logischen Systeme diejenigen heraus,
* die mit dem akt. System und Mandanten verknüpft sind
SELECT t000~mandt,
       tbdls~logsys,
       tbdlst~stext
  INTO TABLE @DATA(it_syst)
  FROM t000
  INNER JOIN tbdls ON t000~logsys = tbdls~logsys
  INNER JOIN tbdlst ON tbdls~logsys = tbdlst~logsys.

IF sy-subrc = 0.
  cl_demo_output=>display_data( it_syst ).
ENDIF.

[ABAP] Transaktionscode zu einer IMG-Aktivität suchen

* IMG-Activität
PARAMETERS: p_imgact TYPE cus_imgach-activity DEFAULT 'SAPC_LGNUM'.

START-OF-SELECTION.

  SELECT cus_imgach~activity,
         cus_imgach~tcode,
         cus_imgact~text
    INTO TABLE @DATA(it_img)
    FROM cus_imgach
    INNER JOIN cus_imgact ON cus_imgach~activity = cus_imgact~activity
    WHERE cus_imgach~activity = @p_imgact
      AND cus_imgact~spras = @sy-langu.

  IF sy-subrc = 0.
    cl_demo_output=>display_data( it_img ).
  ENDIF.

[ABAP] Customizing-Objekte zu einem Datenfeld lesen

TYPES : BEGIN OF ty_s_customizing_tables,
          tabname TYPE dd02l-tabname,
          ddtext  TYPE dd02t-ddtext,
        END OF ty_s_customizing_tables.

TYPES: ty_it_customizing_tables TYPE STANDARD TABLE OF ty_s_customizing_tables WITH DEFAULT KEY.

DATA: it_customizing_tables TYPE ty_it_customizing_tables.

* Klasse für Eventhandling definieren
CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
* Doppelklick
    CLASS-METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
ENDCLASS.

CLASS lcl_events IMPLEMENTATION.
  METHOD on_double_click.
* Tabelle / Pflegeview
    DATA(lv_tab) = CONV dd02l-tabname( it_customizing_tables[ row ]-tabname ).

* Customizingobjekte zu Tabelle anzeigen, ins SAP-IMG abspringen
    CALL FUNCTION 'OBJECT_MAINTENANCE_CALL'
      EXPORTING
        tabname                        = lv_tab
      EXCEPTIONS
        interface_not_correct          = 1
        transaction_not_maintained     = 2
        transaction_not_found          = 3
        table_not_activ                = 4
        table_not_found                = 5
        subobject_not_found_in_project = 6
        subobject_not_found_in_guide   = 7
        object_not_found_in_project    = 8
        object_not_found_in_guide      = 9
        table_has_no_object_in_project = 10
        table_has_no_object_in_guide   = 11
        outline_not_found              = 12
        call_transaction_recurring     = 13
        system_failure                 = 14
        OTHERS                         = 15.

    DATA(lv_err) = ||.

    CASE sy-subrc.
      WHEN 1.
        lv_err = |INTERFACE_NOT_CORRECT|.
      WHEN 2.
        lv_err = |TRANSACTION_NOT_MAINTAINED|.
      WHEN 3.
        lv_err = |TRANSACTION_NOT_FOUND|.
      WHEN 4.
        lv_err = |TABLE_NOT_ACTIV|.
      WHEN 5.
        lv_err = |TABLE_NOT_FOUND|.
      WHEN 6.
        lv_err = |SUBOBJECT_NOT_FOUND_IN_PROJECT|.
      WHEN 7.
        lv_err = |SUBOBJECT_NOT_FOUND_IN_GUIDE|.
      WHEN 8.
        lv_err = |OBJECT_NOT_FOUND_IN_PROJECT|.
      WHEN 9.
        lv_err = |OBJECT_NOT_FOUND_IN_GUIDE|.
      WHEN 10.
        lv_err = |TABLE_HAS_NO_OBJECT_IN_PROJECT|.
      WHEN 11.
        lv_err = |TABLE_HAS_NO_OBJECT_IN_GUIDE|.
      WHEN 12.
        lv_err = |OUTLINE_NOT_FOUND|.
      WHEN 13.
        lv_err = |CALL_TRANSACTION_RECURRING|.
      WHEN 14.
        lv_err = |SYSTEM_FAILURE|.
      WHEN 15.
        lv_err = |OTHERS|.
    ENDCASE.

    MESSAGE |{ lv_err }| TYPE 'S' DISPLAY LIKE 'E'.

  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) l_field FOR FIELD p_field.
PARAMETER: p_field TYPE dd03vv-fieldname DEFAULT 'VSBED'.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.

  l_field = 'Feldname:'.

START-OF-SELECTION.

* Customizingtabellen zu einem Datenfeld lesen
  SELECT t~tabname,
         tx~ddtext
    FROM dd03vv AS t
    INNER JOIN dd02l AS c ON t~tabname = c~tabname
    INNER JOIN dd02t AS tx ON t~tabname = tx~tabname
    INTO TABLE @it_customizing_tables
    WHERE t~fieldname = @p_field     " Feldname
      AND t~tabclass = 'TRANSP'      " transparente Tabellen
      AND t~as4local = 'A'           " aktive Objekte
      AND c~contflag IN ('C', 'G')   " Typ: Customizing-Tabellen
      AND tx~ddlanguage = @sy-langu. " Anmeldesprache

  TRY.
* SALV-Table
      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING
                                r_salv_table   = o_salv
                              CHANGING
                                t_table        = it_customizing_tables ).

* Grundeinstellungen
      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( |Customizing-Tabellen zu Datenfeld { p_field } (Doppelklick -> IMG)| ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte
      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        DATA(o_col) = <c>-r_column.
        o_col->set_short_text( || ).
        o_col->set_medium_text( || ).
        o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
      ENDLOOP.

* Handler registrieren
      SET HANDLER lcl_events=>on_double_click FOR o_salv->get_event( ).

      o_salv->display( ).
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Links

[ABAP] Alle Namespaces im System anzeigen

* http://www.kodyaz.com/sap-abap/list-of-namespaces-used-in-sap-from-abap-table.aspx

* ty_it_namespaces hat alle Spalten aus beiden includierten Strukturen
TYPES: BEGIN OF ty_it_namespaces.
        INCLUDE TYPE trnspacet.
TYPES:  spras     TYPE trnspacett-spras,
        descriptn TYPE trnspacett-descriptn,
        owner     TYPE trnspacett-owner.
TYPES: END OF ty_it_namespaces.

DATA: it_namespaces TYPE STANDARD TABLE OF ty_it_namespaces WITH DEFAULT KEY.

SELECT T~*, " SL: Namensräume (transportierbar)
       TT~* " SL: Textanteil (sprachabhängig) zu Namensraumtabelle
  INTO CORRESPONDING FIELDS OF TABLE @it_namespaces
  FROM trnspacet AS t
  INNER JOIN trnspacett AS tt ON t~namespace = tt~namespace.

* Objekt hinzufügen
cl_demo_output=>write_data( it_namespaces ).
* HTML-Code vom Demo-Output holen
DATA(lv_html) = cl_demo_output=>get( ).
* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.