Baca dalam bahasa Inggris

Bagikan melalui


Perbarui Fungsi

Saat fungsi Perbarui dipanggil objek, objek ditetapkan ulang ke dalam mesin untuk dievaluasi ulang, berdasarkan data dan status baru. Objek dapat berjenis TypedXmlDocument atau kelas .NET atau DataConnection atau TypedDataTable.

Anda juga dapat menggunakan fungsi Perbarui untuk meningkatkan performa mesin dan mencegah skenario perulangan tanpa akhir seperti yang dijelaskan dalam topik ini.

Biasanya, Anda menggunakan Assert untuk menempatkan objek baru dalam memori kerja mesin aturan, dan menggunakan Perbarui untuk memperbarui objek yang sudah ada di memori kerja. Saat Anda menegaskan objek baru, kondisi dalam semua aturan dievaluasi. Saat Anda memperbarui objek yang ada, hanya kondisi yang menggunakan fakta yang diperbarui yang dievaluasi kembali, dan tindakan ditambahkan ke agenda jika kondisi ini dievaluasi ke true.

Menggunakan fungsi Perbarui pada fakta .NET

Ambil dua aturan yang mengikuti sebagai contoh. Misalkan objek ItemA dan ItemB sudah ada dalam memori kerja. Aturan 1 mengevaluasi properti Id pada ItemA, mengatur properti Id pada ItemB, lalu menetapkan ulang ItemB setelah perubahan. Ketika ItemB ditetapkan ulang, item diperlakukan sebagai objek baru dan mesin mengevaluasi kembali semua aturan yang menggunakan ItemB objek dalam predikat atau tindakan. Ini memastikan bahwa Aturan 2 dievaluasi kembali terhadap nilai baru ItemB.Id, seperti yang ditetapkan dalam Aturan 1. Aturan 2 mungkin gagal saat pertama kali dievaluasi, tetapi mengevaluasi ke true untuk kedua kalinya dievaluasi.

Aturan 1

IF ItemA.Id == 1  
THEN ItemB.Id = 2  
Assert(ItemB)  

Aturan 2

IF ItemB.Id == 2  
THEN ItemB.Value = 100  

Kemampuan untuk menegaskan kembali objek ke dalam memori kerja memungkinkan pengguna kontrol eksplisit atas perilaku dalam skenario rantai maju. Efek samping dari penetapan ulang dalam contoh ini, adalah bahwa Aturan 1 juga dievaluasi kembali. Karena ItemA.Id tidak diubah, Aturan 1 kembali mengevaluasi ke true dan tindakan Assert(ItemB) diaktifkan lagi. Akibatnya, aturan menciptakan situasi perulangan tanpa akhir.

Catatan

Jumlah perulangan maksimum default evaluasi ulang aturan adalah 2^32. Untuk aturan tertentu, eksekusi kebijakan dapat berlangsung untuk waktu yang lama. Anda dapat mengurangi jumlah dengan menyesuaikan properti Kedalaman Loop Eksekusi Maksimum dari versi kebijakan.

Anda harus dapat menegaskan ulang objek tanpa membuat perulangan tanpa akhir, dan fungsi Pembaruan menyediakan kemampuan ini. Seperti penetapan ulang, fungsi Pembaruan melakukan Pencabutan dan Pernyataan instans objek terkait, yang telah diubah dari tindakan aturan, tetapi ada dua perbedaan utama:

  • Tindakan pada agenda untuk aturan di mana jenis instans hanya digunakan dalam tindakan (bukan predikat) akan tetap berada di agenda.

  • Aturan yang hanya menggunakan jenis instans dalam tindakan tidak akan dievaluasi ulang.

    Oleh karena itu, aturan yang menggunakan jenis instans baik dalam predikat saja atau predikat dan tindakan akan dievaluasi kembali dan tindakannya ditambahkan ke agenda sebagaimana mewajibkan.

    Mengubah contoh sebelumnya untuk menggunakan fungsi Pembaruan memastikan bahwa hanya Aturan 2 yang dievaluasi ulang karena ItemB digunakan dalam kondisi Aturan 2. Aturan 1 tidak dievaluasi kembali karena ItemB hanya digunakan dalam tindakan Aturan 1, menghilangkan skenario perulangan.

Aturan 1

IF ItemA.Id == 1  
THEN ItemB.Id = 2  
Update(ItemB)  

Aturan 2

IF ItemB.Id == 2  
THEN ItemB.Value = 100  

Namun, masih mungkin untuk membuat skenario perulangan. Misalnya, pertimbangkan aturan berikut.

Aturan 1

IF ItemA.Id == 1  
THEN ItemA.Value = 20  
Update(ItemA)  

Karena ItemA digunakan dalam predikat , item dievaluasi kembali ketika Pembaruan dipanggil pada ItemA. Jika nilai ItemA.Id tidak diubah di tempat lain, Aturan 1 terus mengevaluasi ke true, menyebabkan Pembaruan sekali lagi dipanggil pada A. Perancang aturan harus memastikan bahwa skenario perulangan seperti ini tidak dibuat.

Pendekatan yang sesuai untuk ini akan berbeda berdasarkan sifat aturan. Berikut ini adalah mekanisme sederhana untuk menyelesaikan masalah dalam contoh sebelumnya.

Fungsi Pembaruan dapat digunakan dalam Komposer Aturan Bisnis dengan referensi ke kelas , seperti halnya fungsi Assert, Retract, atau RetractByType .

Aturan 1

IF ItemA.Id == 1 and ItemA.Value != 20  
THEN ItemA.Value = 20  
Update(ItemA)  

Menambahkan pemeriksaan pada ItemA.Value mencegah Aturan 1 mengevaluasi ke true lagi setelah tindakan Aturan 1 dijalankan pertama kali.

Menggunakan fungsi Perbarui pada fakta XML

Ambil dua aturan yang mengikuti sebagai contoh. Misalkan itu. Aturan 1 mengevaluasi jumlah total item dalam pesan pesanan pembelian, dan aturan2 menetapkan status menjadi "Perlu persetujuan" jika jumlah total lebih besar dari atau sama dengan 10.

Aturan 1

IF 1 == 1  
THEN ProcessPO.Order:/Order/Items/TotalCount = (ProcessPO.Order:/Order/Items/TotalCount + ProcessPO:/Order/Items/Item/Count)  

Aturan 2

IF ProcessPO.Order:/Order/Items/TotalCount >= 10  
THEN ProcessPO.Order:/Order/Status = "Needs approval"  

Jika Anda meneruskan pesan pesanan pembelian (PO) berikut sebagai input ke kebijakan ini, Anda melihat bahwa status tidak diatur ke "Perlu persetujuan" meskipun jumlah total item adalah 14. Pasalnya, aturan2 dievaluasi hanya di awal ketika nilai bidang TotalCount adalah 0, dan aturan tidak dievaluasi setiap kali jumlah total yang tersedia diperbarui. Agar kondisi dievaluasi kembali setiap kali TotalCount diperbarui, Anda perlu memanggil fungsi Perbarui pada simpul induk (Item) dari simpul yang dimodifikasi (TotalCount). Jika Anda mengubah Rule1 seperti yang ditunjukkan di bawah ini, dan mengujinya sekali lagi, Anda akan melihat nilai bidang Status yang diatur ke "Perlu Persetujuan".

<ns0:Order xmlns:ns0="http://ProcessPO.Order">  
    <Items>  
        <Item>  
            <Id>ITM1</Id>  
            <Count>2</Count>  
        </Item>  
        <Item>  
            <Id>ITM2</Id>  
            <Count>5</Count>  
        </Item>  
        <Item>  
            <Id>ITM3</Id>  
            <Count>7</Count>  
        </Item>  
        <TotalCount>0</TotalCount>  
    </Items>  
    <Status>No approval needed</Status>  
</ns0:Order>  

Aturan 1 yang dimodifikasi adalah sebagai berikut:

Aturan 1

IF 1 == 1  
THEN ProcessPO.Order:/Order/Items/TotalCount = (ProcessPO.Order:/Order/Items/TotalCount + ProcessPO:/Order/Items/Item/Count) AND  
Update(ProcessPO.Order:/Order/Items)  

Menggunakan fungsi Perbarui pada fakta database

TypedDataTable

Jika Pembaruan dipanggil pada TypedDataTable, Pembaruan dipanggil oleh mesin pada semua TypedDataRows terkait. Pembaruan juga dapat dipanggil pada TypedDataRows individual.

Koneksi Data

Pembaruan DataConnection tidak didukung. Gunakan Assert sebagai gantinya.

Lihat juga

Fungsi Kontrol Mesin