Mustafa HAMIT

SAP WM BAPI “L_TO_CREATE_DN” Error Handling Nasıl Yapılır?

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.

Loading

Bir yanıt yazın