Buat prosedur tersimpan

Selesai

Azure Cosmos DB menyediakan eksekusi transaksional JavaScript terintegrasi bahasa pemrogram yang memungkinkan Anda menulis prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna (UDF). Untuk memanggil prosedur tersimpan, pemicu, atau fungsi yang ditentukan pengguna Anda harus mendaftarkannya. Untuk informasi selengkapnya, lihat Cara bekerja dengan prosedur tersimpan, pemicu, fungsi yang ditentukan pengguna di Azure Cosmos DB.

Catatan

Unit ini berfokus pada prosedur tersimpan, unit berikut mencakup pemicu dan fungsi yang ditentukan pengguna.

Menulis prosedur tersimpan

Prosedur tersimpan dapat membuat, memperbarui, membaca, membuat kueri, dan menghapus item di dalam kontainer Azure Cosmos. Prosedur tersimpan didaftarkan per koleksi, dan dapat beroperasi pada dokumen atau lampiran apa pun yang ada dalam koleksi tersebut.

Berikut adalah prosedur tersimpan sederhana yang mengembalikan respons "Halo Dunia".

var helloWorldStoredProc = {
    id: "helloWorld",
    serverScript: function () {
        var context = getContext();
        var response = context.getResponse();

        response.setBody("Hello, World");
    }
}

Objek konteks menyediakan akses ke semua operasi yang dapat dilakukan di Azure Cosmos DB, dan akses ke objek permintaan dan respons. Dalam hal ini, Anda menggunakan objek respons untuk mengatur isi respons yang akan dikirim kembali ke klien.

Membuat item menggunakan prosedur tersimpan

Saat Anda membuat item dengan menggunakan prosedur tersimpan, item disisipkan ke dalam kontainer Azure Cosmos DB dan ID untuk item yang baru dibuat dikembalikan. Membuat item merupakan operasi asinkron dan bergantung pada fungsi panggilan balik JavaScript. Fungsi panggilan balik memiliki dua parameter: satu untuk objek kesalahan jika operasi gagal, dan satu lagi untuk nilai pengembalian, dalam hal ini, objek yang dibuat. Dalam panggilan balik, Anda dapat menangani pengecualian atau melemparkan kesalahan. Jika panggilan balik tidak disediakan dan ada kesalahan, runtime Azure Cosmos DB akan menampilkan kesalahan.

Prosedur tersimpan juga menyertakan parameter untuk mengatur deskripsi sebagai nilai boolean. Ketika parameter diatur ke true dan deskripsi hilang, prosedur tersimpan melemparkan pengecualian. Jika tidak, sisa prosedur tersimpan akan terus berjalan.

Prosedur tersimpan ini mengambil input documentToCreate, isi dokumen yang akan dibuat dalam koleksi saat ini. Semua operasi semacam itu tidak sinkron dan bergantung pada panggilan balik fungsi JavaScript.

var createDocumentStoredProc = {
    id: "createMyDocument",
    body: function createMyDocument(documentToCreate) {
        var context = getContext();
        var collection = context.getCollection();
        var accepted = collection.createDocument(collection.getSelfLink(),
              documentToCreate,
              function (err, documentCreated) {
                  if (err) throw new Error('Error' + err.message);
                  context.getResponse().setBody(documentCreated.id)
              });
        if (!accepted) return;
    }
}

Larik sebagai parameter input untuk prosedur tersimpan

Saat menentukan prosedur tersimpan di portal Microsoft Azure, parameter input selalu dikirim sebagai string ke prosedur tersimpan. Bahkan jika Anda melewati larik untai (karakter) sebagai input, larik dikonversi ke untai (karakter) dan dikirim ke prosedur tersimpan. Untuk mengerjakan ini, Anda dapat menentukan fungsi dalam prosedur tersimpan untuk mengurai untai sebagai larik. Kode berikut menunjukkan cara mengurai parameter input string sebagai array:

function sample(arr) {
    if (typeof arr === "string") arr = JSON.parse(arr);

    arr.forEach(function(a) {
        // do something here
        console.log(a);
    });
}

Eksekusi terikat

Semua operasi Azure Cosmos DB harus diselesaikan dalam waktu terbatas. Prosedur tersimpan memiliki waktu terbatas untuk dijalankan di server. Semua fungsi koleksi mengembalikan nilai Boolean yang mewakili apakah operasi tersebut selesai atau tidak

Transaksi di dalam prosedur tersimpan

Anda dapat menerapkan transaksi pada item dalam kontainer dengan menggunakan prosedur tersimpan. Fungsi JavaScript dapat mengimplementasikan model berbasis kelanjutan untuk mengelompokkan atau melanjutkan eksekusi. Nilai kelanjutan dapat berupa nilai pilihan Anda dan aplikasi Anda kemudian dapat menggunakan nilai ini untuk melanjutkan transaksi dari titik awal yang baru. Diagram berikut menggambarkan bagaimana model kelanjutan transaksi dapat digunakan untuk mengulangi fungsi sisi server hingga fungsi menyelesaikan seluruh beban kerja pemrosesannya.

This diagram depicts how the transaction continuation model can be used to repeat a server-side function until the function finishes its entire processing workload.