[ABAP] Datei-Download

Variante 1 (cl_gui_frontend_services)

TRY.
* beliebiger Stream
    DATA: lv_xdata TYPE xstring.
    
    ...
    
* xstring -> solix
    DATA(it_solix_data) = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_xdata ).

* Daten lokal speichern
    cl_gui_frontend_services=>gui_download( EXPORTING
                                              filename     = |Bild.png|
                                              filetype     = 'BIN'
                                              bin_filesize = xstrlen( lv_xdata )
                                            CHANGING
                                              data_tab     = it_solix_data ).
CATCH cx_root INTO DATA(e_txt).
  WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 2 (cl_gui_frontend_services)

* Inhalt einer internen Tabelle als Datei (CSV) auf den lokalen Rechner speichern:
* http://help.sap.com/saphelp_nw70ehp2/helpdata/de/c7/5ab8ec178c44a8aacd1dcac3460db8/content.htm  

* CSV-Daten
DATA: itab TYPE STANDARD TABLE OF string.
* Dateipfad + Dateiname
DATA: lv_file TYPE string VALUE 'c:\temp\test.txt'.

...

TRY.
  cl_gui_frontend_services=>gui_download( EXPORTING
                                            filename = lv_file
                                            filetype = 'DAT'  " mögliche Filetypen: BIN, ASC, DAT, DBF, WK1, VSS, IBM
                                            codepage = '4110' " UTF-8 Encoding: 4110, UTF-16 Big Endian : 4102, UTF-16 Little Endian : 4103.
                                          CHANGING
                                            data_tab = itab ).
      
    WRITE: / |Datei erfolgreich unter { lv_file } gespeichert.|.
  CATCH cx_root INTO DATA(e_text).
    MESSAGE e_text->get_text( ) TYPE 'I'.
ENDTRY.

Variante 3 (cl_secxml_helper)

TRY.
* Daten als Stream
    DATA: lv_xdata TYPE xstring.

    ...

* File lokal speichern auf dem Frontend
    cl_secxml_helper=>save_file( EXPORTING default_file_name = ''
                                           initial_directory = ''
                                           window_title      = 'Datei speichern'
                                           bindata           = lv_xdata ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[SAP] Business-Objekte (BOR) / BAPI

Transaktionen

SWO1 (Business Object Builder)

  • Business Objekte anlegen und anzeigen

SWO2 (BOR Browser)
SWO3 (Business Object Builder)
SWO4 (Business Object Repository)
SWO6 (Customizing Objekttypen)
BAPI (BAPI Explorer)

  • Business Objekte anlegen und anzeigen

Objekttypen (Beispiele)

BUS1001 (Material)
BUS1001006 (Standard Material)
BUS2010 (Lieferantenanfrage)
BUS2011 (Lieferantenangebot)
BUS2012 (Bestellung)
BUS2015 (Anlieferung)
BUS2017 (Warenbewegung)
BUS2030 (Kundenanfrage)
BUS2032 (Kundenauftrag)
BUS2081 (Eingangsrechnung)
BUS2091 (Leistungserfassungsblatt)
BUS2105 (Bestellanforderung)
BUS3005 (Kondition)

Klassen

CL_BINARY_RELATION (API für Binäre Verknüpfung)

Tabellen

TOJTB (Business Object Repository Grunddaten)
TOJTT (Texte Grunddaten)
TOJTD (Customizing Objekttypen)
SWOTDI (Definition Schnittstellen)
SWOTDV (Objekttyp Verben Definition)
SWOTLQ (Laufzeittabelle Parameter, Ausnahmen)
SWOTLV (Laufzeittabelle Verben)
SWOTTV (Texte zu Verben)

Funktionsbausteine

SWO_CREATE (Business Objekt initiieren)
SWO_INVOKE (Buisness Objekt Metode aufrufen / Attribute setzen)
SWO_FREE (Business Objekt freigeben)
SWE_EVENT_CREATE (Erzeugen eines Ereignisses (public))
SWE_EVENT_GET_RECEIVERS (Ermittelt die Empfänger eines Ereignisses (INTERN))

Reports

MMPUR_BOR_CHANGE_ARL (Business Object Migration von EKKO nach BUS20xx)

Links

[ABAP] SAP: Terminverwaltung

Klassen

CL_APPOINTMENT (Termin der R/3 Terminverwaltung)
CL_ORGANIZER (Terminverwaltung: Oberfläche für die Terminanzeige)
CL_PLANNER (Terminverwaltung: Planungsoberfläche)
CL_RECA_WB_ORGANIZER (Terminkalender innerhalb der Workbench)
CL_CRM_DATES_ORGANIZER_UI (CRM Scheduler (Kalender und Taskliste))

Tabellen

SCAPPTTYPE (Terminart)
SCAPPT (benutzerspezifische Termine)
SCGENAPPT (generierte Termine (regelmäßige bzw. Gruppentermine))

Typgruppen

SCCON (Terminkalender: Definition von Konstanten)

Programme

RSSC_DEMO_CL_APPOINTMENT_SIMPL
RSSC_DEMO_CL_APPOINTMENT_PERIO
RSSC_DEMO_CL_APPOINTMENT_APPL
RSSC_DEMO_CL_APPOINTMENT
RSSC_DEMO_ICAL
RSSC_TEST_CL_APPOINTMENT_REPLY

Beispiel 1 (cl_reca_wb_organizer)

TRY.
    cl_reca_wb_organizer=>initialize( io_custom_control = cl_gui_container=>default_screen ).
    WRITE: / space.
  CATCH cx_root INTO DATA(e_ext).
ENDTRY.

Beispiel 2 (cl_appointment)

TRY.
    DATA(o_app) = NEW cl_appointment( ).

* Terminart
* siehe Tabelle SCAPPTTYPE (Terminart)
    o_app->set_type( 'MEETING' ).

* Organisator
    o_app->set_organizer( organizer = sy-uname ).

* Teilnehmer hinzufügen
    DATA: lv_part TYPE scspart.
    DATA: lv_address TYPE obj_record.
    lv_address-header = 'OBJH'.
    lv_address-type = 'SWO'.

    DATA: lv_err_msg TYPE swotreturn.

    CALL FUNCTION 'SWO_CREATE'
      EXPORTING
        objtype = 'ADDRESS'
        objkey  = space
      IMPORTING
        object  = lv_address-handle
        return  = lv_err_msg.

    DATA: lv_mail TYPE ad_smtpadr VALUE 'test@test.de'.
    DATA: it_address_container TYPE STANDARD TABLE OF swcont.

* Schreiben eines ABAP/4-Feldes in einen Container
    CALL FUNCTION 'SWC_ELEMENT_SET'
      EXPORTING
        element   = 'AddressString'
        field     = lv_mail
      TABLES
        container = it_address_container.

* Schreiben eines ABAP/4-Feldes in einen Container
    CALL FUNCTION 'SWC_ELEMENT_SET'
      EXPORTING
        element   = 'TypeId'
        field     = 'U'
      TABLES
        container = it_address_container.

* Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access     = 'C'
        object     = lv_address-handle
        verb       = 'Create'
        persistent = ' '
      TABLES
        container  = it_address_container.

    DATA: lv_objkey TYPE swotobjid.
* Buisiness Objekt Superobjekttyp lesen
    CALL FUNCTION 'SWO_OBJECT_ID_GET'
      EXPORTING
        object = lv_address-handle
      IMPORTING
        objid  = lv_objkey.

    lv_part-objkey = lv_objkey-objkey.
    lv_part-objtype = lv_objkey-objtype.
    lv_part-comm_mode = 'INT'.
    lv_part-send_mail = sccon_part_sndmail_with_ans.

    o_app->add_participant( participant = lv_part ).

* Terminüberschrift / Subject
    DATA: lv_title TYPE sc_txtshor VALUE 'wichtiger Termin'.
    o_app->set_title( lv_title ).

* Ort / Locaton (max. 12 Zeichen --> ggf. noch im iCal-Text unter LOCATION: ersetzen)
    DATA: lv_loc TYPE sc_room VALUE 'Raum 100'.
    o_app->set_location( lv_loc ).
*    o_app->set_location_string( ).

* Zeitpunkt
    DATA(lv_date_from) = CONV sc_datefro( sy-datum ).
    DATA(lv_time_from) = sccon_00.
    DATA(lv_date_to) = CONV sc_dateto( '311299' ).
    DATA(lv_time_to) = sccon_235959.

    o_app->set_date( date_from = lv_date_from
                     date_to   = lv_date_to
                     time_from = lv_time_from
                     time_to   = lv_time_to ).

* Priorität
    o_app->set_priority( sccon_prio_very_high ).

* Status
    o_app->set_status( sccon_status_planned ).

* Anzeigeattribute
    o_app->set_view_attributes( show_on_top = abap_true ).

* Busy-Wert (frei, belegt, ...)
    o_app->set_busy_value( sccon_busy_busy ).

* Klassification (1=öffentlich, 2=privat, 3=geheim)
    o_app->set_classification( sccon_public ).

* Beschreibung
    DATA(it_body_text) = VALUE so_txttab( ( line = 'Text1' ) ( line = cl_abap_char_utilities=>cr_lf )
                                          ( line = 'Text2' ) ( line = cl_abap_char_utilities=>cr_lf )
                                          ( line = 'Text3' ) ).

    o_app->set_text( it_body_text ).

* Änderbarkeit (Berechtigung: 1= alle , 2 = nur Organisator)
    o_app->set_text_authority( '2' ).

* Termin auf der DB sichern
* Note:2413122-- save should only be done after BADI call.
    o_app->save( send_invitation = abap_false ). " Important to set this one to space. Otherwise SAP will send a not user-friendly e-mail

* Mailversand
    DATA(o_req) = o_app->create_send_request( ).
    DATA(o_rec) = cl_cam_address_bcs=>create_internet_address( lv_mail ).
    o_req->add_recipient( i_recipient = o_rec ).

    o_req->set_status_attributes( EXPORTING i_requested_status = 'N'    " Requested Status: N - Never
                                            i_status_mail      = 'N'    " Setting for Which Statuses Are Reported by Mail: N - Never
                                           ).

    o_req->set_send_immediately( abap_true ).

*    IF o_req->send( ) = abap_true.
*      COMMIT WORK AND WAIT.
*    ENDIF.

* iCal-Object holen
* hier ggf. 'METHOD:REQUEST' durch 'METHOD:PUBLISH' ersetzen
* hier ggf. 'LOCATION:' ersetzen mit längerem Raumnamen
    DATA(it_ical_soli_tab) = o_app->as_ical_object( ).

    cl_demo_output=>write_data( it_ical_soli_tab ).
    cl_demo_output=>display( ).

  CATCH cx_root INTO DATA(e_ext).
ENDTRY.

Links

[ABAP] Geschäftspartner: Adressdaten lesen

PARAMETERS: p_bp TYPE bapibus1006_head-bpartner.

DATA: lv_bapibus1006_address TYPE bapibus1006_address.
DATA: lv_bapibus1006_addr_dep_att TYPE bapibus1006_addr_dep_att.
DATA: it_bapiadtel TYPE STANDARD TABLE OF bapiadtel.
DATA: it_bapiadfax TYPE STANDARD TABLE OF bapiadfax.
DATA: it_bapiadttx TYPE STANDARD TABLE OF bapiadttx.
DATA: it_bapiadtlx TYPE STANDARD TABLE OF bapiadtlx.
DATA: it_bapiadsmtp TYPE STANDARD TABLE OF bapiadsmtp.
DATA: it_bapiadrml TYPE STANDARD TABLE OF bapiadrml.
DATA: it_bapiadx400 TYPE STANDARD TABLE OF bapiadx400.
DATA: it_bapiadrfc TYPE STANDARD TABLE OF bapiadrfc.
DATA: it_bapiadprt TYPE STANDARD TABLE OF bapiadprt.
DATA: it_bapiadssf TYPE STANDARD TABLE OF bapiadssf.
DATA: it_bapiaduri TYPE STANDARD TABLE OF bapiaduri.
DATA: it_bapiadpag TYPE STANDARD TABLE OF bapiadpag.
DATA: it_bapiad_rem TYPE STANDARD TABLE OF bapiad_rem.
DATA: it_bapicomrem TYPE STANDARD TABLE OF bapicomrem.
DATA: it_addressusage TYPE STANDARD TABLE OF bapibus1006_addressusage.
DATA: it_bapiadversorg TYPE STANDARD TABLE OF bapiad1vd.
DATA: it_bapiadverspers TYPE STANDARD TABLE OF bapiad2vd.
DATA: it_bapiaduse TYPE STANDARD TABLE OF bapiaduse.
DATA: it_return TYPE STANDARD TABLE OF bapiret2.

* SAP-GP, BAPI: Adresse lesen
CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL'
  EXPORTING
    businesspartner       = p_bp
*   ADDRESSGUID           =
*   VALID_DATE            = SY-DATLO
*   RESET_BUFFER          =
  IMPORTING
    addressdata           = lv_bapibus1006_address
    address_dep_attr_data = lv_bapibus1006_addr_dep_att
  TABLES
    bapiadtel             = it_bapiadtel
    bapiadfax             = it_bapiadfax
    bapiadttx             = it_bapiadttx
    bapiadtlx             = it_bapiadtlx
    bapiadsmtp            = it_bapiadsmtp
    bapiadrml             = it_bapiadrml
    bapiadx400            = it_bapiadx400
    bapiadrfc             = it_bapiadrfc
    bapiadprt             = it_bapiadprt
    bapiadssf             = it_bapiadssf
    bapiaduri             = it_bapiaduri
    bapiadpag             = it_bapiadpag
    bapiad_rem            = it_bapiad_rem
    bapicomrem            = it_bapicomrem
    addressusage          = it_addressusage
    bapiadversorg         = it_bapiadversorg
    bapiadverspers        = it_bapiadverspers
    bapiaduse             = it_bapiaduse
    return                = it_return.

cl_demo_output=>write_data( lv_bapibus1006_address ).
cl_demo_output=>write_data( lv_bapibus1006_addr_dep_att ).
cl_demo_output=>write_data( it_bapiadtel ).
cl_demo_output=>write_data( it_bapiadfax ).
cl_demo_output=>write_data( it_bapiadtlx ).
cl_demo_output=>write_data( it_bapiadsmtp ).
cl_demo_output=>write_data( it_bapiadrml ).
cl_demo_output=>write_data( it_bapiadx400 ).
cl_demo_output=>write_data( it_bapiadrfc ).
cl_demo_output=>write_data( it_bapiadprt ).
cl_demo_output=>write_data( it_bapiadssf ).
cl_demo_output=>write_data( it_bapiaduri ).
cl_demo_output=>write_data( it_bapiadpag ).
cl_demo_output=>write_data( it_bapiad_rem ).
cl_demo_output=>write_data( it_bapicomrem ).
cl_demo_output=>write_data( it_addressusage ).
cl_demo_output=>write_data( it_bapiadversorg ).
cl_demo_output=>write_data( it_bapiadverspers ).
cl_demo_output=>write_data( it_bapiaduse ).
cl_demo_output=>write_data( it_return ).
cl_demo_output=>display( ).

[ABAP] HR: Mitarbeiterdaten lesen

TRY.
    DATA(o_eapi) = cl_hcmfab_employee_api=>get_instance( ).

    DATA(lv_pernr) = o_eapi->get_employeenumber_from_user( sy-uname ).
    DATA(lv_name) = o_eapi->get_name( lv_pernr ).
    DATA(lv_details) = o_eapi->get_employee_details( iv_pernr = lv_pernr iv_application_id = if_hcmfab_constants=>gc_application_id-mypersonaldata ).

    cl_demo_output=>write_data( lv_pernr ).
    cl_demo_output=>write_data( lv_name ).
    cl_demo_output=>write_data( lv_details ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[SAP] ILM

Transaktionen

ACLA (Definition Archivierungsklassen)
IRMPOL (ILM-Regelwerke)
SARA (Archivverwaltung)
DB15 Datenarchivierung: Datenbank-Tabellen

Tabellen

ARCH_DELE (Objekte mit Tabellen, aus denen Einträge gelöscht werden)
ARCH_DEF (Definition eines Archivierungsobjekts)
ARCH_OBJ (Archivierungsobjekt)
ARCH_OCLAS (Zuordnung der Klassen zu einem Archivierungsobjekt)
ARCH_RPRG (Archivierungsobjekte mit zugehörigen Leseprogrammen)
ARCH_TCODE (Anwendungs-Customizing-Transaktionen)
ARCH_TXT (Bezeichnung der Archivierungsobjekte)

Links

[ABAP] DialogBox mit Text und Auswahlbuttons anzeigen (POPUP_FOR_INTERACTION)

*'I' => ICON_MESSAGE_INFORMATION
*'W' => ICON_MESSAGE_WARNING
*'E' => ICON_MESSAGE_ERROR
*'Q' => ICON_MESSAGE_QUESTION
*'C' => ICON_MESSAGE_CRITICAL
DATA: lv_icon TYPE char1 VALUE 'C'.
DATA: lv_return TYPE char1.

* Dialog box (can be configured for various purposes)
CALL FUNCTION 'POPUP_FOR_INTERACTION'
  EXPORTING
    headline       = 'Überschrift'
    text1          = 'Text1'
    text2          = 'Text2'
    text3          = 'Text3'
*   TEXT4          = ' '
*   TEXT5          = ' '
*   TEXT6          = ' '
    ticon          = lv_icon
    button_1       = 'Ja'
    button_2       = 'Nein'
    button_3       = 'Abbruch'
  IMPORTING
    button_pressed = lv_return.

* Button-Wert: 1 - button_1, 2 - button_2 oder 3 - button_3
CASE lv_return.
  WHEN 1.
    WRITE: / 'Ja', lv_return.
  WHEN 2.
    WRITE: / 'Nein', lv_return.
  WHEN 3.
    WRITE: / 'Abbruch', lv_return.
ENDCASE.