Pengecualian Kustom

Untuk situasi di mana ada kesalahan yang tidak dapat dipulihkan, solusi Manajemen Proses Bisnis menggunakan kombinasi penangan pengecualian dan pengecualian kustom.

Menangani Pengecualian

Alih-alih menggunakan bentuk Hentikan dalam orkestrasi yang dipanggil, Anda dapat menggunakan pola pengacuan pengecualian yang ditangani oleh orkestrasi utama. Ini memungkinkan orkestrasi dengan pengetahuan seluas-luasnya tentang konteks untuk membuat keputusan tentang menangani pengecualian. Memiliki orkestrasi subordinat yang melemparkan pengecualian kustom memungkinkan Anda untuk mengomunikasikan informasi yang lebih spesifik ke orkestrasi akar.

Solusi manajemen proses bisnis mengikuti pola ini. Ada empat root, atau orkestrasi yang tidak dipanggil dalam solusi: OrderBroker, OrderManager, CableOrder1, dan CableOrder2. Tiga orkestrasi akar menerima dan menangani pengecualian kustom: OrderManager, CableOrder1, dan CableOrder2.

Perhatikan bahwa beberapa orkestrasi akar menggunakan elemen Hentikan dan elemen Hentikan muncul tepat sebelum orkestrasi mencapai titik akhir normal. Orkestrasi masih menggunakan bentuk Hentikan jika terjadi kesalahan sehingga orkestrasi direkam sebagai dihentikan, bukan sebagai selesai tetapi dengan pesan kesalahan. Ini memungkinkan solusi untuk melacak instans yang gagal dengan mudah selain merekam kesalahan.

Untuk informasi selengkapnya tentang bentuk Hentikan , lihat Cara Mengonfigurasi Bentuk Penghentian. Untuk informasi selengkapnya tentang bentuk ThrowException, lihat Cara Mengonfigurasi Throw Exception Shape.

Pengecualian Kustom

Masing-masing dari tiga pengecualian kustom berikut mengikuti pola yang sama. Memiliki jenis yang berbeda memungkinkan kode untuk membedakan pengecualian yang berbeda.

Pengecualian Dilemparkan Oleh (Orkestrasi)
ActivateException Ubah
CableOrderException Aktifkan, CableOrder1
InterruptException CableOrder1, CheckInterrupt, ErrorHandlerOrch

Semua pengecualian kustom didefinisikan dalam rakitan Utilitas . Pengecualian khusus adalah semua kelas .NET. Semua kelas pengecualian kustom diwarisi dari kelas .NET ApplicationException yang pada gilirannya mewarisi dari kelas System.Exception . Karena ada kemungkinan bahwa pengecualian mungkin dehidrasi (diserialisasikan dan disimpan dalam database), pengecualian harus menerapkan konstruktor deserialisasi. Konstruktor deserialisasi adalah konstruktor yang mengambil dua argumen: objek SerializationInfo, dan objek StreamingContext. Konstruktor deserialisasi akan digunakan selama rehidrasi pengecualian. Karena kelas ApplicationException sudah menerapkan konstruktor deserialisasi, konstruktor untuk pengecualian kustom hanya memanggil konstruktor deserialisasi dasar (ApplicationException). Misalnya, InterruptException mencakup konstruktor berikut:

// "info" is the object holding the serialized object data.  
// "context" is the contextual information about the source  
// or destination.  
public InterruptException(SerializationInfo info,  
                  StreamingContext context) : base(info, context) { }  

Untuk informasi selengkapnya tentang serialisasi kustom, lihat Serialisasi Kustom di Panduan Pengembang .NET Framework.

Penangan Pengecualian Berlapis dan Blok Kompensasi

Selain berfungsi sebagai pengecualian khusus, pengecualian kustom di beberapa tempat juga berfungsi sebagai bendera pengurutan. Dalam orkestrasi Perubahan, ada dua tempat di mana operasi Pembatalan harus dikembalikan.

Nota

Anda mungkin ingin membaca bagian ini dengan orkestrasi Ubah terbuka di Visual Studio.

Di bagian atas orkestrasi, jika panggilan ke orkestrasi Cancel gagal, blok CancelCompensation mengeksekusi dan membatalkan kembali transaksi Cancel. Jika semua berjalan dengan baik, orkestrasi kemudian memanggil orkestrasi Aktifkan .

Jika operasi Aktifkan gagal, transaksi Batalkan juga harus digulung balik. Namun, handler pengecualian untuk pemanggilan ke Aktifkan tidak memiliki informasi tentang transaksi Batalkan. Untuk menangani ini, ada handler pengecualian untuk seluruh orkestrasi. Handler ini, karena berisi cakupan Batal , mengetahui tentang transaksi Batalkan . Handler menangkap pengecualian yang dilemparkan dari lingkup Aktifkan ( ActivateException), mengembalikan transaksi Batal , lalu melemparkan pengecualian lagi sehingga orkestrasi yang disebut Orkestrasi Perubahan dapat melakukan pemrosesan tambahan apa pun.

Perhatikan bahwa desain ini hanya mengkompensasi Batal jika Aktifkan gagal. Jika Pembatalan gagal dan melempar pengecualian, Pembatalan tidak pernah terjadi dan tidak boleh dikompensasi.

Untuk informasi selengkapnya tentang blok kompensasi dan bentuk Kompensasi , lihat Cara Mengonfigurasi Bentuk Kompensasi.

Lihat Juga

Penanganan Pengecualian dalam Solusi Manajemen Proses Bisnis
Orkestrasi ExceptionHandler