Membuat dan menggunakan pemicu dengan SDK

Selesai

Properti Scripts di kelas Microsoft.Azure.Cosmos.Container berisi metode CreateTriggerAsync yang digunakan untuk membuat pemicu pre/post baru dari kode.

Catatan

Kumpulan contoh berikutnya mengasumsikan bahwa Anda sudah memiliki variabel kontainer yang ditentukan.

Membuat pra-pemicu

Mulailah dengan membuat variabel string dengan definisi fungsi pre-trigger Anda di JavaScript.

string preTrigger = @"function addLabel() {
    var context = getContext();
    var request = context.getRequest();
    
    var pendingItem = request.getBody();

    if (!('label' in pendingItem))
        pendingItem['label'] = 'new';

    request.setBody(pendingItem);
}";

Tip

Atau, Anda dapat menggunakan API file seperti System.IO.File untuk membaca fungsi dari file *.js.

Sekarang, buat objek dengan jenis Microsoft.Azure.Cosmos.Scripts.TriggerProperties dengan properti Id dan Body yang diatur ke masing-masing pengidentifikasi unik dan konten pemicu. Atur properti TriggerOperation ke TriggerOperation.Create untuk contoh ini, lalu atur properti TriggerType ke TriggerType.Pre.

TriggerProperties properties = new()
{
    Id = "addLabel",
    Body = preTrigger,
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Pre
};

Aktifkan metode CreateTriggerAsync dari variabel kontainer untuk membuat pre-trigger baru yang meneruskan properti yang dibuat sebelumnya.

await container.Scripts.CreateTriggerAsync(properties);

Membuat pasca-pemicu

Membuat post-trigger hampir sama dengan membuat pra-pemicu. Mulailah dengan membuat variabel string dengan definisi JavaScript dari fungsi post-trigger Anda.

string postTrigger = @"function createView() {
    var context = getContext();
    var container = context.getCollection();
    var response = context.getResponse();
    
    var createdItem = response.getBody();
    
    var viewItem = {
        sourceId: createdItem.id,
        categoryId: createdItem.categoryId,
        displayName: `${createdItem.name} [${createdItem.categoryName}]`
    };
 
    var accepted = container.createDocument(
        container.getSelfLink(),
        viewItem,
        (error, newItem) => {
            if (error) throw error;
        }
    );
    if (!accepted) return;
}";

Sekarang, buat objek dengan tipe Microsoft.Azure.Cosmos.Scripts.TriggerProperties dikonfigurasi hampir sama dengan konfigurasi yang sama yang digunakan dengan pre-trigger dengan satu perbedaan utama. Atur properti TriggerType ke TriggerType.Post. Kemudian, aktifkan metode CreateTriggerAsync dari variabel kontainer untuk membuat post-trigger baru yang meneruskan properti yang dibuat sebelumnya.

TriggerProperties properties = new()
{
    Id = "createView",
    Body = postTrigger,
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Post
};

await container.Scripts.CreateTriggerAsync(properties);

Tip

Dalam contoh ini, kami secara eksklusif membuat pemicu pada operasi buat. Anda juga dapat membuat pemicu untuk operasi lain di kontainer Anda.

Menggunakan pemicu dalam operasi

Sekarang pemicu telah ditentukan dan dibuat di dalam kontainer, Anda dapat menggunakannya dalam operasi di kontainer yang sama.

Mari kita gunakan contoh di mana Anda membuat item baru di C# menggunakan jenis anonim.

var newItem = new
{
    id = "caab0e5e-c037-48a4-a760-140497d19452",
    name = "Handlebar",
    categoryId = "e89a34d2-47ee-4da8-bcf6-10f552604b79",
    categoryName = "Accessories",
    price = 50
};

Sebelum menjalankan operasi, buat objek dengan jenis Microsoft.Azure.Cosmos.ItemRequestOptions. Di dalam objek opsi tersebut, konfigurasikan daftar properti PreTriggers dan PostTriggers untuk menyertakan pemicu yang ingin Anda aktifkan untuk operasi ini.

ItemRequestOptions options = new()
{
    PreTriggers = new List<string> { "addLabel" },
    PostTriggers = new List<string> { "createView" }
};

Catatan

Ingat, pemicu tidak dijalankan secara otomatis; mereka harus ditentukan untuk setiap operasi database tempat Anda ingin mereka dieksekusi.

Sekarang, aktifkan metode CreateItemAsync dari objek kontainer yang meneruskan item yang akan dibuat dan objek opsi.

await container.CreateItemAsync(newItem, requestOptions: options);

Terakhir, jika Anda mengkueri kontainer, Anda akan melihat bahwa dua hal telah terjadi:

  1. Pre-trigger menambahkan properti label ke item pertama Anda dengan nilai baru.

  2. Post-trigger membuat item kedua dengan tampilan data Anda yang diwujudkan.

[
  {
    "id": "caab0e5e-c037-48a4-a760-140497d19452",
    "name": "Handlebar",
    "categoryId": "e89a34d2-47ee-4da8-bcf6-10f552604b79",
    "categoryName": "Accessories",
    "price": 50,
    "label": "new"
  },
  {
    "id": "77875d1e-dac4-3b66-9f9c-ab6747d65952",
    "sourceId": "caab0e5e-c037-48a4-a760-140497d19452",
    "categoryId": "e89a34d2-47ee-4da8-bcf6-10f552604b79",
    "displayName": "Handlebar [Accessories]"
  }
]