Belki çoğumuzun başına gelmiştir. Bir Transport Order yaratırken genelde “L_TO_CREATE_DN” BAPI’sini kullanırız. Normalde her ABAP developer BAPI’leri eklerken pattern butonu ile ekler.

Ama aşağıdaki gibi error_message yoktur. Çünkü sadece BAPI’deki bu exceptionlar otomatik olarak eklenir.

Eğer böyle eklersek, kod aşağıdaki gibi gelir. Ama burada aktif etmemiz gereken bir şey daha vardır.
CALL FUNCTION 'L_TO_CREATE_DN'
EXPORTING
i_lgnum =
i_vbeln =
i_refnr = ' '
i_squit = ' '
i_nidru = ' '
i_drukz = ' '
i_ldest = ' '
i_komim = ' '
i_einlm = ' '
i_einta = ' '
i_nospl = ' '
i_update_task = ' '
i_commit_work = 'X'
i_bname = sy-uname
i_teilk = ' '
i_solex = 0
i_pernr = 0
it_delit =
IMPORTING
e_tanum =
e_teilk =
TABLES
t_ltak =
t_ltap_vb =
t_wmgrp_msg =
EXCEPTIONS
foreign_lock = 1
dn_completed = 2
partial_delivery_forbidden = 3
xfeld_wrong = 4
ldest_wrong = 5
drukz_wrong = 6
dn_wrong = 7
squit_forbidden = 8
no_to_created = 9
teilk_wrong = 10
update_without_commit = 11
no_authority = 12
no_picking_allowed = 13
dn_hu_not_choosable = 14
input_error = 15
OTHERS = 16.
IF sy-subrc <> 0.
* implement suitable error handling here
ENDIF.
BAPI’nin sonuna mutlaka bu error_message parametresini exceptions kısmına eklememiz lazım. Yoksa BAPI’den bir hata dönerse bunu ön yüzde görebiliriz ve o an error message olduğu için işlem duracaktır.
error_message = 99
OTHERS = 100.
Eğer bunları eklemeden çalıştırırsak, bazı error mesajları exception’a düşmeden direkt ekranda mesaj verebilir, aşağıdaki gibi.

Bu yüzden bu kod aşağıdaki gibi düzeltilmelidir.
CALL FUNCTION 'L_TO_CREATE_DN'
EXPORTING
i_lgnum = lr_data->lgnum
i_vbeln = lr_data->vbeln
* I_REFNR = ' '
* I_SQUIT = ' '
* I_NIDRU = ' '
* I_DRUKZ = ' '
* I_LDEST = ' '
* I_KOMIM = ' '
* I_EINLM = ' '
* I_EINTA = ' '
* I_NOSPL = ' '
* I_UPDATE_TASK = ' '
i_commit_work = 'X'
i_bname = sy-uname
* I_TEILK = ' '
* I_SOLEX = 0
* I_PERNR = 0
* IT_DELIT =
* IMPORTING
* E_TANUM =
* E_TEILK =
TABLES
t_ltak = lt_ltak
t_ltap_vb = lt_ltap_vb
t_wmgrp_msg = lt_wmgrp_msg
EXCEPTIONS
foreign_lock = 1
dn_completed = 2
partial_delivery_forbidden = 3
xfeld_wrong = 4
ldest_wrong = 5
drukz_wrong = 6
dn_wrong = 7
squit_forbidden = 8
no_to_created = 9
teilk_wrong = 10
update_without_commit = 11
no_authority = 12
no_picking_allowed = 13
dn_hu_not_choosable = 14
input_error = 15
error_message = 99
OTHERS = 100.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* IF sy-msgty EQ 'A'. "bei Abbruch
* ROLLBACK WORK. "Vorerst selbst Rollback
* ENDIF.
MOVE sy-msgno TO lmess-msgno.
MOVE sy-msgid TO lmess-msgid.
MOVE sy-msgv1 TO lmess-msgv1.
MOVE sy-msgv2 TO lmess-msgv2.
MOVE sy-msgv3 TO lmess-msgv3.
MOVE sy-msgv4 TO lmess-msgv4.
CALL FUNCTION 'L_MESSAGE_AUFBEREITEN'
EXPORTING
i_mess = lmess
IMPORTING
o_text = lv_mess_text.
WRITE :/ lv_mess_text.
WRITE :/ 'Fehler; Rückgabe des Importparameters :', lr_data->vbeln.
ELSE.
READ TABLE lt_ltak INTO DATA(ls_ltak) INDEX 1.
WRITE :/ 'Erfolg; Rückgabe von TA-Nummer:(', ls_ltak-tanum , ') und Auslieferung: (', ls_ltak-vbeln ,')'.
ENDIF.
Bu exception eklendiği için artık bir hata olması durumunda bunu BAPI’nin işlemi durmadan yakalayabiliriz.

Zaten SAP’de yukarıdaki gibi standart kodlarda genelde bu özelliği aktif olarak kullanır. Diğer örnekleri de incelemek için “L_TO_CREATE_DN” BAPI’sine where used list çekebilirsiniz.
![]()