[ABAP] Statuswerte zu einem IH-Auftrag lesen

* IH-Auftrag
PARAMETERS: p_aufnr TYPE aufk-aufnr.

START-OF-SELECTION.

  SELECT FROM aufk AS a
    INNER JOIN jest AS j ON a~objnr = j~objnr
    INNER JOIN jsto AS o ON j~objnr = o~objnr
    INNER JOIN tj02 AS t2 ON j~stat = t2~istat
    INNER JOIN tj02t AS t ON j~stat = t~istat
*    LEFT OUTER JOIN tj04 AS t4 ON o~obtyp = t4~obtyp AND j~stat = t4~istat
    FIELDS
      a~aufnr,
      a~auart,
      j~objnr,
      o~obtyp,
      o~stsma,
      t~txt04,
      t~txt30
    WHERE a~aufnr = @p_aufnr
      AND j~inact = @abap_false
      AND t~spras = @sy-langu
      AND t2~nodis = @abap_false " keine internen Statuswerte
    INTO TABLE @DATA(it_data).

  IF sy-subrc = 0.
    cl_demo_output=>write_data( it_data ).

*   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.
  ENDIF.

[ABAP] Gantt-Chart anzeigen

DATA(lv_title) = CONV text70( 'GANTT Demo' ).
DATA(lv_subtitle) = CONV text70( 'Subtitle' ).
DATA(lv_cattitle) = CONV text70( 'Cattitle' ).
DATA(lv_custob) = CONV w3objid( '/ISDFPS/GC200' ). "/ISDFPS/GC250, /ISDFPS/GC300

DATA(it_gantt_serie_data) = VALUE /isdfps/gantt_serie_tab( ( serie = 'SERIES1' serie_label = 'Person 1' )
                                                           ( serie = 'SERIES2' serie_label = 'Person 2' ) ).

DATA(it_gantt_value_data) = VALUE /isdfps/gantt_value_tab( ( bartext = 'Host Müller' category = '1' sub_category = '1' serie = 'SERIES1' begda = '20250101' begti = '080000' endda = '20250102' endti = '100000' objkey = '1' )
                                                           ( bartext = 'Ina Meier'   category = '2' sub_category = '2' serie = 'SERIES2' begda = '20250101' begti = '100000' endda = '20250103' endti = '110000' objkey = '2' ) ).

* Gantt Chart Anzeige
CALL FUNCTION '/ISDFPS/GANTT_CHART_DISPLAY'
  EXPORTING
    title               = lv_title
    subtitle            = lv_subtitle
    category_title      = lv_cattitle
    gantt_serie_data    = it_gantt_serie_data
    gantt_value_data    = it_gantt_value_data
    customizing_object  = lv_custob
*    begda               = '20250101'
*    endda               = '20250103'
*    3dview              = abap_true
  EXCEPTIONS
    no_serie_data       = 1
    no_value_data       = 2
    no_customizing_data = 3
    OTHERS              = 4.

IF sy-subrc <> 0.

ENDIF.

[ABAP] SAPscript-Texte: Clusterdaten ohne READ_TEXT direkt aus Tabelle STXL lesen

TYPES: BEGIN OF ty_s_stxl_raw,
         clustr TYPE stxl-clustr,
         clustd TYPE stxl-clustd,
       END OF ty_s_stxl_raw.

TYPES: ty_t_stxl_raw TYPE STANDARD TABLE OF ty_s_stxl_raw.

PARAMETERS: p_tdobj TYPE ttxob-tdobject DEFAULT 'TEXT'.
PARAMETERS: p_tdname TYPE stxh-tdname MATCHCODE OBJECT icl_stxh DEFAULT 'ADDRESS'.
PARAMETERS: p_tdid TYPE ttxid-tdid DEFAULT 'ST'.

START-OF-SELECTION.

* STXD SAPscript Text-Datei Header
  SELECT FROM stxh
    FIELDS
      tdname,
      tdobject,
      tdid
    WHERE tdobject = @p_tdobj
      AND tdname   = @p_tdname
      AND tdid     = @p_tdid
      AND tdspras  = @sy-langu
    INTO TABLE @DATA(it_stxh).

  IF sy-subrc = 0.

* STXD SAPscript Text-Datei Lines
    SELECT FROM stxl
      FIELDS
        tdname,
        clustr,
        clustd
      FOR ALL ENTRIES IN @it_stxh
      WHERE relid    = 'TX'
        AND tdobject = @it_stxh-tdobject
        AND tdname   = @it_stxh-tdname
        AND tdid     = @it_stxh-tdid
        AND tdspras  = @sy-langu
      INTO TABLE @DATA(it_stxl)
      PACKAGE SIZE 3000. " Datenmenge bei SELECT begrenzen, um Laufzeitfehler zu vermeiden

      DATA: it_stxl_raw TYPE ty_t_stxl_raw.
      CLEAR: it_stxl_raw.

      LOOP AT it_stxl ASSIGNING FIELD-SYMBOL(<stxl>).

        APPEND VALUE ty_s_stxl_raw( clustr = <stxl>-clustr
                                    clustd = <stxl>-clustd ) TO it_stxl_raw.

        DATA(it_lines) = VALUE tline_t( ).

* Zeilen aus Datencluster lesen
        IMPORT tline = it_lines FROM INTERNAL TABLE it_stxl_raw.

        LOOP AT it_lines ASSIGNING FIELD-SYMBOL(<l>).
          WRITE: / <stxl>-tdname, <l>-tdformat, <l>-tdline.
        ENDLOOP.

      ENDLOOP.

    ENDSELECT.

  ENDIF.

Links

[ABAP] Model-Provider (MPC) und Data-Providerklassen (DPC) zu einem OData-Service ermitteln

* View:
* /iwbep/v_mgw_omg (Übersicht über Objektmodellgruppe)
*
* Tabellen:
* /iwbep/i_mgw_srh (Service (Group) Header)
* /iwbep/i_mgw_srg (Model Grouping)
* /iwbep/i_mgw_srt (Group Description)
* /iwbep/i_mgw_ohd (Model)
* /iwbep/i_mgw_oht (Model Description)

* Name des technischen Service
PARAMETERS: p_srv TYPE /iwbep/v_mgw_omg-group_tech_name.

START-OF-SELECTION.

* Übersicht über Objektmodellgruppe
  SELECT FROM /iwbep/v_mgw_omg
    FIELDS *
    WHERE group_tech_name EQ @p_srv
    INTO TABLE @DATA(it_srv_data).

  IF sy-subrc = 0.
* Daten (MPC, DPC) zum ODATA-Service ausgeben
    cl_demo_output=>write_data( it_srv_data ).

* 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.
  ENDIF.

Links

[ABAP] BDS-Grafiken (Bitmaps) auslesen und anzeigen

* Docking-Container für Einbettung cl_gui_picture
DATA: o_dock TYPE REF TO cl_gui_docking_container.

* Bildname, siehe SE78
PARAMETERS: p_name TYPE tdobname DEFAULT 'IDES_LOGO'.

AT SELECTION-SCREEN OUTPUT.

  TRY.
      IF NOT o_dock IS BOUND.
* Dockingcontainer erzeugen
        o_dock = NEW #( repid = sy-repid
                        dynnr = sy-dynnr
                        side  = cl_gui_docking_container=>dock_at_right
                        ratio = 50 ).
      ENDIF.

* Get a BDS graphic in BMP format (using a cache)
      DATA(lv_xstr_bmp) = cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp( p_object = 'GRAPHICS'
                                                                        p_name   = p_name
                                                                        p_id     = 'BMAP'
                                                                        p_btype  = 'BMON' ). " BMON - Rasterbild schwarz-weiß, BCOL - Rasterbild Farbe

      DATA(it_bin_bmp) = cl_bcs_convert=>xstring_to_solix( lv_xstr_bmp ).

      DATA: lv_url TYPE swk_url.

* temporäre URL auf das Bild erzeugen
      CALL FUNCTION 'DP_CREATE_URL'
        EXPORTING
          type                 = 'image/bmp' " https://wiki.selfhtml.org/wiki/MIME-Type/%C3%9Cbersicht
          subtype              = 'bmp'
        TABLES
          data                 = it_bin_bmp
        CHANGING
          url                  = lv_url
        EXCEPTIONS
          dp_invalid_parameter = 1
          dp_error_put_table   = 2
          dp_error_general     = 3
          OTHERS               = 4.

* Bild über die URL laden und anzeigen
      DATA(o_pic) = NEW cl_gui_picture( parent = o_dock ).
      o_pic->set_display_mode( display_mode = cl_gui_picture=>display_mode_fit_center ).
      o_pic->load_picture_from_url_async( lv_url ).

* Flush ist wichtig für die Abarbeitung des GUI-Queues, sonst gibt es einen Core-Dump -> "SYSTEM_POINTER_PENDING"
      cl_gui_cfw=>flush( ).

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

Links

[ABAP] Benutzerparameter lesen/setzen

* Benutzerparameter
DATA: lv_parid TYPE memoryid VALUE 'ME_USE_GRID'.
* Parameterwert
DATA: lv_parvalue TYPE xuvalue.

* Benutzerparameter lesen
CALL FUNCTION 'ACC_USER_PARAMETER_GET'
  EXPORTING
    i_param_id    = lv_parid
  IMPORTING
    e_param_value = lv_parvalue.

WRITE: / lv_parvalue.

* Benutzerparameter setzen
CALL FUNCTION 'ACC_USER_PARAMETER_SET'
  EXPORTING
    i_param_id          = lv_parid
    i_param_value       = lv_parvalue.

Links

[ABAP] CDS-View zur Anzeige von Änderungsbelegen

TRY.
* CDS-View I_INVGCSMCHANGELOG (ICM Change Log),
* JOIN aus CDHDR + CDPOS
    SELECT FROM i_invgcsmchangelog
      FIELDS *
      WHERE invgcsmchangelogcreatedbyid EQ @sy-uname
      INTO TABLE @DATA(it_cd).

    IF sy-subrc = 0.
* 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_cd ).

* 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( 'Änderungsbelege' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

      o_salv->display( ).
    ENDIF.

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

[ABAP] ABAP-Sprache aus T002, T002T und T002TX lesen (xco_cp_language)

DATA(lv_lang) = xco_cp=>language( 'D' ).
* DE
WRITE: / lv_lang->value.
* DE
WRITE: / lv_lang->as( xco_cp_language=>format->iso_639 ).
* Deutsch
WRITE: / lv_lang->get_name( ).
* Deutsch, Deutschland
WRITE: / lv_lang->get_long_text_description( ).

Links

[ABAP] Workflow: Inhalt (Workitems) der MyInbox eines Users auflisten

PARAMETERS: p_user TYPE sy-uname DEFAULT sy-uname.

START-OF-SELECTION.

  DATA: it_worklist TYPE STANDARD TABLE OF swr_wihdr WITH DEFAULT KEY.
  DATA: it_worklist_attributes TYPE STANDARD TABLE OF swr_wiaddattr WITH DEFAULT KEY.
  DATA: it_message_lines TYPE STANDARD TABLE OF swr_messag WITH DEFAULT KEY.
  DATA: it_message_struct TYPE STANDARD TABLE OF swr_mstruc WITH DEFAULT KEY.

* Workflow-Schnittstellen: Worklist für Benutzer aufbauen
  CALL FUNCTION 'SAP_WAPI_CREATE_WORKLIST'
    EXPORTING
      user                = p_user
*     LANGUAGE            = SY-LANGU
*     TRANSLATE_WI_TEXT   = ' '
      read_task_text      = abap_true
*     IM_TASK_FILTER      =
*     IM_STATUS_FILTER    =
*     PASSIVE_SUBSTITUTION = ' '
*     READ_LATEST_END     = ' '
*     TIME_ZONE           =
*     IM_WITEXT_FILTER    =
*     IM_WILED_FILTER     =
*     IM_WIPRIO_FILTER    =
*     IM_WICREA_FILTER    =
*     IM_OBJECT_FILTER    =
*     DO_COMMIT           = 'X'
* IMPORTING
*     RETURN_CODE         =
*     WORKITEMS_TRANSLATED       =
    TABLES
      worklist            = it_worklist
      worklist_attributes = it_worklist_attributes
      message_lines       = it_message_lines
      message_struct      = it_message_struct.

  cl_demo_output=>write_data( it_message_lines ).
  cl_demo_output=>write_data( it_message_struct ).
  cl_demo_output=>write_data( it_worklist ).
  cl_demo_output=>write_data( it_worklist_attributes ).

*   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       = 'MyInbox'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

*   cl_gui_container=>default_screen erzwingen
  WRITE: space.

Links

[ABAP] SAP-Office: Emails und Attachements lesen

* Anhänge lesen mit Funktionsbaustein: SO_ATTACHMENT_READ

CLASS lcl_salv DEFINITION FINAL.

  PUBLIC SECTION.

    CLASS-DATA: o_salv TYPE REF TO cl_salv_table.
    CLASS-DATA: it_sood TYPE STANDARD TABLE OF sood WITH DEFAULT KEY.

    CLASS-METHODS on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
        row
        column
        sender.
ENDCLASS.

CLASS lcl_salv IMPLEMENTATION.

  METHOD on_double_click.
    IF o_salv IS BOUND.

* Wert in der geklickten Zelle holen
      DATA(it_sel) = o_salv->get_selections( )->get_selected_cells( ).

      IF lines( it_sel ) > 0.
* Schlüsselwerte der selektierten Zeile holen
        DATA(lv_soodk) = VALUE soodk( objtp = it_sood[ it_sel[ 1 ]-row ]-objtp
                                      objyr = it_sood[ it_sel[ 1 ]-row ]-objyr
                                      objno = it_sood[ it_sel[ 1 ]-row ]-objno ).

        DATA: it_sood5 TYPE STANDARD TABLE OF sood5 WITH DEFAULT KEY.

* SAPoffice: Ermitteln aller Anlagen zu einem Dokument
        CALL FUNCTION 'SO_ATTACHMENT_LIST_READ'
          EXPORTING
            object_id             = lv_soodk
          TABLES
            objects               = it_sood5
          EXCEPTIONS
            system_failure        = 1
            communication_failure = 2
            OTHERS                = 3.

        IF sy-subrc = 0.

          TRY.
              DATA: o_pop TYPE REF TO cl_salv_table.

              cl_salv_table=>factory( IMPORTING r_salv_table = o_pop
                                      CHANGING  t_table      = it_sood5 ).

              o_pop->get_functions( )->set_all( abap_true ).
              o_pop->get_columns( )->set_optimize( abap_true ).
              o_pop->get_display_settings( )->set_list_header( 'Attachements' ).
              o_pop->get_display_settings( )->set_striped_pattern( abap_true ).
              o_pop->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

              o_pop->set_screen_popup( start_column = 1
                                       end_column   = 140
                                       start_line   = 1
                                       end_line     = 20 ).
              o_pop->display( ).
            CATCH cx_root INTO DATA(e_txt).
              WRITE: / e_txt->get_text( ).
          ENDTRY.

        ENDIF.
      ENDIF.
    ENDIF.
  ENDMETHOD.

ENDCLASS.

DATA: lv_obj_type TYPE sood-objtp.
DATA: lv_user TYPE usr02-bname.

SELECT-OPTIONS: so_type FOR lv_obj_type.
SELECT-OPTIONS: so_user FOR lv_user.
PARAMETERS: p_title TYPE sood-objdes DEFAULT ''.

INITIALIZATION.

* Emails: Typ "RAW"
  so_type[] = VALUE #( ( sign   = 'I'
                         option = 'EQ'
                         low    = 'RAW' ) ).

* Benutzer
  so_user[] = VALUE #( ( sign   = 'I'
                         option = 'EQ'
                         low    = sy-uname ) ).

START-OF-SELECTION.

* unscharfe Suche nach Email-Titel (Subject) mit "%"
  DATA(lv_title) = CONV sood-objdes( |%{ p_title }%| ).

* SAPoffice: Objektdefinition
  SELECT FROM sood AS s
    FIELDS *
    WHERE s~objtp IN @so_type
      AND s~ownnam IN @so_user
      AND s~objdes LIKE @lv_title
    INTO TABLE @lcl_salv=>it_sood.

  IF sy-subrc = 0.

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

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

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

* Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
        LOOP AT lcl_salv=>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.

* Event-Hanlder für Link-Klick
        SET HANDLER lcl_salv=>on_double_click FOR lcl_salv=>o_salv->get_event( ).

        lcl_salv=>o_salv->display( ).

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