Dalam berbagai aplikasi, sering kali ada kebutuhan untuk mengimplementasikan representasi objek secara hierarkis. Biasanya, ini digunakan untuk mengklasifikasikan mereka dengan menentukan grup. Grup-grup ini membentuk pohon kedalaman dinamis, yang kemudian digunakan untuk navigasi, agregasi data, dan pengaturan parameter.
Pada artikel ini, saya akan menunjukkan bagaimana logika ini dapat diimplementasikan di platform
lsFusion terbuka dan gratis.
Sebagai contoh, mari kita ambil logika sederhana di mana Anda perlu mengimplementasikan logika produk yang dikelompokkan ke dalam kelompok tertentu yang membentuk hierarki kedalaman dinamis. Dalam hal ini, barang dapat diikat ke simpul menengah dari pohon.
Pertama, sesuai dengan skema standar, nyatakan entitas
grup Produk sebagai kelas rata sederhana dengan formulir pengeditan dan daftar:
Sekarang mari kita membuat hierarki dari grup. Untuk melakukan ini, kami memperkenalkan properti yang akan berisi tautan ke grup induk:
Selanjutnya, kami membuat properti yang secara rekursif akan menentukan hubungan antara dua grup:
Pada prinsip apa operator
RECURSION bekerja , saya tidak akan menjelaskan dalam artikel ini, tetapi properti
level akan mengembalikan 2 ke tingkat "panjang jalur antara
anak dan
orang tua di pohon directional yang sesuai".
MATERIALISASI menunjukkan bahwa platform harus menyimpannya dalam tabel terpisah, di mana untuk setiap pasangan node yang terhubung akan ada catatan terpisah dengan nilai
level di kolom terkait. Dengan perubahan apa pun dalam struktur pohon, tabel ini akan secara otomatis dihitung ulang.
Misalnya, untuk pohon seperti itu:
Tabelnya akan terlihat seperti ini:
Di dalamnya,
key0 adalah kode turunan, dan
key1 adalah kode induk. Jumlah entri dalam tabel ini kira-kira sama dengan jumlah grup dikalikan kedalaman rata-rata pohon. Skema penyimpanan seperti itu akan berguna karena jika Anda perlu menghitung semua keturunan grup, Anda tidak perlu menggunakan permintaan CTE, tetapi Anda dapat menggunakan GABUNGAN biasa untuk tabel ini.
Selanjutnya, berdasarkan pada properti yang dibangun, nama kanonik grup dapat dihitung:
Sebagai contoh, untuk kelompok
Susu pada gambar di atas, nama kanonik
adalah Semua / Bahan Makanan / Susu / Susu .
CHARWIDTH ditentukan untuk memberi tahu platform berapa lebar yang digunakan untuk properti ini (dalam karakter) saat membangun antarmuka.
Sekarang kita akan memperluas formulir untuk melihat dan mengedit grup dengan properti yang baru dibuat:
Formulir dengan daftar grup dalam bentuk datar akan terlihat seperti ini:

Setelah logika grup selesai, tambahkan entitas
Produk :
Buat tautan produk ke grup produk tempat ia berada:
Akhirnya, kita akan membuat formulir untuk memasukkan barang, di mana akan ada dua elemen: pohon kelompok dan daftar barang. Untuk grup pohon yang dipilih, hanya produk yang merupakan turunan dari simpul yang dipilih yang akan ditampilkan dalam daftar. Pertama, deklarasikan formulir dan tambahkan pohon ke dalamnya dengan daftar grup:
Menggunakan perintah
TREE , pohon dibuat dari objek kelas
Grup , hierarki yang ditentukan oleh properti
induk yang dibuat sebelumnya.
Tambahkan formulir ke navigator:
Dalam contoh ini, input dan pengeditan barang akan dilakukan tidak melalui dialog terpisah, tetapi langsung dalam bentuk itu sendiri. Untuk melakukan ini, buat tindakan untuk membuat produk dengan referensi ke grup yang dipilih:
Sekarang, pada formulir yang dibuat sebelumnya, tambahkan daftar produk dengan kolom yang dapat diedit:
Lempar tombol form untuk menambah dan menghapus barang:
Karena tindakan
newProduct didefinisikan untuk grup produk, itu harus ditentukan secara eksplisit bahwa itu harus ditambahkan ke toolbar dengan daftar produk (p).
Masih mengkonfigurasi desain sehingga pohon ditampilkan di sebelah kiri, dan daftar produk di sebelah kanan, dan di antara mereka ada pemisah, yang dengannya Anda dapat mengubah ukuran objek:
Bentuk akhir akan terlihat seperti ini:

Setelah hierarki produk dan grup dibuat, sering kali ada kebutuhan untuk mengatur beberapa parameter di salah satu level. Selain itu, semakin rendah hierarki yang ditentukan, semakin tinggi nilainya. Misalnya, jika grup
Dairy diatur ke 30, dan grup
Milk diatur ke 20, maka yang terakhir harus dipilih.
Misalkan Anda ingin mendefinisikan opsi
premium dengan cara ini. Untuk melakukan ini, pertama buat properti yang sesuai untuk grup:
Untuk menemukan nilai yang diinginkan, cukup gunakan pengelompokan dengan pilihan nilai terakhir:
Diterjemahkan ke dalam bahasa biasa, ungkapan ini menemukan (
GROUP )
markup terakhir (
TERAKHIR ) di grup atas (
induk Grup ), dalam mengurangi urutan jarak ke sana (
level ORDER DESC (anak, orangtua) ), yang untuk markup ini diberikan (
marka WHERE (orang tua) ). Di sini saya ingin mencatat bagaimana lsFusion sesuai dengan bahasa alami.
Tambahkan properti yang dibuat di atas ke bentuk produk di pohon grup:
Misalkan ada kebutuhan untuk menetapkan premi langsung untuk suatu produk, dan itu harus lebih tinggi daripada premi untuk grup. Untuk melakukan ini, pertama buat properti utama untuk produk:
Kemudian kami mendeklarasikan properti yang akan mengembalikan premi dari produk, jika ditentukan, atau premi dari grup:
Setelah itu, tambahkan kedua properti ke formulir:
Mekanisme untuk menetapkan premi untuk grup dan produk akan terlihat seperti ini:

Kesimpulan
Pada artikel di atas, kami dapat membuat logika barang, menggabungkannya ke dalam kelompok dengan hierarki kedalaman dinamis, dan juga memberikan pengguna kemampuan untuk menetapkan premi di tingkat mana pun. Semua ini membutuhkan sekitar 70 baris kode yang signifikan. Anda dapat mencoba cara kerjanya secara online, serta membuat perubahan pada kode di
bagian situs yang sesuai (tab Platform). Berikut ini seluruh kode sumber yang harus Anda tempel ke bidang yang sesuai:
Templat yang dijelaskan di atas dapat dimodifikasi dan digunakan dengan berbagai cara dengan menambahkan parameter tambahan ke properti. Misalnya, dalam satu implementasi
sistem ERP, premi untuk grup dan barang ditetapkan dengan cara ini tidak secara global, tetapi secara terpisah untuk setiap jenis harga. Selain itu, implementasi dalam kompleksitas tidak berbeda dengan contoh yang dijelaskan di atas.