Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pernyataan adalah proses menambahkan instans objek ke dalam memori kerja mesin Aturan Bisnis. Mesin memproses setiap instans berdasarkan kondisi dan tindakan yang dikaitkan dengan jenis instans, menggunakan fase pencocokan, resolusi konflik, dan tindakan.
Topik berikut menjelaskan perilaku yang dihasilkan dari penggunaan fungsi Assert untuk berbagai jenis fakta.
Objek .NET
Setiap objek ditegaskan ke dalam memori kerja sebagai instans terpisah. Ini berarti bahwa instans dianalisis oleh setiap predikat yang mereferensikan jenis objek (misalnya, IF Object.Property = 1). Ini juga tersedia untuk tindakan aturan yang mereferensikan jenis, tergantung pada hasil kondisi aturan.
Pertimbangkan contoh berikut.
Aturan 1
IF A.Value = 1
THEN A.Status = "good"
Aturan 2
IF B.Value = 1
THEN A.Status = "good"
Di Aturan 1, hanya instans A yang memiliki Nilai 1 yang akan memperbarui properti Status mereka. Namun, dalam Aturan 2, jika kondisi mengevaluasi ke true, semua instans A akan memperbarui statusnya. Faktanya, jika ada beberapa instans B, instans A akan diperbarui setiap kali kondisi dievaluasi menjadi true untuk suatu instans B.
Untuk menegaskan objek .NET dari dalam aturan, Anda dapat menambahkan fungsi Assert bawaan sebagai tindakan aturan. Perhatikan bahwa mesin aturan memiliki fungsi CreateObject , tetapi tidak ditampilkan sebagai fungsi terpisah di Komposer Aturan Bisnis. Proses pemanggilan dilakukan dengan menyeret metode konstruktor objek yang ingin Anda buat dari tampilan Kelas .NET di Facts Explorer ke bagian aksi. Komposer Aturan Bisnis kemudian menerjemahkan metode konstruktor ke dalam panggilan CreateObject dalam definisi aturan.
TypedXmlDocument
Ketika TypedXmlDocument diverifikasi, Mesin Aturan Bisnis membuat instans turunan TypedXmlDocument berdasarkan penyeleksi yang ditentukan dalam aturan.
Selektor dan bidang adalah ekspresi XPath. Anda dapat menganggap selektor sebagai cara untuk mengisolasi simpul dokumen XML dan bidang untuk mengidentifikasi item tertentu dalam selektor. Semua bidang di dalam satu pemilih dikelompokkan bersama sebagai objek oleh mesin. Saat Anda memilih simpul di bawah tab Skema XML di Facts Explorer, Komposer Aturan Bisnis secara otomatis mengisi properti Pemilih XPath untuk semua simpul, dan properti Bidang XPath untuk simpul apa pun yang tidak berisi simpul anak. Atau, Anda dapat memasukkan ekspresi XPath Anda sendiri untuk XPath Selector dan XPath Field jika perlu.
Jika pemilih cocok dengan beberapa bagian dokumen XML, beberapa objek jenis ini ditegaskan ke dalam atau dicabut dari memori kerja mesin aturan. Asumsikan Anda memiliki XML berikut.
<root>
<order customer="Joe">
<item name="router" quantity="10" cost="550" />
<item name="switch" quantity="3" cost="300" />
</order>
<order customer="Jane">
<item name="switch" quantity="1" cost="300" />
<item name="cable" quantity="23" cost="9.99" />
</order>
</root>
Jika Anda menggunakan pemilih /root/order (atau //order), dua objek ditambahkan ke memori kerja.
1)
<order customer="Joe">
<item name="router" quantity="10" cost="550" />
<item name="switch" quantity="3" cost="300" />
</order>
2)
<order customer="Jane">
<item name="switch" quantity="1" cost="300" />
<item name="cable" quantity="23" cost="9.99" />
</order>
Dalam setiap pemilih, bidang individual direferensikan melalui XPaths.
Jika Anda menggunakan pemilih /root/order/item (atau (//order/item atau //item), empat objek ditambahkan ke memori kerja mesin aturan, dua item untuk Joe dan dua item untuk Jane.
<root>
<order customer="Joe">
</order>
<order customer="Jane">
</order>
</root>
Setiap objek memiliki akses ke tiga bidang—@name, @quantity, dan @cost. Karena objek adalah referensi ke dalam dokumen asli, Anda dapat merujuk ke bidang induk (misalnya, ".. . /@customer").
Anda dapat menggunakan beberapa pemilih dalam dokumen yang sama. Ini memungkinkan Anda untuk melihat berbagai bagian dokumen (misalnya, jika satu bagian adalah pesanan dan bagian lain berisi alamat pengiriman). Namun, perlu diingat bahwa objek yang dibuat ditentukan oleh string XPath yang membuatnya. Menggunakan ekspresi XPath yang berbeda, bahkan jika mengarah ke simpul yang sama, menghasilkan TypedXmlDocument yang unik.
Mesin aturan secara asli mendukung tipe skalar .NET dasar, serta objek untuk tipe referensi. Dokumen XML pada dasarnya adalah teks, tetapi berdasarkan jenis yang ditentukan ketika aturan dibuat, nilai bidang mungkin dari jenis apa pun. Selain itu, karena bidang adalah ekspresi XPath, bidang tersebut dapat mengembalikan nodeset, dalam hal ini item pertama dalam set digunakan sebagai nilai.
Di balik layar, mesin aturan dapat mengonversi nilai bidang teks ke salah satu jenis yang didukung melalui fungsi XmlConvert . Anda dapat menentukan ini dengan mengatur tipe di Business Rule Composer. Pengecualian dilemparkan jika konversi tidak dimungkinkan. Jenis bool dan double hanya dapat diambil sebagai jenis, string, atau objek masing-masing.
TypedDataTable
Ketika TypedDataTable dikonfirmasi, semua DataRows yang terkandung dalam DataTable secara otomatis dimasukkan ke dalam engine sebagai TypedDataRows. Setiap kali kolom tabel atau tabel digunakan sebagai argumen aturan, ekspresi dievaluasi terhadap TypedDataRows individual, dan bukan terhadap TypedDataTable.
Misalnya, Anda memiliki aturan berikut yang dibangun terhadap tabel "Pelanggan":
IF Northwind.Customers.CustomerID = 001
THEN Northwind.Customers.ContactTitle = "Purchasing Manager"
Nota
Untuk membuat aturan terhadap tabel database, Anda harus menggunakan Tabel/baris data sebagai jenis pengikatan database.
Misalkan Anda menyatakan DataTable berikut dengan tiga DataRows ke dalam mesin (sebagai TypedDataTable).
| ID Pelanggan | JudulKontak |
|---|---|
| 001 | Petugas Pasokan |
| 002 | Petugas Pasokan |
| 003 | Petugas Pasokan |
Mesin menyisipkan tiga TypedDataRows: 001, 002, dan 003.
Setiap TypedDataRow dievaluasi secara independen terhadap aturan. TypedDataRow pertama memenuhi kondisi aturan dan dua kedua gagal. Hasilnya muncul sebagai berikut.
| ID Pelanggan | Judul Kontak |
|---|---|
| 001 | Manajer Pembelian |
| 002 | Petugas Pasokan |
| 003 | Petugas Pasokan |
Nota
TypedDataRows juga dapat langsung dimasukkan ke dalam mesin. Ini diproses dengan cara yang sama seperti yang dijelaskan sebelumnya.
DataSetName.DataTableName dianggap sebagai pengidentifikasi unik. Oleh karena itu, jika TypedDataTable kedua dinyatakan dengan nama Himpunan Data dan nama DataTable yang sama, nama DataTable menggantikan TypedDataTable pertama. Semua TypedDataRow yang terkait dengan TypedDataTable pertama dicabut, dan TypedDataTable kedua ditetapkan.
Koneksi Data
Seperti halnya TypedDataTable, menggeser tabel atau kolom sebagai argumen aturan dalam Komposer Aturan Bisnis menghasilkan aturan yang dibangun berdasarkan TypedDataRows yang dikembalikan, bukan terhadap DataConnection itu sendiri.
Misalkan aturan berikut dibuat dan DataConnection dinyatakan berisi SqlConnection ke Northwind.Customers:
IF Northwind.Customers.CustomerID = 001
THEN Northwind.Customers.ContactTitle = "Purchasing Manager"
Saat mesin mengevaluasi aturan yang digunakan di bagian TypedDataTable , mesin secara dinamis membangun kueri yang terlihat seperti:
SELECT *
FROM Northwind.Customers
WHERE CustomerID = 1
Karena hanya satu baris dalam database yang memenuhi kriteria ini, hanya satu TypedDataRow yang dibuat dan ditegaskan ke dalam mesin untuk pemrosesan lebih lanjut.
Ringkasan Entitas dan Jenis Instans yang Dinyatakan
Tabel berikut ini meringkas perilaku pernyataan untuk berbagai jenis, menunjukkan jumlah instans yang dihasilkan yang dibuat di mesin untuk setiap entitas yang dinyatakan, serta jenis yang diterapkan ke masing-masing instans tersebut untuk mengidentifikasinya.
| Entitas | Jumlah instans yang dinyatakan | Jenis instans |
|---|---|---|
| Objek .NET | 1 (objek itu sendiri) | Kelas .NET yang Sepenuhnya Memenuhi Syarat |
| TypedXmlDocument | 1-N TypedXmlDocument(s): Berdasarkan pemilihan binding yang dibuat dan konten dokumen | JenisDokumen.Selector |
| TypedDataTable | 1-N BarisDataDiketik: Satu untuk setiap DataRow di DataTable |
DataSetName.DataTableName |
| TypedDataRow | 1 (TypedDataRow ditegaskan) | DataSetName.DataTableName |
| Koneksi Data | 1-N (satu untuk setiap TypedDataRow yang dikembalikan dengan mengkueri DataConnection) | DataSetName.DataTableName |