[ABAP] Funktionen von Business Objekten aufrufen

Beispiel 1 (Bestellung anzeigen)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* Paket: SWO

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

* BUS2012 == Bestellung
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS2012'.
* Bestellnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '0001122333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Business Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access     = 'C'        " C - Call Method, G - Get Attribute
        object     = lv_obj
        verb       = 'DISPLAY'  " Anzeigen
      IMPORTING
        return     = lv_ret
      TABLES
        container  = it_container.

    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 2 (Details zur Bestellung auflisten)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS2012 == Bestellung
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS2012'.
* Bestellnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '0001122333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Business Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'C'           " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'GETDETAIL1'  " Details
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 3 (Attribut zum Material anzeigen)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS1001006 == Standard Material
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS1001006'.
* 18-stellige Materialnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '000000001112223333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Buisiness Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'G'             " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'MATERIALTYPE'  " Attribut
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 4 (Material Detail)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS1001006 == Standard Material
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS1001006'.
* 18-stellige Materialnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '000000001112223333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Buisiness Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * SWO1 -> Objekttyp -> Methoden
  * oder
  * Tabelle SWOTDV -> Spalte VERB, VERBTYPE = M
  *GetDetail                             Detaildaten zu einem Material ermitteln
  *ExistenceCheck                        Existenz des Objekts prüfen
  *GetList                               Liste mit Kurztext
  *Display                               Material anzeigen
  *GetMRPList                            Dispositionsliste eines Materials
  *GetStockRequirementsList              Aktuelle Bedarfs-/Bestandsliste eines Materials

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'C'          " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'GETDETAIL'  " Details
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.