SAP ABAP - Penanganan Pengecualian
Sebuah exceptionadalah masalah yang muncul selama menjalankan program. Ketika pengecualian terjadi, aliran normal program terganggu dan aplikasi program berhenti secara tidak normal, yang tidak disarankan, oleh karena itu pengecualian ini harus ditangani.
Pengecualian memberikan cara untuk mentransfer kontrol dari satu bagian program ke program lainnya. Penanganan pengecualian ABAP dibangun di atas tiga kata kunci - RAISE, TRY, CATCH and CLEANUP. Dengan asumsi pemblokiran akan memunculkan pengecualian, metode menangkap pengecualian menggunakan kombinasi kata kunci TRY dan CATCH. Blok TRY - CATCH ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Berikut sintaks untuk menggunakan TRY - CATCH -
TRY.
Try Block <Code that raises an exception>
CATCH
Catch Block <exception handler M>
. . .
. . .
. . .
CATCH
Catch Block <exception handler R>
CLEANUP.
Cleanup block <to restore consistent state>
ENDTRY.
RAISE- Pengecualian dimunculkan untuk menunjukkan bahwa beberapa situasi luar biasa telah terjadi. Biasanya, penangan pengecualian mencoba memperbaiki kesalahan atau mencari solusi alternatif.
TRY- Blok TRY berisi pengkodean aplikasi yang pengecualiannya akan ditangani. Blok pernyataan ini diproses secara berurutan. Ini dapat berisi struktur kontrol lebih lanjut dan panggilan prosedur atau program ABAP lainnya. Ini diikuti oleh satu atau lebih blok tangkapan.
CATCH- Program menangkap pengecualian dengan penangan pengecualian di tempat dalam program di mana Anda ingin menangani masalah. Kata kunci CATCH menunjukkan penangkapan pengecualian.
CLEANUP- Pernyataan blok CLEANUP dijalankan setiap kali pengecualian terjadi di blok TRY yang tidak ditangkap oleh penangan dari konstruksi TRY - ENDTRY yang sama. Dalam klausa CLEANUP, sistem dapat memulihkan objek ke keadaan yang konsisten atau melepaskan sumber daya eksternal. Artinya, pekerjaan pembersihan dapat dijalankan untuk konteks blok TRY.
Meningkatkan Pengecualian
Pengecualian dapat dimunculkan pada titik mana pun dalam metode, modul fungsi, subrutin, dan seterusnya. Ada dua cara untuk memunculkan pengecualian -
Pengecualian yang dimunculkan oleh sistem runtime ABAP.
Misalnya Y = 1 / 0. Ini akan menghasilkan kesalahan waktu berjalan tipe CX_SY_ZERODIVIDE.
Pengecualian yang diajukan oleh programmer.
Naikkan dan buat objek pengecualian secara bersamaan. Naikkan pengecualian dengan objek pengecualian yang sudah ada di skenario pertama. Sintaksnya adalah: RAISE EXCEPTION exep.
Pengecualian Penangkapan
Penangan digunakan untuk menangkap pengecualian.
Mari kita lihat cuplikan kode -
DATA: result TYPE P LENGTH 8 DECIMALS 2,
exref TYPE REF TO CX_ROOT,
msgtxt TYPE STRING.
PARAMETERS: Num1 TYPE I, Num2 TYPE I.
TRY.
result = Num1 / Num2.
CATCH CX_SY_ZERODIVIDE INTO exref.
msgtxt = exref→GET_TEXT( ).
CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref.
msgtxt = exref→GET_TEXT( ).
Dalam potongan kode di atas, kami mencoba membagi Num1 dengan Num2 untuk mendapatkan hasil dalam variabel tipe float.
Dua jenis pengecualian dapat dibuat.
Kesalahan konversi angka.
Bagi dengan nol pengecualian. Penangan menangkap pengecualian CX_SY_CONVERSION_NO_NUMBER dan juga pengecualian CX_SY_ZERODIVIDE. Di sini metode GET_TEXT () dari kelas pengecualian digunakan untuk mendapatkan deskripsi pengecualian.
Atribut Pengecualian
Berikut adalah lima atribut dan metode pengecualian -
S.No. | Atribut & Deskripsi |
---|---|
1 | Textid Digunakan untuk menentukan teks yang berbeda untuk pengecualian dan juga memengaruhi hasil metode get_text. |
2 | Previous Atribut ini dapat menyimpan pengecualian asli yang memungkinkan Anda membuat rangkaian pengecualian. |
3 | get_text Ini mengembalikan representasi tekstual sebagai string sesuai dengan bahasa sistem pengecualian. |
4 | get_longtext Ini mengembalikan varian panjang dari representasi tekstual dari pengecualian sebagai string. |
5 | get_source_position Memberikan nama program dan nomor baris tercapai di mana pengecualian dimunculkan. |
Contoh
REPORT ZExceptionsDemo.
PARAMETERS Num_1 TYPE I.
DATA res_1 TYPE P DECIMALS 2.
DATA orf_1 TYPE REF TO CX_ROOT.
DATA txt_1 TYPE STRING.
start-of-selection.
Write: / 'Square Root and Division with:', Num_1.
write: /.
TRY.
IF ABS( Num_1 ) > 150.
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE.
ENDIF.
TRY.
res_1 = SQRT( Num_1 ).
Write: / 'Result of square root:', res_1.
res_1 = 1 / Num_1.
Write: / 'Result of division:', res_1.
CATCH CX_SY_ZERODIVIDE INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
CLEANUP.
CLEAR res_1.
ENDTRY.
CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
CATCH CX_ROOT INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
ENDTRY.
IF NOT txt_1 IS INITIAL.
Write / txt_1.
ENDIF.
Write: / 'Final Result is:', res_1.
Dalam contoh ini, jika angkanya lebih besar dari 150, pengecualian CX_DEMO_ABS_TOO_LARGE akan dimunculkan. Kode di atas menghasilkan keluaran sebagai berikut untuk nomor 160.
Square Root and Division with: 160
The absolute value of number is too high
Final Result is: 0.00