[ABAP] HTTP-Daten lesen

DATA: lv_no_logon TYPE abap_bool VALUE abap_true.
DATA: lv_url TYPE swk_url VALUE 'https://google.de'.
DATA: lv_user TYPE char50.
DATA: lv_passwd TYPE char50.
DATA: lv_timeout TYPE i VALUE 60.

DATA: lv_length TYPE i.
DATA: lv_status_code TYPE char3.
DATA: lv_status_text TYPE char128.

DATA: it_head TYPE STANDARD TABLE OF docs WITH DEFAULT KEY.
DATA: it_body TYPE STANDARD TABLE OF docs WITH DEFAULT KEY.

* HTTP Get
CALL FUNCTION 'HTTP2_GET'
  EXPORTING
    absolute_uri                = lv_url
    user                        = lv_user
    password                    = lv_passwd
    timeout                     = lv_timeout
    no_logon                    = lv_no_logon
  IMPORTING
    status_code                 = lv_status_code
    status_text                 = lv_status_text
    response_entity_body_length = lv_length
  TABLES
    response_entity_body        = it_body
    response_headers            = it_head
  EXCEPTIONS
    connect_failed              = 1
    timeout                     = 2
    internal_error              = 3
    tcpip_error                 = 4
    data_error                  = 5
    system_failure              = 6
    communication_failure       = 7
    OTHERS                      = 8.

IF sy-subrc = 0.
  cl_demo_output=>write_data( lv_status_code ).
  cl_demo_output=>write_data( lv_status_text ).
  cl_demo_output=>write_data( lv_length ).
  cl_demo_output=>write_data( it_head ).
  cl_demo_output=>write_data( it_body ).

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

* cl_gui_container=>default_screen erzwingen
  WRITE: space.
ENDIF.

[ABAP] Versand von Emails auf Basis von CDS-Views

https://weberpatrick.de/e-mail-templates/
https://weberpatrick.de/e-mail-templates-einfaches-beispiel/

https://blogs.sap.com/2019/10/12/e-mail-templates-in-s4-hana/
https://blogs.sap.com/2020/05/07/e-mail-templates-in-s-4-hana-translations/
https://blogs.sap.com/2022/08/17/e-mail-templates-in-s-4-hana-display-table-in-the-email-template/

[ABAP] ABAP-Listausgabe in HTML wandeln

**********************************************************************
* Testausgabe
**********************************************************************
* Farbe definieren
FORMAT COLOR COL_HEADING.
* Überschriftentext
WRITE: / |Testausgabe|.
* Leerzeichen am Zeilenende, damit der Farbbalken durchgezogen wird
WRITE AT sy-linsz space.
* Farbdefinition abschalten
FORMAT COLOR OFF.

WRITE: / 'Grün' COLOR COL_POSITIVE.
WRITE: / 'Rot' COLOR COL_NEGATIVE.

ULINE.

**********************************************************************
* Aufbereitung der Listausgabe für HTML
**********************************************************************
DATA: it_list TYPE STANDARD TABLE OF abaplist WITH DEFAULT KEY.

* Listausgabe in Form einer binären internen Tabelle speichern
* Sichern einer Liste
CALL FUNCTION 'SAVE_LIST'
  TABLES
    listobject         = it_list
  EXCEPTIONS
    list_index_invalid = 1
    OTHERS             = 2.

DATA: it_html TYPE STANDARD TABLE OF w3html.

* Listausgabe -> HTML
* Converts a given listobject to html
CALL FUNCTION 'WWW_HTML_FROM_LISTOBJECT'
  TABLES
    html          = it_html
    listobject    = it_list.

* HTML-Viewer
DATA(o_hv) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* URL holen
DATA: lv_url TYPE swk_url.

o_hv->load_data( IMPORTING
                   assigned_url = lv_url
                 CHANGING
                   data_table   = it_html ).

* HTML-Daten anzeigen
o_hv->show_url( url      = lv_url
                in_place = abap_false ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.

[ABAP] ITS: HTML aus einem Dynpro generieren

* Paket: SITS_ABAP

* SE11 - Report
DATA: lv_prog TYPE d020s-prog VALUE 'SAPLSD_ENTRY'.
* Dynpro 1000
DATA: lv_dynnr TYPE d020s-dnum VALUE '1000'.
* '' / C - Classic, B - HTML-Business, W - WebGUI
DATA: lv_style TYPE w3style VALUE 'B'.

DATA: lv_html_xstr TYPE xstring.
DATA: it_html TYPE STANDARD TABLE OF w3html WITH DEFAULT KEY.

* Template von Dynpro generieren
CALL FUNCTION 'ITS_GENERATE_HTML_FROM_DYNPRO'
  EXPORTING
    progname                       = lv_prog
    dynnr                          = lv_dynnr
    style_2006                     = lv_style
  IMPORTING
    source_stream                  = lv_html_xstr
  TABLES
    meta_html                      = it_html
  EXCEPTIONS
    style_not_valid                = 1
    dynnr_or_programname_not_valid = 2
    css_not_valid                  = 3
    xsl_not_valid                  = 4
    placeholder_not_valid          = 5
    no_card_identifiers_used       = 6
    error_occured                  = 7
    OTHERS                         = 8.

IF sy-subrc = 0.
  cl_demo_output=>write_data( it_html ).
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING
                                title        = 'HTML'
                                html_string  = lv_html
                                container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.
ENDIF.

[ABAP] Semantisches Objekt im Fiori-Launchpad anzeigen

* Semantisches Objekt
PARAMETERS: p_semobj TYPE /ui2/v_semobj-sem_obj LOWER CASE DEFAULT 'SalesOrder'.
* Action
PARAMETERS: p_semact TYPE char80 LOWER CASE DEFAULT 'displayFactSheet'.
* Parameter
PARAMETERS: p_sempar TYPE char80 LOWER CASE DEFAULT 'SalesOrder'.
* Value
PARAMETERS: p_parval TYPE char80 LOWER CASE DEFAULT '1'.

START-OF-SELECTION.

* URL Parameter
  DATA(it_parameters) = VALUE tihttpnvp( ( name = 'sap-client'      value = sy-mandt )
                                         ( name = 'sap-ui-language' value = 'DE' )
                                         ( name = 'sap-ui-appcache' value = 'false' ) ).

* Browser URL mit HOST:PORT und Parametern zusammenbauen
  DATA(lv_url) = /ui5/cl_theme_util=>get_server_url( path         = |/sap/bc/ui5_ui5/ui2/ushell/shells/abap/FioriLaunchpad.html|
                                                     parameters   = it_parameters
                                                     always_https = abap_false  ).

* Pattern:
*    #<semantic object>-<action>?<semantic object parameter>=<value1>
* Beispiel:
*    #SalesOrder-displayFactSheet?SalesOrder=1
  lv_url = |{ lv_url }#{ p_semobj }-{ p_semact }?{ p_sempar }={ p_parval }|.

* leere Standard-Toolbar ausblenden
  cl_abap_list_layout=>suppress_toolbar( ).

* URL anzeigen
  DATA(o_hv) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
  o_hv->show_url( url = CONV swk_url( lv_url )
                  in_place = abap_true ). " im SAP-Fenster (abap_true) oder im Externen Browser (abap_false) anzeigen

* cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] Infos zu ICF-Service lesen / Prüfen, ob SSO2-Service aktiv

* Transaktion: SICF
* Tabelle: ICFSERVICE

* Service-Name, hier z.B. MYSSOCNTL (SSO2-Service)
PARAMETERS: p_srv TYPE icfservice-icf_name DEFAULT 'MYSSOCNTL'.

START-OF-SELECTION.

  TRY.
* Suche im Baum der ICF-Services im Internet-Kommunikations-Framework
      SELECT SINGLE icfparguid
        INTO @DATA(lv_icfparguid)
        FROM icfservice
        WHERE icf_name = @p_srv.

      IF sy-subrc = 0.
        DATA: lv_hostnr	TYPE icfhostnum.       " Nummer eines virtuellen Hosts
        DATA: it_serv_info TYPE icfservtbl.    " Tabelle von ICF-Services und deren zugehörige Handler
        DATA: lv_url TYPE string.              " URL zu Service
        DATA: lv_active	TYPE c.                " Service aktiv oder inaktiv
        DATA: lv_icfdocu TYPE icfdocu.         " Documentation der ICFSERVICE Einträge
        DATA: lv_icf_custstr TYPE icf_custstr. " ICF: String für customizingdaten der Anwendung
        DATA: lv_serv_sign TYPE c.             " Kz, um welche Art v. Service (Host, int Alias, Service)
        DATA: lv_host_info TYPE icfvirhost.    " Internet Communication Framework: Virtuelle Hosts

* Liefert Informationen zu ICF-Service
        cl_icf_tree=>if_icf_tree~get_info_from_serv( EXPORTING
                                                       icf_name        = p_srv
                                                       icfparguid      = lv_icfparguid
                                                       authority_check = abap_false
                                                     IMPORTING
                                                       hostnr          = lv_hostnr
                                                       serv_info       = it_serv_info
                                                       url             = lv_url
                                                       active          = lv_active
                                                       icfdocu         = lv_icfdocu
                                                       icf_custstr     = lv_icf_custstr
                                                       serv_sign       = lv_serv_sign
                                                       host_info       = lv_host_info
                                                   ).

        cl_demo_output=>write_data( lv_hostnr ).

        IF lines( it_serv_info ) > 0.
          DATA(lv_srv_info) = it_serv_info[ 1 ].
          cl_demo_output=>write_data( lv_srv_info-service ).
          cl_demo_output=>write_data( lv_srv_info-handlertbl ).
          cl_demo_output=>write_data( lv_srv_info-pathfields ).
        ENDIF.

        cl_demo_output=>write_data( lv_url ).
        cl_demo_output=>write_data( lv_active ).
        cl_demo_output=>write_data( lv_icfdocu ).
        cl_demo_output=>write_data( lv_icf_custstr ).
        cl_demo_output=>write_data( lv_serv_sign ).
        cl_demo_output=>write_data( lv_host_info ).

        DATA: lv_urlsuffix TYPE icfredurl.    " Rest einer Url nach ICF-Service
        DATA: lv_icfnodguid TYPE icfnodguid.  " Nodguid des letzen service im Pfad
        DATA: lv_icf_name TYPE icfname.       " Name des letzen Service im ICF-Baum
        DATA: lv_int_alias TYPE icfalias.     " Kein Service sondern interner Alias
        DATA: lv_ext_alias TYPE icfalias.     " Kein Service sondern externer Alias
        DATA: lv_icfactive TYPE icfactive.    " Service ist aktiv
        DATA: lv_icfaltnme TYPE icfaltnme.    " Alternative Namensgebung

* Ermittelt aus einer URL dem letzten Service im ICF-Baum
        cl_icf_tree=>if_icf_tree~service_from_url( EXPORTING
                                                    url             = lv_url
                                                    hostnumber      = lv_hostnr
                                                    authority_check = abap_false
                                                   IMPORTING
                                                    urlsuffix  = lv_urlsuffix
                                                    icfnodguid = lv_icfnodguid
                                                    icf_name   = lv_icf_name
                                                    int_alias  = lv_int_alias
                                                    ext_alias  = lv_ext_alias
                                                    icfactive  = lv_icfactive
                                                    icfaltnme  = lv_icfaltnme
                                                  ).

        cl_demo_output=>write_data( lv_urlsuffix ).
        cl_demo_output=>write_data( lv_icfnodguid ).
        cl_demo_output=>write_data( lv_icf_name ).
        cl_demo_output=>write_data( lv_int_alias ).
        cl_demo_output=>write_data( lv_ext_alias ).
        cl_demo_output=>write_data( lv_icfactive ).
        cl_demo_output=>write_data( lv_icfaltnme ).

* ist Service aktiv
        DATA(lv_is_active) = cl_icf_tree=>is_service_active( nodeguid	= lv_icfnodguid
*                                                             URL =
*                                                             HOSTNAME =
                                                           ).

        cl_demo_output=>write_data( lv_is_active ).

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

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

[ABAP] URL-Aufruf mit SSO-Anmeldung

* NULL-Referenz auf Container
CONSTANTS: null TYPE REF TO cl_gui_container VALUE IS INITIAL.

* aufzurufende URL
DATA(lv_url) = |https://www.google.de|.

* Browserfenster ohne Container
DATA(o_hv) = NEW cl_gui_html_viewer( parent = null ).
* SSO
o_hv->enable_sapsso( enabled = abap_true ).
* URL anzeigen
o_hv->detach_url_in_browser( CONV swk_url( lv_url ) ).
* Führt alle gesammelten OLE-Calls aus
cl_gui_cfw=>flush( ).