PHPMaker ternyata cukup cerdik dalam memanfaatkan sebuah halaman yang dibangkitkan olehnya. Contoh, halaman View yang awalnya dibuat untuk menampilkan sebuah Record dalam satu halaman, bisa digunakan juga untuk menampilkan data Master dan Detail sekaligus, atau lebih dikenal dengan istilah Master/Detail View. Di bagian atas data Master dalam layout View, dan di bagian bawah data Detail dalam layout tabel.
Di halaman Master/Detail View ini juga bisa terdapat beberapa link atau tombol yang berfungsi untuk membuka halaman Add, Edit, dan Delete. Di sinilah timbul tantangan yang cukup mengasyikkan bagi Web Developer yang menggunakan PHPMaker. Tantangan itu adalah, bagaimana caranya kita dapat membuat dua kondisi yang berbeda dalam satu halaman View tersebut, tanpa harus melakukan usaha yang terlalu banyak. Masih bingung?
Contoh kasusnya seperti ini. Sering kali kita sebagai Web Developer harus menyesuaikan link Edit di halaman Master/Detail View (menampilkan Record Master di atas dan Detail di bawahnya), sedangkan di halaman View (menampilkan satu Record Master), link Edit tetap menggunakan yang aslinya. Masih bingung juga?
Mari kita ambil contoh kasus sederhana menggunakan project demo. Katakanlah di halaman Master/Detail View yang menampilkan data orders di bagian atas dan data orderdetails di bagian bawah, kita ingin mengubah link Edit, sedangkan jika halaman View yang hanya menampilkan data orders saja, maka link Edit menggunakan link aslinya (tidak diubah). Sudah mulai ada gambaran?
Nah, mengimplementasikan hal tersebut, maka kita cukup menaruh kode PHP berikut ke dalam server event Page_Render yang terdapat di bawah lokasi Server Events -> Table-Specific -> View Page, sehingga kode selengkapnya menjadi seperti ini:
// Page Render event function Page_Render() { //echo "Page Render"; if ($this->getCurrentDetailTable() <> "") { $options = &$this->OtherOptions; $option = &$options["action"]; $item = &$option->Add("edit"); $item->Body = '<a class="btn btn-default ewAction ewEdit" title="'.Language()->Phrase("Edit").'" data-caption="'.Language()->Phrase("Edit").'" href="yourpage.php"><span data-phrase="ViewPageEditLink" class="icon-edit ewIcon" data-caption="'.Language()->Phrase("Edit").'"></span></a>'; // sesuaikan yourpage.php } }
Mari simak kode barusan. Untuk memastikan halaman View tersebut adalah Master/Detail View, maka kita cukup menggunakan method getCurrentDetailTable milik object Table atau Page dari halaman View, dan jika hasilnya mengembalikan String yang tidak kosong, maka eksekusi kode untuk mengubah link Edit tersebut.
Seperti kode PHP di beberapa artikel saya sebelum ini, kode di atas memiliki persamaan, yaitu untuk menyesuaikan link Edit, maka kita mengoptimalkan object OtherOptions yang di dalamnya memiliki pilihan action dan nama item-nya adalah edit.
Sedangkan untuk mengubah link Edit, maka kita cukup menyesuaikan nilai dari property Body milik item edit tadi.
Betapa mudah dan cepatnya, bukan? 😀
Pak Masino, artikel ini hampir menjawab kasus saya. Tapi saya ingin memanipulasi tombol Master/Detail Copy supaya menjalankan aksinya seperti biasa yaitu meng-copy record tapi berpindah ke table yang lain.
Jelasnya:
Master/Detail dari Proforma Invoice yg terpilih -> dicopy ke table Master/Detail Real Invoice dengan otomatis diberi nomer invoice baru.
Atas bantuannya terimakasih
Sudah saya jawab di topik diskusi ini: Copy Master Detail to another table.
Ooohhh makasih pak, saya lanjut disana aja kalo gitu 🙂
Oke, sama-sama.
Untuk kasus saya, coba solusi ini sy pasang di Add > Startup Script. Tapi panggil function itu kok tidak jalan ya pak? syntaxnya gmn ya? thx
$(“input[name=’x_Is_Proforma’]”).change(function() { // Assume Field1 is a text input
if (this.value == “Y”) {
$(this).fields(“Sales_Number”).value(” “); // Set value to FieldA
} else if (this.value == “N”){
var next = GetNextSalesNumber();
$(“#x_Sales_Number”).val(next);
}
});
Lalu apa kaitannya dengan artikel di atas?
Saya mencari di help dan gugel, tapi belum ketemu. Mohon idenya pak, bagaimana agar seorang karyawan bisa mengedit data yg dia masukkan, tapi data itu baru terupdate setelah di ok atau di approve oleh atasannya.
Trims pak
Sudah saya jawab juga di topik diskusi ini: Employee could update data after approved by their boss.
lho, mobhar itu rupanya pak masino ya? matur nuwun pak ilmunya,hehehe
Lho, baru tau ya? Kemana aja selama ini? Hehehe… 🙂
mohon saran pak Masino. Kalo ingin tabel detail masuk dalam salah satu tab di master baik edit delete maupun add. Apa harus di buat sebagai VIEW seperti cara diatas pak ? Kalo berupa view, insert data di 1 item master dengan banyak detail masih bisa pak ? terimakasih sebelumnya
Iya benar. Bisa dengan membuat database view, lalu database view tadi dijadikan sebagai detail table-nya.
tapi kalo jadi view. tab dari tabel detail tak bisa add data ? saya kasusnya seperti ini bang. bagaimana pada akhirnya itu kasus bisa done ? https://www.hkvforums.com/viewtopic.php?t=41138
Tergantung dengan database view-nya. Jika database view hanya mengandung satu table saja, dan di project PHPMaker sudah ada Primary Key-nya, seharusnya database view tersebut bisa dilakukan operasi add/edit/delete.
Hallo pak masino
izin bertanya, apakah bisa master detail view ketika add tampilannya itu add page,
kalo saat ini kan kalo kita buat master detail itu tampilannya grid add
Terima Kasih
Tidak bisa, kalau menggunakan link bawaan dari generate kode PHPMaker.
Kalau mau ubah, gunakan server event Page_Render seperti kode di atas, sesuaikan link-nya supaya diarahkan ke halaman Add page untuk menambahkan per satu record.