Progress-4gl: Bagaimana cakupan transaksi berlaku untuk pemanggilan program eksternal?

Aug 20 2020

Saya butuh bantuan untuk memahami pelingkupan transaksi untuk prosedur / program di luar program saat ini.

Misalkan saya memiliki tiga program, program A, program B dan program C. Di dalam program A, saya memiliki prosedur yang memiliki beberapa baris di dalamnya yang dibungkus di dalam do transactionblok (tidak diketik dengan kuat). Di dalam do transactionblok itu, ia memanggil Program B. Setelah kembali dari program B ada perintah urungkan, tinggalkan. Dalam blok transaksi yang sama, ia memanggil program C dan memiliki pembatalan, keluar setelah panggilan ini juga.

Pertanyaan saya adalah, jika di dalam blok transaksi, program B dijalankan tanpa kesalahan, tetapi program c mengembalikan kesalahan, apakah pembatalan, keluar setelah pemanggilan program C juga akan membatalkan transaksi yang terjadi di dalam program B?

Procedure do_something:
  some processing....
  do transaction:
    error-message = "".
    {run programB.p}
    if error-message <> "" then undo, leave.
  
    some further processing...
  
    error-message = "".
    {run programC.p}
    if error-message <> "" then undo, leave.
  end. /* end of do transaction */
end procedure.

Jawaban

4 MikeFechner Aug 20 2020 at 02:58

Iya. Semua yang terjadi di blok transaksi akan dibatalkan.

5 TomBascom Aug 20 2020 at 04:01

Iya. Dalam contoh yang Anda gambarkan semuanya akan dibatalkan.

Ini tidak begitu banyak sehingga "diperpanjang" per se tetapi hanya transaksi yang mencakup semua yang terjadi dalam sesi itu dari titik waktu ketika diaktifkan sepenuhnya sampai itu dilakukan atau dibatalkan. Prosedur internal, prosedur eksternal, fungsi yang ditentukan pengguna, metode kelas, kode pemicu, dll.

"Dalam sesi itu" penting - jika Anda memanggil prosedur pada server aplikasi, aktivitas tersebut TIDAK disertakan karena ini adalah prosesnya sendiri dengan konteks transaksinya sendiri yang berbeda.

Ketika server aplikasi terlibat, semuanya menjadi berantakan. Penelepon asli tidak memiliki kemampuan (bawaan) untuk mengetahui apa yang harus dibatalkan dalam sesi server aplikasi yang disebut. Panggilan server aplikasi dapat menampilkan kesalahan yang menyebabkan pemanggil memutar kembali jika mengalami masalah, tetapi pemanggil juga dapat memutuskan untuk menjebak dan mengabaikan kesalahan tersebut.