Auslieferung / Transport über BAPI anlegen

Um im ERP eine Auslieferung in Bezug zu einem Kundenauftrag anzulegen, ist folgender BAPI nötig.

Edit: Der BAPI wurde mittlerweile umbenannt und lautet jetzt BAPI_OUTB_DELIVERY_CREATE_SLS. Danke an Dovahkiin (siehe Kommentare)

DATA lt_sales_order_items TYPE TABLE OF bapidlvreftosalesorder.
DATA ls_sales_order_item LIKE LINE OF lt_sales_order_items.

ls_sales_order_item-ref_doc = lf_vbeln_ka.
APPEND ls_sales_order_item TO lt_sales_order_items.

CALL FUNCTION 'BAPI_OUTBOUND_DELIVERY_CREATE_SLS'
  IMPORTING
    delivery          = lf_vbeln_lf
  TABLES
    sales_order_items = lt_sales_order_items[]
    return            = lt_return[].

Einen Transport zur Auslieferung erstellt man über folgenden BAPI.

DATA lt_itemdata TYPE TABLE OF bapishipmentitem.
DATA ls_itemdata LIKE LINE OF lt_itemdata.
DATA ls_headerdata TYPE bapishipmentheader.

ls_headerdata-shipment_type    = lf_shtyp. " Transporttyp
ls_headerdata-trans_plan_pt    = lf_tplst. " Transportdispostelle
ls_headerdata-service_agent_id = lf_tdlnr. " Spediteur
ls_headerdata-status_plan      = 'X'.      " Status des TA setzen
ls_headerdata-status_checkin   = 'X'.

ls_itemdata-delivery  = lf_vbeln_lf.
ls_itemdata-itenerary = 1.
APPEND ls_itemdata TO lt_itemdata.

CALL FUNCTION 'BAPI_SHIPMENT_CREATE'
  EXPORTING
    headerdata = ls_headerdata
  TABLES
    itemdata   = lt_itemdata[]
    return     = lt_return[].

 

Inline Deklarationen von Variablen unter ABAP

Nach meinem Besuch des DSAG Treffens AK NetWeaver Development in Walldorf am 29.11. habe ich wieder ein paar nette Features mitnehmen dürfen. Eines der besten davon sind „inline Deklarationen“ im ABAP Code. Wer sich im Moment nichts darunter vorstellen kann, dem hilft vielleicht folgendes Beispiel.

Wer kennt es nicht? Innerhalb von TRY-CATCH-ENDTRY Konstrukten will man die geworfene Exception fangen und z.B. den Text auswerten. Die bisherige Schreibweise  (< ABAP 7.4) dafür ist wie folgt.

DATA:
  lo_exception TYPE REF TO cx_root.

TRY.
    me->raise_exception( ).

  CATCH cx_root INTO lo_exception.
    me->process_exception( lo_exception ).
    RETURN.

ENDTRY.

Ab ABAP 7.4 (Beta-Version kommt noch im Dezember! Ramp-Up dann Q1/2013) kann das Exception-Handling dann wie folgt aussehen.

TRY.
    me->raise_exception( ).

  CATCH cx_root INTO DATA(lo_exception).
    me->process_exception( lo_exception ).
    RETURN.

ENDTRY.

Ist doch deutlich knackiger als obiger Code, oder? 🙂

Ähnlich funktioniert auch die Definition von Variablen an einer beliebigen Stelle im Coding.

DATA(lf_test) = 'Wert'.

Vorsicht ist allerdings beim Gültigkeitsbereich der Variablen geboten. Eine z.B. innerhalb einer Schleife deklarierten Variable hat auch ausserhalb der Schleife Gültigkeit! Dieser Tatsache ist sich die SAP bewusst, will aber (anscheinend) an der Situation nichts ändern. Vielleicht ja dann in ABAP 7.5? 😉

ABAP Dokumentation in Popup darstellen

Um einen Doku-Text in einem Popup darzustellen, sind folgende Zeilen ABAP nötig.

  DATA:
   lt_ltext             TYPE          tlinetab,
   lt_exclude           TYPE TABLE OF hlpfcode,
   ls_help_info         TYPE          help_info.

  CALL FUNCTION 'HELP_DOCULINES_SHOW'
    EXPORTING
      help_infos = ls_help_info
    TABLES
      excludefun = lt_exclude[]
      helplines  = lt_ltext[].

Calling WCF Services from ABAP

I’m writing an ABAP application that needs to call a back end .NET web service which is written using Windows Communication Foundation. When creating a running WCF web service out of the box, ABAP could not connect to the web service.

The problem

The SAP HTTP Client returns „Cannot process the message because the content type ‘text/xml; charset=utf-8′ was not the expected type ‘application/soap+xml; charset=utf-8′.

The reason

WCF is running a newer version of web services than expected by the ABAP HTTP Client.

The solution

Change the binding type of the WCF service from „wsHttpBinding“ to „basicHttpBinding“ in „web.config„.
This ensures that your .NET web service would support clients and other services that conform to the WS-I standards.

On the ABAP side double check that the namespace and the SOAPAction are correct. If you get a message like „SOAP fault“ then your SOAP action is wrong. Believe me 😉