Proyek Blazor Server #7: Panduan Praktis Membuat Halaman Master-Detail

Implementasi operasi CRUD untuk relationship 1:N & M:N dan navigasi dinamis menggunakan rute berparameter

M. Ramadhan
Telematika
18 min readSep 19, 2021

--

Daftar isi

  • Tinjauan Sekilas
  • Implementasi Halaman Master-Detail
    (1) Membuka proyek BookApp
    (2) Membuat basis data BookDB
    (3) Menambahkan antarmuka dan metode
    (4) Membuat file komponen ListBookPerPub.razor
    (5) Membuat file komponen ListBookPerAuthor.razor
    (6) Memodifikasi rute dan navigasinya
  • Bagaimana Cara Kerjanya?
  • Penutup
  • Daftar Pustaka
Photo by Ying Ge on Unsplash

Ini adalah tulisan ketujuh dari serangkaian artikel yang membahas Proyek Server Blazor :
(1) CRUD untuk tabel tunggal menggunakan Dapper.
(2) Implementasi drop-down list pada operasi CRUD.
(3) Penerapan checkbox list pada operasi CRUD.
(4) Memahami perutean dan navigasi URL.
(5) Membuat dan menggunakan tata letak halaman.
(6) Membuat komponen dialog modal reusable.
(7) Panduan praktis untuk membuat halaman master-detail.

Artikel ditujukan bagi siapa pun yang ingin mempelajari cara membuat aplikasi Blazor Server dengan pendekatan praktis melalui contoh proyek. Hal ini akan lebih mudah jika Anda memiliki sedikit pengalaman dengan C#, HTML, CSS, dan SQL.

Semua pembahasan berikut berdasarkan kode sumber di artikel sebelumnya, Proyek Blazor Server #6 . Silahkan download source codenya melalui link di bawah ini.

Tinjauan Sekilas

CRUD (Create, Read, Update, Delete) adalah fitur yang harus ada pada aplikasi yang menggunakan basis data. Pada artikel sebelumnya, kita telah membahas bagaimana mengimplementasikan operasi CRUD yang melibatkan:
(1) hanya satu tabel
(2) dua tabel dengan relationship N:1
(3) tiga tabel dengan relationship M:N.

Aplikasi yang telah dibangun menggunakan basis data berdasarkan ERD berikut.

Gambar 1 ERD dari perpustakaan pribadi

Kali ini kita akan membahas cara membuat dua halaman master-detail:

  • Daftar buku per penerbit sebagai implementasi dari relationship 1:N, Publisher-publishes-Book .
  • Daftar buku per penulis sebagai implementasi dari relationship M:N, Author-writes-Book.

Daftar buku per penerbit

Gambar 2 Master-detail daftar buku per penerbit
  • Secara default, opsi dalam drop-down list adalah [All]; semua buku yang ada ditampilkan dalam daftar.
  • Anda dapat menampilkan daftar buku dari penerbit tertentu dengan memilih penerbit dari drop-down list.

Daftar buku per penulis

Versi pertama

Gambar 3 Versi pertama daftar buku per penulis

Kedua buku dalam daftar di atas menampilkan hanya seorang pengarang, padahal keduanya ditulis oleh dua orang penulis. Relationship M:N tidak terlihat pada gambar di atas.

Versi kedua

Gambar 4 Versi kedua daftar buku per penulis

Versi kedua menjelaskan hubungan M:N dengan lebih jelas. Seorang penulis dapat menulis banyak buku; sebaliknya, satu buku dapat ditulis oleh banyak penulis. Jadi kita akan membuat yang ini.

Implementasi Halaman Master-Detail

(1) Membuka proyek BookApp

  • Klik kanan file BookApp.sln, yaitu salah satu file yang telah Anda unduh sebelumnya.
Gambar 5 Membuka aplikasi BookApp
  • Klik menu Open untuk membuka aplikasi BookApp.

(2) Membuat basis data BookDB

(a) Membuka jendela SQL Server Object Explorer

Gambar 6 Membuka jendela SQL Server Object Explorer
  • Klik menu: View|SQL Server Object Explorer
  • Lihat jendela SQL Server Object Explorer. Jika basis data BookDB sudah ada, lanjut ke langkah (3). Jika belum ada, lakukan langkah berikut.

(b) Membuka dan mengeksekusi BookDB.sqlfile

Gambar 7 Membuka dan mengeksekusi file BookDB.sql
  • Di jendelaSolution Explorer, klik BookDB.sqluntuk membuka file skrip SQL.
  • Klik tombol untuk menjalankan seluruh skrip SQL dalam file BookDB.sql.
Gambar 8 Koneksi server
  • Pilih server Anda, klik tombol Connect.
Gambar 9 Me-refresh untuk menampilkan basis data BookDB dalam daftar
  • Di jendela SQL Server Object Explorer, klik kanan Databases, lalu klik Refresh.
Gambar 10 Objek basis data BookDB

(3) Menambahkan antarmuka dan metode

  • Tambahkan antarmuka berikut ke dalam file IBookService.cs.
  • Tambahkan kode berikut ke dalam file BookService.cs.
  • Metode ListPerPub() memberikan daftar buku yang diterbitkan oleh sebuah penerbit.
  • Metode ListPerAuthor() menghasilkan daftar buku yang ditulis oleh seorang penulis.
  • Metode CountBookPerPub() menghitung jumlah buku yang diterbitkan oleh suatu penerbit.
  • Metode CountBookPerAuthor() menghitung jumlah buku yang ditulis oleh seorang penulis.

(4) Membuat file komponen ListBookPerPub.razor

Gambar 11 Menu yang dipilih untuk membuat file komponen Razor
  • Di dalam jendela Solution Explorer, klik kanan folder Page .
  • Pilih submenu: Add|Razor Component...
Gambar 12 Membuat file komponen ListBookPerPub.razor
  • Klik Razor Component.
  • Di dalam kotak teks Name, ketikkan ListBookPerPub.razor sebagai nama file komponen.
  • Klik tombol Add.
Gambar 13 File ListBookPerPub.razor di dalam folder Halaman
  • Klik ListBookPerPub.razor untuk membuka file.

Berdasarkan Gambar 3, bagian master adalah penerbit, dan detailnya adalah daftar buku. Silakan salin kode di bawah ini dan tempel ke file ListBookPerPub.razor.

(5) Membuat file komponenListBookPerAuthor.razor

  • Sama seperti pada langkah (4), buat file komponen bernama ListBookPerAuthor.razor.
  • Berdasarkan Gambar 5 di atas, masternya adalah penulis, dan detailnya adalah daftar buku. Silahkan salin kode di bawah ini dan tempel ke dalam file ListBookPerAuthor.razor.

(6) Memodifikasi rute dan navigasinya

Dalam proyek sebelumnya, file AddBook.razor dan EditBook.razor hanya dipanggil oleh ListBook.razor. Lihat gambar berikut.

Gambar 14 AddBook.razor dan EditBook.razor dipanggil oleh satu-satunya komponen

Navigasi menggunakan rute statis, seperti yang ditunjukkan pada gambar berikut.

Gambar 15 Navigasi menggunakan rute statis

Dalam proyek ini, halaman AddBook.razor dan EditBook.razor — dipanggil oleh ListBook.razor, ListBookPerPub.razor, dan ListBookPerAuthor.razor.

Gambar 16 AddBook.razor dan EditBook.razor dipanggil oleh tiga komponen

Jadi kita harus memodifikasi rute dan navigasi di kedua file komponen, AddBook.razor dan EditBook.razor. Kali ini, seperti yang ditunjukkan pada kode di bawah ini, kita menggunakan rute berparameter untuk bernavigasi secara dinamis.

AddBook.razor

EditBook.razor

Kode yang dimodifikasi dicetak tebal.

Bagaimana Cara Kerjanya?

Daftar buku per penerbit

Gambar 17 Secara default, semua buku yang ada ditampilkan dalam daftar
  • Klik menu Book/Publisher untuk membuka halaman ListBookPerBook.razor.
  • Secara default, opsi dalam drop-down list adalah [All]; semua buku yang ada ditampilkan dalam daftar.

(1) Membuka halaman

Gambar 18 Kode untuk membuka halaman ListBookPerBook.razor

Halaman dibuka melalui komponen NavMenu.razor menggunakan rute /listBookPerPub.

(2) Membuat drop-down list dan mengatur opsi default ke [All]

Gambar 19 Kode untuk membuat drop-down list dan mengatur opsi default ke [All]
  • Ketika halaman ListBookPerPub.razor dibuka, aplikasi memanggil metode OnInitializedAsync(), mengeksekusi skrip SQL dalam metode FetchAll() dan menyimpan hasilnya dalam variabel publishers.
  • Melalui pengikatan data satu arah, drop-down list di blok HTML secara otomatis berisi data sesuai dengan hasil pemrosesan di blok kode.
  • Menyetel opsi default ke [All] diperoleh melalui pernyataan pada baris 201 dalam file ListBookPerBook.razor:
    private int idPubFilter = All;

(3) Menampilkan semua buku yang ada

Gambar 20 Kode untuk menampilkan semua buku yang ada ke dalam daftar

Secara default, opsi dalam drop-down list adalah [All]; semua buku yang ada ditampilkan dalam daftar.

  • Aplikasi memanggil metode InitializedAsync() dan mengeksekusi skrip SQL dalam metode ListAll() dalam file BookService.cs.
  • Melalui pengikatan data satu arah, blok HTML secara otomatis menampilkan detail daftar buku (jika ada) sesuai dengan hasil pemrosesan blok kode. Jika tidak, pesan No Records to display ditampilkan.

(4) Menampilkan daftar buku penerbit

Gambar 21 Daftar buku suatu penerbit
  • Pilih sebuah penerbit dari drop-down list untuk menampilkan daftar bukunya.
Gambar 22 Kode untuk menampilkan daftar buku suatu penerbit
  • Memilih penerbit dari drop-down list akan memunculkan event onchange yang memanggil properti IdPubFilter.
  • Properti IdPubFilter menyetel field idPubFilter dan memanggil metode InitalizedAsync yang mengeksekusi skrip SQL dalam metode ReadByPk dan ListPerPub.
  • Melalui pengikatan data satu arah, blok HTML menampilkan kota dan negara penerbit yang dipilih. Secara otomatis menampilkan detail daftar buku (jika ada) sesuai dengan hasil pemrosesan di blok kode. Jika tidak, muncul pesan No Records to display.

Daftar buku per penulis

Gambar 23 Daftar buku seorang penulis

Cara kerjanya mirip dengan daftar buku per penerbit. Di bagian master, penerbit digantikan oleh penulis. Di bagian detail buku ini, ada sedikit perbedaan dalam skrip SQL. Dalam daftar buku per penulis , skrip SQL tidak hanya menggunakan outer join tetapi juga subquery.

Gambar 24 Metode ListPerPub dan ListPerAuthor

Penutup

Dalam artikel ini, telah dibahas bagaimana cara membuat dan mengimplementasikan halaman master-detail.

  1. Daftar buku per penerbit sebagai implementasi relationhip 1:N. Bagian master menampilkan penerbit, dan bagian detail berisikan daftar bukunya.
  2. Daftar buku per penulis sebagai implementasi relationhip M:N. Bagian master menampilkan penulis, dan bagian detail berisikan daftar bukunya.

Selain itu, telah dijelaskan pula bagaiman menerapkan navigasi dinamis menggunakan rute berparameter.

Semoga berfaedah.

--

--

M. Ramadhan
Telematika

I’m a database designer and developer, childhood in Menggala, living in Palembang.