[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.

[ABAP] SAPConnect: Kommunikationsknoten, Routing und Parameter auslesen

* SAPconnect: Kommunikationsknoten
SELECT FROM sxnodes
  FIELDS *
  INTO TABLE @DATA(it_nodes).

* SAPconnect: Routingtabelle
SELECT FROM sxroute
  FIELDS *
  INTO TABLE @DATA(it_routing).

* SAPconnect: Parametertabelle
SELECT FROM sxparams
  FIELDS *
  INTO TABLE @DATA(it_params).

* Hier Objekte für die Ausgabe hinzufügen
cl_demo_output=>write_data( it_nodes ).
cl_demo_output=>write_data( it_routing ).
cl_demo_output=>write_data( it_params ).

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

[ABAP] Fiori: Technische Kataloge lesen

TRY.
    DATA(o_cats) = cl_sui_tm_cat_reader=>get_instance( ).
    DATA(it_catalog) = VALUE if_sui_tm_cat_reader=>t_catalog( ).

    o_cats->get_all_catalogs( IMPORTING et_catalog = it_catalog ).

* Hier Objekte für die Ausgabe hinzufügen
    cl_demo_output=>write_data( it_catalog ).

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

* cl_gui_container=>default_screen erzwingen
    WRITE: space.
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[ABAP] Fiori: Details zu techn. Katalogen lesen

PARAMETERS: p_cat TYPE /ui2/ad_mm_cat_id MATCHCODE OBJECT sui_tm_mm_cat.

START-OF-SELECTION.

  TRY.
      DATA(o_cats) = cl_sui_tm_cat_reader=>get_instance( ).

      DATA(lv_cat_detail) = o_cats->get_details_of_catalog( iv_id = p_cat ).

* Hier Objekte für die Ausgabe hinzufügen
      cl_demo_output=>write_data( lv_cat_detail ).

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

* cl_gui_container=>default_screen erzwingen
      WRITE: space.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

[ABAP] Dokumente per URL im Document Viewer anzeigen

PARAMETERS: p_url TYPE swk_url DEFAULT 'https://google.de'.

START-OF-SELECTION.

* https://help.sap.com/docs/SAP_NETWEAVER_731_BW_ABAP/70396d7dec4c4f19b9ca3b2e47559d12/493278eee8c55aabe10000000a42189d.html
  TRY.
      DATA: o_viewer TYPE REF TO i_oi_document_viewer.

* Container-Control-Factory-Klasse
      c_oi_container_control_creator=>get_document_viewer( IMPORTING viewer = o_viewer ).
* Standardcontainer nutzen
      o_viewer->init_viewer( parent = cl_gui_container=>default_screen ).
* Dokument inplace anhand einer URL anzeigen
      o_viewer->view_document_from_url( document_url = p_url
                                        show_inplace = abap_true ).

      WRITE: space.

    CATCH cx_root.
  ENDTRY.

[ABAP] Statusinformationen des ICMAN lesen

DATA: lv_info_data TYPE icm_info.
DATA: it_servlist TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY.
DATA: it_thrlist TYPE STANDARD TABLE OF icm_thrlst WITH DEFAULT KEY.
DATA: it_servlist3 TYPE STANDARD TABLE OF icm_sinfo3 WITH DEFAULT KEY.

* Statistikdaten des ICM lesen
CALL FUNCTION 'ICM_GET_INFO2'
  IMPORTING
    info_data          = lv_info_data
  TABLES
    servlist           = it_servlist
    thrlist            = it_thrlist
    servlist3          = it_servlist3
  EXCEPTIONS
    icm_error          = 1
    icm_timeout        = 2
    icm_not_authorized = 3
    OTHERS             = 4.

IF sy-subrc = 0.
* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( lv_info_data ).
  cl_demo_output=>write_data( it_servlist ).
  cl_demo_output=>write_data( it_thrlist ).
  cl_demo_output=>write_data( it_servlist3 ).

* 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] SAP-ShortCode-Datei (*.sap) erzeugen

Variante 1 (SWN_CREATE_SHORTCUT -> *.sap-Datei speichern)

* SAP ShortCode-Dateien sind mit der installierten SAPGUI verknüpft und werden von dieser beim Doppelklick auf den Dateinamen geöffnet und ausgeführt
* SAP ShortCode-Dateien können auch im SAPGUI über den Button "Erstellt eine Verknüpfung" erzeugt werden
* SAP Hinweis: 103019 - SAPshortcut: Programmparameter
* http://troublefreeabap.blogspot.com/2013/06/creating-sapgui-shortcuts.html
PARAMETERS: p_matnr TYPE mara-matnr.

START-OF-SELECTION.

* Kommando (i_system_command):
* - fasst i_transaction und i_parameter zusammen
* - Transaktion MM03 in neuem Fenster anzeigen
*   - '/o' --> neuen Modus öffnen
*   - '*' --> überspringt Selektionsbild
* - Übergabe: MATNR an Dynpro-Feld für die MATNR im Selektionsbild (RMMG1-MATNR)
* - entfernen führenden Nullen (ALPHA = OUT)
  DATA(lv_cmd) = |/o*MM03 RMMG1-MATNR={ p_matnr ALPHA = OUT }|.
* Texttabelle mit generierten Daten für die Shortcut-Datei (*.sap)
  DATA(it_sap_shortcut_data) = VALUE soli_tab( ).

* WF Notif: SAP Shortcut als Anlage erzeugen
  CALL FUNCTION 'SWN_CREATE_SHORTCUT'
    EXPORTING
      i_system_command        = CONV char40( lv_cmd )
*      i_transaction           = '*MM03'
*      i_parameter             = CONV text255( |RMMG1-MATNR={ p_matnr ALPHA = OUT }| )
      i_user                  = ''
      i_windowsize            = 'Maximized' " oder 'Normal window'
      i_title                 = CONV char80( |MM03 - Material anzeigen| )
    IMPORTING
      shortcut_table          = it_sap_shortcut_data
    EXCEPTIONS
      inconsistent_parameters = 1
      OTHERS                  = 2.

  IF sy-subrc = 0.
* *.sap ShortCut-Datei speichern
    TRY.
        DATA: lv_action TYPE i.
        DATA: lv_filename TYPE string.
        DATA: lv_fullpath TYPE string.
        DATA: lv_path TYPE string.

* Save-Dialog
        cl_gui_frontend_services=>file_save_dialog( EXPORTING default_file_name = 'Start_MM03.sap'
                                                              default_extension = 'sap'
                                                              file_filter       = |ShortCut-Datei (*.sap)\|*.sap\|{ cl_gui_frontend_services=>filetype_all }|
                                                    CHANGING  filename          = lv_filename
                                                              path              = lv_path
                                                              fullpath          = lv_fullpath
                                                              user_action       = lv_action ).

        IF lv_action EQ cl_gui_frontend_services=>action_ok.
* Datei lokal speichern
          cl_gui_frontend_services=>gui_download( EXPORTING filename     = lv_fullpath
                                                            filetype     = 'DAT'
                                                  CHANGING  data_tab     = it_sap_shortcut_data ).

        ENDIF.
      CATCH cx_root INTO DATA(e_text).
        MESSAGE e_text->get_text( ) TYPE 'I'.
    ENDTRY.
  ENDIF.

Variante 2 (SICF-Service /sap/public/bc/workflow/shortcut)

PARAMETERS: p_matnr TYPE mara-matnr.

START-OF-SELECTION.

  DATA: it_servlist TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY.

* Statistikdaten des ICM lesen
  CALL FUNCTION 'ICM_GET_INFO2'
    TABLES
      servlist           = it_servlist
    EXCEPTIONS
      icm_error          = 1
      icm_timeout        = 2
      icm_not_authorized = 3
      OTHERS             = 4.

  IF sy-subrc = 0.
* protocol 1: HTTP
* protocol 2: HTTPS
    IF line_exists( it_servlist[ protocol = 2 ] ).
* URL für workflow-shortcut zusammenbauen
* SICF-Service muss aktiv sein: /sap/public/bc/workflow/shortcut
* Daten werden in der Klasse CL_SWN_HTTP_SHORTCUT prozessiert
      DATA(lv_server) = it_servlist[ protocol = 2 ].
      DATA(lv_html) = |https://{ lv_server-hostname }:{ lv_server-service }|.
      lv_html = lv_html && |/sap/public/bc/workflow/shortcut?|.
      lv_html = lv_html && |sysid={ sy-sysid }&client={ sy-mandt }|.
      lv_html = lv_html && |&logonid=&uname={ sy-uname }|.
      lv_html = lv_html && |&langu=DE|.
      lv_html = lv_html && |&transaction=*MM03|.
      lv_html = lv_html && |&param=RMMG1-MATNR%3d{ p_matnr ALPHA = OUT }|.

      WRITE: / lv_html.
    ENDIF.
  ENDIF.

[ABAP] ITS: Aufruf einer Transaktion über HTTPS in der WebGui

PARAMETERS: p_matnr TYPE mara-matnr.

START-OF-SELECTION.

  DATA: it_servlist TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY.

* Statistikdaten des ICM lesen
  CALL FUNCTION 'ICM_GET_INFO2'
    TABLES
      servlist           = it_servlist
    EXCEPTIONS
      icm_error          = 1
      icm_timeout        = 2
      icm_not_authorized = 3
      OTHERS             = 4.

  IF sy-subrc = 0.
* protocol 1: HTTP
* protocol 2: HTTPS
    IF line_exists( it_servlist[ protocol = 2 ] ).
* URL für Transaktions-Anzeige in der ITS-WebGui zusammenbauen
* SICF-Service muss aktiv sein: /sap/bc/gui/sap/its/webgui
* Daten werden in der Klasse CL_HTTP_EXT_ITS prozessiert
      DATA(lv_server) = it_servlist[ protocol = 2 ].
      DATA(lv_html) = |https://{ lv_server-hostname }:{ lv_server-service }|.
      lv_html = lv_html && |/sap/bc/gui/sap/its/webgui?|.
      lv_html = lv_html && |~transaction=*MM03%20RMMG1-MATNR={ p_matnr ALPHA = OUT WIDTH = 10 }|. " MM03 + MATNR --> Selektionbild überspringen
      lv_html = lv_html && |&sap-client={ sy-mandt }|.
      lv_html = lv_html && |&sap-language=DE|.

* Browserfenster mit default_screen als Container
      DATA(o_hv) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* SSO
*      o_hv->enable_sapsso( enabled = abap_true ).
* ITS: WebGui inline (im SAPGUI) anzeigen
      o_hv->show_url( url      = CONV swk_url( lv_html )
                      in_place = abap_true ).

* Führt alle gesammelten OLE-Calls aus
      cl_gui_cfw=>flush( ).

* Toolbar ausblenden
      cl_abap_list_layout=>suppress_toolbar( ).

* erzwingt Anzeige über cl_gui_container=>default_screen
      WRITE: / space.
    ENDIF.
  ENDIF.

Links

[ABAP] Daten einer Internetseite als interne Tabelle bereitstellen

PARAMETERS: p_url TYPE w3url DEFAULT 'https://google.de'.

DATA: lv_size          TYPE  i.
DATA: lv_errorstate    TYPE  i.
DATA: lv_ret_type      TYPE  c.
DATA: lv_ret_subtype   TYPE  c.
DATA: lv_date          TYPE  sy-datum.
DATA: lv_time          TYPE  sy-uzeit.
DATA: it_response TYPE STANDARD TABLE OF docs WITH DEFAULT KEY.

* Stellt die Daten eines URLs in eine interne Tabelle
CALL FUNCTION 'DP_GET_STREAM_FROM_URL'
  EXPORTING
    url               = p_url
  IMPORTING
    size              = lv_size
    errorstate        = lv_errorstate
    ret_type          = lv_ret_type
    ret_subtype       = lv_ret_subtype
    date              = lv_date
    time              = lv_time
  TABLES
    data              = it_response
  EXCEPTIONS
    dp_fail           = 1
    dp_failed_init    = 2
    blocked_by_policy = 3
    unknown_error     = 4
    OTHERS            = 5.

IF sy-subrc = 0.
* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( lv_size ).
  cl_demo_output=>write_data( lv_errorstate ).
  cl_demo_output=>write_data( lv_ret_type ).
  cl_demo_output=>write_data( lv_ret_subtype ).
  cl_demo_output=>write_data( lv_date ).
  cl_demo_output=>write_data( lv_time ).
  cl_demo_output=>write_data( it_response ).

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