Quantcast
Channel: Masino Sinaga
Viewing all 176 articles
Browse latest View live

Menghindari Error Invalid field name Saat Import Data di Aplikasi Web pada PHPMaker 2021

$
0
0

Pernah mengalami error saat meng-import data dari file CSV dengan pesan error Invalid field name: {namafield}? Bingung bagaimana cara mengatasinya?

Hohoho… Sekarang Anda tidak perlu bingung-bingung lagi, karena berikut ini tips sederhana untuk mencegah error tersebut terjadi.

Jika Anda meng-import data dari file CSV pada Aplikasi Web yang sudah di-generate oleh PHPMaker 2021, maka pastikan di baris pertama atau paling atas pada file CSV tersebut adalah nama field.

Setelah itu, pastikan lagi antara nama field yang satu dengan nama field berikutnya tidak dipisahkan dengan karakter spasi.

Karena jika antara nama field yang dipisahkan oleh karakter pemisah koma tadi mengandung spasi, maka akan menimbulkan error Invalid field name: ….

Supaya tidak bingung, saya akan berikan contoh data di file CSV yang bisa menimbulkan error tadi:

Kode, Status_Data,Harga,Deskripsi,Tanggal
ABC123,Y,1000,Ganti bahan dasar,01/05/2021
ZEF212,N,,,01/05/2021
ZAS111,N,,,01/05/2021
ZDF321,Y,250,,01/05/2021
SED222,Y,,Menunggu persetujuan,01/05/2021

Sekarang mari fokus untuk memperhatikan baris paling atas, yaitu:

Kode, Status_Data,Harga,Deskripsi,Tanggal

Perhatikanlah bawah setelah field Kode terapat karakter koma, lalu diikuti karakter spasi. Nah, karakter spasi itulah yang akan menimbulkan error Invalid field name: Status_Data. Kok bisa?

Karena dalam hal ini sistem akan menganggap bahwa nama field kedua adalah ” Status Data”, dan bukan “Status_Data”. Sudah tahu dimana bedanya? Ya, betul jika Anda menjawab terdapat karakter spasi sebelum huruf S.

Jadi, supaya tidak error, maka hapus karakter spasi yang terdapat antara nama field yang satu dengan lainnya pada baris pertama di file CSV tersebut.

Selengkapnya, baris pertama menjadi seperti ini:

Kode,Status_Data,Harga,Deskripsi,Tanggal

Solusi sederhana yang jika tidak diperhatikan, akan menyebabkan kebingungan, karena tidak tahu apa sebenarnya penyebab error tersebut. Sekarang kita sudah sama-sama tahu, sehingga bisa diantisipasi sedini mungkin.


Mengimport Data dari File CSV dan Menyimpan Nilai Null di Database dari PHPMaker 2021

$
0
0

Sekarang sudah jamannya pekerjaan dibikin serba mudah dan cepat. Termasuk entri data. Kalau dulu data dientri satu per satu ke dalam aplikasi. Sedangkan kalau sekarang, data sudah bisa dimasukkan sekaligus ke sistem, tanpa harus melalui proses entri satu per satu.

Import Data adalah fitur yang sering digunakan untuk mengatasi pekerjaan entri data yang sering kali cukup membosankan bagi sebagian besar Pengguna. Dengan menggunakan Import Data, maka waktu pekerjaan dapat dihemat, karena hanya dengan beberapa kali klik saja, data yang jumlahnya ratusan atau ribuan bisa langsung sekali masuk ke database.

Kalau dulu proses Import Data biasanya dilakukan oleh Pengguna dengan akses level admin atau si Developer itu sendiri, maka sekarang Import Data bisa diserahkan kepada Pengguna akhir. Lalu bagaimana dengan urusan validasi data? Serahkan saja kepada sistem!

Di artikel ini kita akan membahas lebih dalam lagi fitur Import Data melalui Aplikasi Web. Tentu saja Aplikasi Web yang di-generate oleh PHPMaker 2021. Untuk diketahui saja, fitur Import Data sudah disediakan oleh PHPMaker sejak versi 2019. Sampai dengan PHPMaker versi 2021, fitur tersebut pun masih ada.

Di artikel ini kita akan belajar bagaimana cara menangani data yang terdapat di file CSV, tanpa dilengkapi karakter quote yang mengapit setiap field, lalu seperti apa penanganannya di PHPMaker 2021.

Selain itu, kita juga akan sama-sama belajar, bagaimana cara mengimport nilai kosong di suatu field untuk tipe data numerik, dan seperti apa penanganan dari PHPMaker 2021, supaya data yang tersimpan di database adalah NULL.

Sekarang mari kita mulai dengan membuat sebuah database baru di MySQL, lalu jalankan script SQL berikut untuk membuat sebuah table baru yang bernama AccidentSurvey:

CREATE TABLE AccidentSurvey (
    SurveyID INT(11) NOT NULL AUTO_INCREMENT,
    RegNum VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
    Damaged VARCHAR(40) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
    RepairCost INT(11) NULL DEFAULT NULL,
    RepairDescription LONGTEXT NULL DEFAULT NULL COLLATE 'utf8_general_ci',
    SurveyDate DATE NULL DEFAULT NULL,
    PRIMARY KEY (SurveyID) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT
AUTO_INCREMENT=1;

Kemudian buatlah sebuah project baru di PHPMaker 2021, lalu pastikan sudah terhubung dengan database dan table di atas. Setelah itu, pastikan kita sudah mengaktifkan opsi Import yang terdapat di Table setup -> List Page.

Berikutnya kita akan membuat contoh data di file CSV yang akan digunakan untuk meng-import data tersebut ke table tadi. Copy-paste data ini ke dalam Notepad atau Notepad++ lalu simpan dengan nama file accident_survey.csv:

RegNum,Damaged,RepairCost,RepairDescription,SurveyDate
ABC123,Y,1000,Replace front doors and left wing,01/05/2021
ZEF212,N,,,01/05/2021
ZAS111,N,,,01/05/2021
ZDF321,Y,250,,01/05/2021
SED222,Y,,Awaiting full estimate,01/05/2021

Sekarang mari kita perhatikan data di file .csv ini. Di sana tidak kita temukan karakter quote yang mengapit nilai di setiap field atau kolom. Selain itu, terdapat data yang kosong di field RepairCost dan RepairDescription.

Pertanyaan selanjutnya, bagaimana cara kita menangani data yang tidak diapit oleh karakter quote tadi?

Jawabannya sangatlah mudah. Pastikan kita sudah mengosongkan pengaturan Import from CSV quote character dari menu Tools -> Advanced Settings. Nilai default pengaturan ini adalah “, yang artinya karakter quote yang digunakan adalah petik ganda.

Untuk mengatasi data yang tidak diapit sama sekali oleh karakter quote tadi, maka pastikan kita sudah mengosongkan pengaturan Import from CSV quote character tersebut. Sampai di sini, kita sudah berhasil menangani data yang tidak diapit oleh karakter quote dari PHPMaker 2021.

Selanjutnya, bagaimana cara meng-import data yang tipenya numerik di table AccidentSurvey untuk selanjutnya disimpan ke table tersebut dengan nilai NULL?

Jawabannya pun sangatlah mudah. Cukup dengan memasukkan sedikit kode berikut ke dalam server event Row_Import yang terdapat di bawah halaman List, sehingga kode selengkapnya menjadi seperti ini:

// Row Import event
function Row_Import(&$row, $cnt)
{
    //Log($cnt); // Import record count
    //var_dump($row); // Import row
    //return false; // Return false to skip import

    $date = strtotime(str_replace('/', '-', $row["SurveyDate"])); // timpa separator tanggal dari / ke -
    $row["SurveyDate"] = date("Y-m-d", $date); // supaya data tanggal tersimpan dengan format yyyy-mm-dd
    if (is_null($row["RepairCost"])) { 
        $row["RepairCost"] = 0; // pastikan untuk data kosong, simpan nilai nol ke database
    }
    return true;
}

Kode di atas berfungsi untuk memvalidasi sekaligus mengubah format tanggal menjadi yyyy-mm-dd. Selain itu, memeriksa jika tidak ada data pada kolom RepairCost, maka simpan nilai 0 ke database. Jika nilai 0 ini tidak kita tangani, maka sistem akan menampilkan pesan error saat proses import data berlangsung.

Pertanyaan selanjutnya, lalu bagaimana cara untuk mengubah nilai 0 di field RepairCost pada database menjadi NULL?

Jawabannya pun lagi-lagi sangatlah mudah dan cepat. Cukup masukkan sebaris kode berisi perintah SQL UPDATE ke dalam server event Page_Imported, sehingga kode selengkapnya di server event tersebut menjadi seperti ini:

// Page Imported event
function Page_Imported($reader, $results)
{
    //var_dump($reader); // Import data reader
    //var_dump($results); // Import results
    ExecuteUpdate("UPDATE accidentsurvey SET RepairCost = NULL WHERE RepairCost = 0"); // update 0 menjadi null
}

Nah, kode di server event Page_Imported itu berfungsi untuk mengubah semua nilai 0 pada field RepairCost menjadi NULL di database. Server event ini dijalankan jika semua baris di file .csv tadi sudah selesai diproses.

Dari sini kita dapat mengambil kesimpulan bahwa kita tidak dapat langsung mengeset atau menugaskan nilai NULL ke field RepairCost di server event Row_Import tadi, karena jika itu kita lakukan, maka akan menimbulkan error saat proses import data dilakukan.

Solusinya, kita tugaskan terlebih dulu nilai 0 (nol) ke field tersebut di server event Row_Import, lalu setelah semua baris data selesai di-import, kita cukup meng-update nilai 0 tadi menjadi NULL di server event Page_Imported.

Betapa mudah dan cepatnya bukan? Bayangkan! Hanya dengan sedikit kode itu saja, kita sudah bisa meng-import data dengan business-logic yang bisa kita tentukan sendiri di kedua server event tersebut pada PHPMaker 2021.

Begini Cara Supaya Tag HTML Bisa Tersimpan di Aplikasi Web dari PHPMaker 2021

$
0
0

Kadang-kadang kita ingin menyimpan data di suatu field yang mengandung Tag HTML. Biasanya data seperti ini menggunakan tipe field Text atau Memo, dan sering kita temukan pada Aplikasi Web yang mengijinkan Pengguna Akhir menggunakan Tag HTML.

Contoh, Pengguna Akhir dapat menyisipkan Tag HTML untuk membuat table dengan Tag TABLE beserta baris dan kolom di dalam sebuah field masing-masing dengan Tag TR dan TD. Atau, mereka juga dapat membuat baris kosong dengan Tag BR atau membuat cetakan tebal dengan Tag BOLD, dan sebagainya.

Sampai dengan PHPMaker 2021, data yang mengandung Tag HTML, akan otomatis dihapus Tag-nya. PHPMaker 2021 menggunakan fungsi global yang bernama RemoveXss untuk menghapus XSS dari data yang akan disimpan ke database.

Jadi, sebelum data disimpan ke database, PHPMaker 2021 akan menghapus Tag HTML tersebut, sehingga hanya menyisakan data yang tanpa diapit oleh Tag HTML tadi. Tujuannya hanya satu yaitu demi alasan keamanan, untuk menghindari penyalahgunaan Tag HTML untuk menyerang Aplikasi Web tersebut.

Bagi yang belum tahu apa itu XSS, XSS merupakan singkatan Cross Site Scripting. XSS merupakan salah satu jenis serangan injeksi kode (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs.

Pertanyaannya, bagaimana jika kita memang mengijinkan Pengguna untuk menggunakan Tag HTML pada data di salah satu field saat entri data berlangsung? Sementara yang kita ketahui, PHPMaker 2021 akan otomatis menghapus Tag HTML tersebut, dengan menggunakan fungsi global RemoveXSS tadi?

Jangan khawatir, karena PHPMaker 2021 sudah memberikan solusi untuk mengatasi kondisi ini. Kita cukup menambahkan sebaris kode saja pada server event Page_Load milik halaman yang bertalian.

Katakanlah pada halaman Add, kita ingin mengijinkan supaya Pengguna Akhir dapat menambahkan Tag HTML pada field Data_Lengkap, maka cukup masukkan kode berikut ke dalam server event Page_Load di bawah Add Page:

$this->Data_Lengkap->Raw = true;

Kode di atas artinya kita menugaskan nilai true untuk property Raw milik field Data_Lengkap. Karena nilai-nya true, itu artinya field tersebut diijinkan untuk menyimpan data mentah (Raw = mentah) atau data asli yang di-input oleh Pengguna Akhir.

Jadi, dalam hal ini karena flag penanda untuk field ini sudah ditandai sebagai data mentah, maka Aplikasi Web tidak akan menggunakan RemoveXSS untuk menghapus Tag HTML pada field tersebut.

Betapa mudah dan simpel sekali, bukan? Hanya dengan satu baris kode itu saja, kita sudah dapat memberitahukan kepada sistem supaya tidak menghapus Tag HTML pada field tertentu.

Mudahnya Mengubah Teks Tooltip Secara Dinamis di Aplikasi Web dari PHPMaker 2021

$
0
0

Sudah tidak terhitung lagi keuntungan saat menggunakan PHPMaker 2021, yaitu versi terakhir saat artikel ini saya tulis. Satu per satu rahasia atau fitur tersembunyi di dalam PHPMaker akhirnya bisa terungkap.

Apakah itu fitur yang simpel, rumit, atau yang belum terpikirkan sama sekali, semuanya bisa kita kupas tuntas. Bahkan, yang belum pernah dibahas di forum atau tercantum di menu Help atau Bantuan PHPMaker pun, bisa kita buktikan bisa ditangani oleh PHPMaker 2021.

Ini semakin membuktikan lagi, bahwa betapa besarnya potensi PHPMaker untuk membangun Aplikasi Web. Web Developer terbukti dapat mengungkap fitur-fitur tersembunyi PHPMaker yang sungguh sayang jika tidak dieksplorasi.

Hari ini kita akan membahas satu lagi fitur tersembunyi di PHPMaker 2021. Kita akan belajar bagaimana mudahnya mengubah teks tooltip secara dinamis di Aplikasi Web yang dihasilkan oleh PHPMaker 2021.

O iya, buat yang belum tahu apa Tooltip, ini adalah tulisan yang muncul ketika kita menggeser kursor mouse ke suatu elemen tertentu di sebuah form atau halaman. Istilah ini sebenarnya sudah lumrah digunakan di lingkungan Web Development.

Katakanlah kita ingin menampilkan teks tertentu saat kursor mouse kita geser ke atas field Model di halaman Edit milik table Models, maka cukup masukkan kode berikut ke dalam server event Row_Rendering:

    if (CurrentPageID() == "edit") {
        Language()->setFieldPhrase("models", "Model", "FldTitle", "Tooltip baru untuk field Model di sini");
    }

Kita tidak menggunakan server event Row_Rendered seperti yang selama ini sering kita gunakan untuk memanipulasi data atau teks di suatu field. Khusus untuk mengubah teks Tooltip di suatu field, maka kita harus menggunakan server event Row_Rendering.

Cukup dengan memanggil method setFieldPhrase milik object Language, yang memiliki empat parameter di dalamnya.

Parameter pertama adalah nama table-nya, yaitu models, parameter kedua adalah nama field-nya, yaitu Model, parameter ketiga adalah FldTitle yang artinya Title Field, dan yang terakhir parameter keempat adalah teks Tooltip yang baru.

Setelah itu, pastikan untuk men-generate ulang semua file script dengan menggunakan PHPMaker 2021 seperti biasa. Lalu jalankan Aplikasi Web dari browser, login dengan username admin dan password master, kemudian ubah salah satu record di menu Models.

Saat Aplikasi Web menampilkan halaman/form Edit, sekarang geser kursor mouse ke atas control Textbox milik field Model, maka kita akan melihat Tooltip Tooltip baru untuk field Model di sini muncul.

Lagi-lagi, hanya dengan sedikit kode itu saja, kita sudah dapat menyesuaikan teks Tooltip secara dinamis. Hal ini sangat berguna jika kita ingin menentukan Tooltip suatu field di suatu halaman seperti Edit atau bisa juga halaman Add.

Semuanya cukup dilakukan dari dalam project PHPMaker 2021. Tidak perlu repot-repot mengubah kode di file script yang sudah dihasilkan oleh PHPMaker 2021.

Menghapus Teks pada Label Milik Checkbox di Halaman Grid-Edit dari PHPMaker 2021

$
0
0

Ada-ada saja memang permintaan Web Developer yang membangun Aplikasi Web dengan PHPMaker 2021. Suatu ketika ada yang ingin menghapus teks di Label Checkbox di halaman Grid-Edit.

Usut punya usut, Checkbox yang dimaksud merupakan item yang berasal dari sebuah Field yang menggunakan Lookup Table. Jadi, di dalam Field tersebut bisa memiliki lebih dari satu Checkbox, karena datanya berasal dari Lookup Table.

Nah, masing-masing Chekcbox tersebut memiliki teks atau tulisan yang ditampilkan pada elemen Label di sebelah kanan dari control Checkbox-nya. Yang ingin dihapus hanya teks di Label tersebut, sedangkan Checkbox-nya tidak boleh dihapus.

Yang menarik sekaligus tantangannya adalah, id dari setiap item Checkbox berubah-ubah selalu setiap kali halaman ditampilkan. Dengan kata lain, kita tidak dapat mengandalkan kode CSS untuk menghilangkan teks pada Label milik setiap Checkbox tadi berdasarkan id elemennya.

Tidak hanya itu saja. Teks di Label Checkbox tersebut hanya dihapus pada halaman Grid-Edit, yang sebenarnya menggunakan halaman List. Itu artinya, kita harus bisa memisahkan penanganan antara halaman List biasa dengan halaman Grid-Edit yang ditampilkan melalui halaman List.

Jika tidak kita tangani, ketika Pengguna menampilkan halaman List biasa (bukan Grid-Edit), maka informasi mengenai data mana saja yang tersimpan di database menjadi tidak kelihatan, alias blank.

Supaya tidak bingung, langsung saja kita praktekkan bersama-sama melalui contoh sebuah project PHPMaker 2021 yang menggunakan sebuah database MySQL yang di dalamnya memiliki 2 table.

Langkah pertama, silahkan buat sebuah database baru di MySQL, lalu jalankan script SQL berikut untuk menambahkan dua table beserta contoh data di dalamnya:

-- ----------------------------
-- Table structure for lookup
-- ----------------------------
DROP TABLE IF EXISTS `lookup`;
CREATE TABLE `lookup`  (
  `Code` int(11) NOT NULL,
  `Description` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`Code`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of lookup
-- ----------------------------
INSERT INTO `lookup` VALUES (1, 'One');
INSERT INTO `lookup` VALUES (2, 'Two');
INSERT INTO `lookup` VALUES (3, 'Three');

-- ----------------------------
-- Table structure for multiple_tags
-- ----------------------------
DROP TABLE IF EXISTS `multiple_tags`;
CREATE TABLE `multiple_tags`  (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Tags` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of multiple_tags
-- ----------------------------
INSERT INTO `multiple_tags` VALUES (1, '1');
INSERT INTO `multiple_tags` VALUES (2, '1,2');
INSERT INTO `multiple_tags` VALUES (3, '1,2,3');
INSERT INTO `multiple_tags` VALUES (4, '2,3');
INSERT INTO `multiple_tags` VALUES (5, '3');

Langkah kedua, buat sebuah project baru dari PHPMaker 2021, lalu pastikan sudah terhubung dengan database pada langkah pertama di atas.

Langkah ketiga, klik table multiple_tags dari panel Database, lalu klik tab Fields dan pilih field Tags. Pada panel Edit Tag, klik atau pilih control Checkbox, lalu aktifkan Use lookup table.

Langkah keempat, pada panel kanan yang bernama Lookup Table, pilih lookup dari Table name, pilih Code dari Link field, dan terakhir pilih Description pada Display field #1.

Langkah kelima, klik tab Table di sebelah kanan tab Fields, lalu aktifkan Grid Edit yang terdapat di bawah List Page.

Langkah keenam, tambahkan kode berikut ke dalam server event Lookup_Selecting milik table multiple_tags tadi:

    if ($fld->Name == "Tags" && $this->isGridEdit()) 
    	$fld->Lookup->setOptions(ExecuteRows("SELECT Code, ' ' AS Description FROM lookup")); 

Langkah ketujuh, pastikan generate semua file script seperti biasa menggunakan PHPMaker 2021.

Setelah itu, jalankan Aplikasi Web dari browser, lalu kli menu multiple_tags, maka Anda akan melihat halaman List dari table multiple_tags.

Sekarang klik tombol Grid-Edit di bagian bawah dari table tersebut di halaman List, lalu perhatikan data pada kolom Tags. Seharusnya sekarang Anda hanya melihat ada 3 control Checkbox tanpa teks Label di sebelah kanannya.

Wow, keren kan? Hanya dengan sedikit kode tersebut di server event Lookup_Selecting dan juga beberapa pengaturan pada level Fields dan Table, kita sudah dapat menghilangkan teks pada Label milik control Checkbox di halaman Grid Edit.

Tidak perlu menulis kode sampai berpuluh-puluh, beratus-ratus, atau bahkan beribu-ribu baris hanya untuk mengimplementasikan kebutuhan tadi. Sisanya sudah ditangani oleh PHPMaker 2021.

Alternatif Cara Mengeset Tooltip Lewat Custom Attribute di PHPMaker 2021

$
0
0

Benar-benar gila ini PHPMaker! Ada saja setiap hari ilmu yang bisa kita dapatkan saat menggunakan PHPMaker untuk membangun Aplikasi Web. Seperti yang satu ini, kita akan belajar bagaimana cara mengeset Tooltip lewat Custom Attribute di PHPMaker 2021.

Selain itu, kita juga akan belajar bagaimana cara membuat Tooltip yang bisa mendukung penggunaan multi bahasa. Hal ini sangat bermanfaat jika Aplikasi Web yang kita bangun dengan PHPMaker 2021 menggunakan lebih dari satu bahasa.

Kalau Anda sudah pernah membaca artikel Mudahnya Mengubah Teks Tooltip Secara Dinamis di Aplikasi Web dari PHPMaker 2021 yang saya tulis dua hari lalu, maka tulisan ini merupakan alternatif cara untuk mengeset Tooltip lewat Custom Attribute di Fields setup.

Fitur ini terdapat masing-masing di panel View Tag (untuk halaman List/View) dan Edit Tag (untuk halaman Add/Edit) di bawah pengaturan Fields pada project PHPMaker 2021.

Seperti namanya, Custom Attribute berarti attribute yang bersifat kostum yang dapat kita tambahkan tanpa harus mengedit secara langsung file script yang sudah di-generate oleh PHPMaker. Kita cukup menambahkannya melalui kedua panel di atas tadi.

Contoh, kita ingin menambahkan Tooltip pada field Model milik table models dari project demo2021 yang bisa kita download dan coba di localhost.

Pertama, jika kita ingin menambahkannya pada halaman List dan View, klik panel View Tag, lalu masukkan sebaris kode berikut ke bagian Custom Attribute:

["class" => "ew-tooltip", "title" => $Language->phrase("MyModelTooltip")]

Kedua, jika kita ingin menambahkannya pada halaman Add dan Edit, klik panel Edit Tag, lalu masukkan juga sebaris kode berikut ke bagian Custom Attribute:

["class" => "form-control ew-tooltip", "title" => $Language->phrase("MyModelTooltip")]

Dari kedua kode tersebut, kita melihat ada sedikit perbedaan antara kode di panel View Tag dan Edit Tag. Khusus untuk panel Edit Tag, kita wajib menambahkan class form-control sebelum class ew-tooltip. Jika tidak, maka class yang digunakan oleh control di field Model tadi menjadi tidak sama dengan class yang digunakan oleh control lainnya pada form tersebut.

Ketiga, jangan lupa untuk menambahkan kode berikut ke dalam server event Language_Load yang terdapat di bawah lokasi Server Events -> Global -> All Pages:

if (CurrentLanguageID() == "en") {
    $this->setPhrase("MyModelTooltip", "This is new tooltip for Model in English");
} elseif (CurrentLanguageID() == "id") {
    $this->setPhrase("MyModelTooltip", "Ini tooltip baru untuk Model bahasa Indonesia");
} elseif (CurrentLanguageID() == "ar") {
    $this->setPhrase("MyModelTooltip", "This is new tooltip for Model in Arabic");
}

Kode yang barusan ini bertujuan untuk membuat teks atau tulisan di Tooltip tadi mendukung multi bahasa. Kita cukup mengeset phrase baru yang bernama MyModelTooltip. Dengan kata lain, phrase ini tidak harus didefinisikan terlebih dulu di dalam file language yang berekstensi .xml.

Terakhir, pastikan untuk men-generate ulang semua file script dengan menggunakan PHPMaker 2021 seperti biasa. Setelah itu jalankan Aplikasi Web dari browser, login dengan username admin dan password master, lalu klik menu Models.

Di halaman List dan View, ketika kita geser kursor mouse ke atas field Model, maka akan muncul Tooltip sesuai dengan bahasa yang sedang terpilih di Aplikasi Web tersebut. Demikian juga hal yang sama terjadi pada halaman Add dan Edit.

Betapa mudah dan cepatnya bukan? Kode yang kita tambahkan sedikit banget, karena selebihnya sudah ditangani oleh PHPMaker 2021.

Menambahkan Custom Attribute Lewat Server Event di PHPMaker 2021

$
0
0

Di tulisan sebelumnya kita sudah membahas bagaimana cara menambahan kode lewat fitur Custom Attribute dari bagian Fields setup. Cara ini memiliki keterbatasan karena jika ada kondisi percabangan seperti if … elseif … else … maka akan cukup rumit menuliskannya.

Sering kali business logic yang ingin diimplementasikan mengharuskan kita untuk menambahkan beberapa kondisi sebelum menambahkan kode di bagian Custom Attribute tersebut. Kalau sudah begini, maka pemakaian server event sudah menjadi kebutuhan.

Di samping karena lebih nyaman menulis kodenya, juga kita lebih mudah memahami business-logic yang kita tambahkan melalui server event. Termasuk dengan alasan jika kita ingin menambahkan komentar untuk menjelaskan arti dari kode yang kita tulis tersebut.

Untungnya PHPMaker sudah menyediakan server event Row_Rendered yang bisa kita gunakan untuk menambahkan Custom Attribute pada Field yang kita inginkan. Kita dapat menggunakan property EditAttrs milik object Field yang bertalian.

Jika Anda sudah menjadi member di situs ILovePHPMaker.com, maka Anda dapat melihat contoh project yang menerapkan pemakaian Custom Attribute lewat server event Row_Rendered, yaitu Stock Inventory Management – PHPMaker 2021 Project.

Berikut ini cuplikan kode di server event tersebut:

	$this->Total_Amount->EditAttrs["onkeyup"] = "ew.vars.GetAmountTotal();ew.vars.GetAmountTotalFinal();";
	$this->Final_Total_Amount->EditAttrs["onkeyup"] = "ew.vars.ValidateFinalTotalAmount();ew.vars.GetAmountTotalFinal();";
	$this->Final_Total_Amount->EditAttrs["onclick"] = "ew.vars.ValidateFinalTotalAmount();ew.vars.GetAmountTotalFinal();";
	$this->Total_Payment->EditAttrs["onkeyup"] = "ew.vars.ValidateTotalPayment();ew.vars.GetBalanceTotalFinal();";
	$this->Total_Payment->EditAttrs["onclick"] = "ew.vars.ValidateTotalPayment();ew.vars.GetBalanceTotalFinal();";
	$this->Total_Balance->EditAttrs["onkeyup"] = "ew.vars.GetAmountTotalFinal();ew.vars.GetBalanceTotalFinal()";
	$this->Total_Balance->EditAttrs["onclick"] = "ew.vars.GetAmountTotalFinal();ew.vars.GetBalanceTotalFinal()";
	...

Contoh kode di server event Row_Rendered tersebut menggunakan Custom Attribute yang terdapat di panel Edit Tag, yang bisa kita kenali dari property EditAttrs. Dengan kata lain, kode ini akan diterapkan pada halaman Add dan Edit dari table yang bertalian.

Custom Attribute yang biasanya akan sering kita gunakan di form Add atau Edit adalah onkeyup dan onclick. Artinya, kita menambahkan attribute ke dalam control Textbox yang akan mendeteksi saat Pengguna Akhir mengetik data atau mengklik control Textbox.

Saat Aplikasi Web di-render di browser, maka kode di atas tadi akan ditambahkan menjadi Attribute pada Field yang bertalian. Dengan cara ini, kita tidak perlu mengubah kode di file script yang sudah dihasilkan oleh PHPMaker. Semuanya cukup dilakukan dari dalam project PHPMaker.

Adapun field-field yang menggunakan Custom Attribute pada contoh kode tersebut adalah Total_Amount, Final_Total_Amount, Total_Payment, dan Total_Balance.

Secara umum, kode di atas ingin mengatakan kepada sistem, saat Pengguna Akhir mengetikkan data angka pada field yang bertalian, maka sistem akan memanggil fungsi Javascript yang sebelumnya sudah kita definisikan di bagian Global dari Client Scripts.

Fungsi-fungsi Javascript yang dipanggil pada kode di atas, sepintas bita kita kenali dari namanya, seperti ValidateTotalPayment, yaitu berfungsi untuk melakukan validasi total pembayaran, dan juga GetAmountTotalFinal untuk menghitung jumlah total pembayaran akhir. Karena bersifat global, kita menggunakan variable global Javascript di PHPMaker yang diawali dengan ew.vars.

Meskipun dalam contoh kode di atas kita tidak menggunakan kode percabangan if … else …, kita masih tetap dapat menambahkan kondisi ini jika suatu saat dibutuhkan.

Betapa fleksibelnya PHPMaker, bukan? 😉

Versi Minor Terbaru Sekarang Bisa Download dan Install Otomatis dari PHPMaker 2021

$
0
0

Kemarin, hari Senin, 31 Mei 2021 sekitar pukul 11.00, ketika saya membuka aplikasi PHPMaker 2021, sistem otomatis men-download Template versi terbaru. Setelah itu, saya menutup aplikasi, dan menjalankan kembali aplikasi PHPMaker tersebut.

Tiba-tiba, muncul informasi sekaligus pertanyaan bahwa PHPMaker versi 2021.0.14 baru saja dirilis, dan apakah ingin men-download versi tersebut? Saya klik tombol Yes atau OK (tidak terlalu ingat tombol yang mana tepatnya) untuk menyetujuinya.

PHPMaker 2021 lalu men-download installer versi 2021.0.14, ditandai dengan status progress download di status bar bagian bawah dari aplikasi PHPMaker. Setelah proses download 100% selesai, selanjutnya muncul peringatan bahwa versi terbaru bisa di-install jika aplikasi PHPMaker 2021 harus ditutup terlebih dulu.

Karena saat itu aplikasi PHPMaker 2021 sepertinya sudah otomatis tertutup, saya lanjutkan dengan proses installasi versi 2021.0.14. Proses ini pun berjalan sebagaimana yang diharapkan, sambil saya amati folder C:\Program Files (x86)\PHPMaker 2021 tempat saya meng-install PHPMaker 2021.

Seketika semua file-file dan beberapa folder dari aplikasi PHPMaker 2021.0.13 otomatis dihapus. Ada beberapa folder yang tidak terhapus, yaitu extensions, languages, dan templates. Ternyata ketiga folder ini tidak otomatis terhapus, karena di dalamnya terdapat file-file tambahan.

Saya ingat sub-folder extensions tidak otomatis terhapus karena selama ini saya menggunakan Masino Extensions untuk PHPMaker 2021. Demikian juga file-file .xml di sub-folder languages sudah ada yang saya tambahkan. Sama halnya dengan sub-folder templates, karena sudah beberapa kali melalukan update ke Template versi terbaru.

Dengan cara ini, sebenarnya PHPMaker 2021 masih memberi kesempatan kepada kita untuk menyelematkan file-file yang seandainya pernah kita tambahkan seperti di beberapa folder di atas tadi.

Kesimpulannya, mulai PHPMaker 2021.0.13, kita sudah dapat menggunakan fitur download dan upgrade otomatis ke versi minor terakhir. Jadi, kita tidak lagi harus melakukan uninstall versi minor yang terakhir secara manual, sebelum meng-install versi minor yang terbaru secara manual.

Mengenai perubahan ini barusan saya cek dari file history.txt yang terdapat di dalam folder C:\Program Files (x86)\PHPMaker 2021:

2021/04/26 v2021.0.13:
- ...
- Improved: Show progress when downloading template or new version (UI)
- ...

Dari catatan perubahan pada versi 2021.0.13 tersebut, maka bertambah satu lagi keuntungan yang kita dapatkan dari PHPMaker. Kalau dulu hanya otomatis download Template versi terbaru, maka sekarang sudah bisa download dan install versi minor terakhir secara otomatis juga.


Solusi untuk Export Original Value di Level Table pada PHPMaker 2021

$
0
0

Sampai dengan PHPMaker 2021, kita dapat menentukan apakah data yang akan di-export berasal dari nilai asli yang terdapat di Database (original value), atau apakah nilai yang muncul di halaman Aplikasi Web yang kemungkinan sudah bukan nilai aslinya lagi.

Kita cukup mengaktifkan pengaturan Export original values dari menu Tools -> Advanced Settings, jika ingin supaya nilai asli yang diekspor. Sebaliknya kita cukup menonaktifkan pengaturan tadi.

Sayangnya, pengaturan ini belum tersedia di level Table. Itu artinya, pengaturan yang kita tentukan di atas tadi berdampak kepada semua object Tables dan Views di dalam project PHPMaker 2021 kita.

Pertanyaannya, bagaimana jika kita ingin agar data asli yang diekspor itu hanya untuk satu atau beberapa table saja? Sementara di level Table pengaturan tadi belum tersedia?

Ternyata PHPMaker 2021 sudah menyediakan pengaturan di level Field. Solusinya, kita cukup menggunakan property ExportOriginalValue milik object DbField.

Katakanlah kita ingin mengekspor nilai asli hanya untuk table orderdetails pada project demo2021, maka kita cukup menambahkan beberapa baris kode ini ke dalam server event Page_Load milik List Page dari table tersebut:

    $this->OrderID->ExportOriginalValue = true;
    $this->ProductID->ExportOriginalValue = true;
    $this->UnitPrice->ExportOriginalValue = true;
    $this->Quanitiy->ExportOriginalValue = true;
    $this->Discount->ExportOriginalValue = true;

Jadi, karena hanya table orderdetails saja yang ingin diekpsor data aslinya, maka pastikan pengaturan Export original values yang terdapat di bawah menu Tools -> Advanced Settings sudah dinonaktifkan.

Betapa mudah dan cepatnya, bukan? 😉

Menentukan Default Record per Page Secara Dinamis dari PHPMaker 2021

$
0
0

Hari ini kita akan belajar bagaimana cara mengeset jumlah record per halaman di halaman List dari Aplikasi yang di-generate oleh PHPMaker 2021.

Katakanlah kita sudah menentukan nilai 5,10,20,50,all pada pengaturan Page sizes (records) yang terdapat di bawah lokasi: PHP -> Page Options (Global).

Itu artinya, jumlah record maksimal yang dapat dipilih pada halaman List adalah 5, 10, 20, 50 atau all (semua).

Selain itu, kita sudah menentukan jumlah record per halaman 10 pada Records per page yang terdapat di lokasi PHP -> Page Options (Global) tadi.

Suatu ketika, dari halaman List pada Aplikasi Web, kita mengubah jumlah default record per halaman dari 10 menjadi 50. Setelah itu, ketika kita melakukan pencarian pada bagian Quick Search, lalu mengklik tombol Search dan menemukan hasilnya, maka kita ingin agar jumlah record per halaman berubah dari 50 menjadi 10 kembali.

Pertanyaannya, bagaimana cara kita mengimplementasikan business-logic seperti itu?

Jawabannya sangatlah mudah. Kita dapat menggunakan sebuah method yang bernama setRecordsPerPage milik object Table.

Cukup dengan memasukkan dua baris kode berikut ke dalam server event Page_Load milik halaman List:

    if (!empty(Get("psearch")))
        $this->setRecordsPerPage(10);

Kode di atas artinya, jika parameter psearch tidak kosong, yang menandakan bahwa Pengguna Akhir baru saja melakukan pencarian, maka set jumlah record per halaman sebanyak 10.

Kode di atas tidak dijalankan jika Pengguna Akhir hanya menekan tombol Search tapi tidak memasukkan kata kunci di teks pencarian pada panel Quick Search.

Yang kerennya lagi adalah, method setRecordsPerPage sudah otomatis menyimpan nilai 10 tadi ke dalam session, sehingga akan otomatis digunakan saat halaman List tersebut dimuat kembali di kesempatan berikutnya.

Betapa mudah dan cepatnya bukan? Tidak perlu menulis kode berpuluh-puluh, beratus-ratus, atau beribu-ribu baris hanya untuk mengimplementasikan business-logic tadi.

Mengapa? Karena selebihnya sudah ditangani oleh PHPMaker 2021.

Menambahkan Halaman Kebijakan Cookie di Aplikasi Web dari PHPMaker 2021

$
0
0

Sejak versi 2019, PHPMaker menambahkan fitur Cookie Consent and Privacy Page for General Data Protection Regulation (GDPR).

Fitur Cookie Consent sering kita jumpai pada Web atau Aplikasi Web yang baru pertama kali kita kunjungi. Biasanya muncul kotak pesan yang menarik perhatian kita, berisi kebijakan cookie, dan dilengkapi dengan semacam tombol Agree yang jika diklik artinya kita menyetujui kebijakan cookie di web tersebut.

Di Aplikasi Web yang dihasilkan oleh PHPMaker 2021, Cookie Consent ditampilkan dengan menggunakan Bootstrap Toast. Posisinya berada di sebelah kanan atas dari halaman Aplikasi Web.

Sedangkan fitur Privacy Page jika kita terjemahkan adalah Halaman Privasi yang isinya menjelaskan kebijakan privasi yang lebih lengkap dan detail, termasuk memuat juga mengenai kebijakan penggunaan cookie di Aplikasi Web kita.

Halaman Privacy Page akan ditampilkan setelah Pengguna Akhir mengklik link yang terdapat di Cookie Consent. Biasanya di sana ada link yang bertuliskan Lear More… atau Pelajari Lebih Lanjut….

Kedua fitur tersebut sebenarnya saling terkait erat. Keduanya dibuat untuk memenuhi GDPR (General Data Protection Regulation). GPDR adalah peraturan privasi data yang diterapkan bagi seluruh perusahaan di dunia yang menyimpan, mengolah, atau memproses data pribadi penduduk Uni Eropa.

Tujuan dari GDPR adalah memberikan perlindungan yang lebih baik terhadap kerahasiaan data (data privacy) dalam ekonomi digital dengan memberikan keleluasaan lebih untuk individual terhadap datanya, dan memberikan peraturan yang lebih ketat kepada pihak yang mengelola atau menyimpannya.

Di PHPMaker 2021, kita dapat menambahkan halaman ini ke Aplikasi Web yang akan di-generate oleh PHPMaker. Bagaimana caranya?

Langkah pertama, pastikan kita sudah mengaktifkan Use cookie policy dari menu Tools -> Advanced Settings.

Langkah kedua, pastikan kita sudah men-generate sedikitnya 4 file berikut dari menu tab Generate:
1. Privacy.php (Remark: View)
2. Privacy.php (Remark: Class)
3. cookieconsent.php
4. routes.php
5. OtherControllers.php

File pertama adalah file Privacy.php (Remark: View) yang di-generate ke sub-folder views. Isinya merupakan kebijakan privasi yang bisa kita definisikan melalui phrase bahasa yang bernama PrivacyPolicyContent.

File kedua adalah Privacy.php (Remark: Class) yang di-generate ke sub-folder models. File ini adalah standar model halaman yang dibuat oleh PHPMaker 2021. Seperti kita ketahui, Aplikasi Web yang dihasilkan oleh PHPMaker 2021 sudah menggunakan konsep MVC (Models-Views-Controllers).

File ketiga adalah cookieconsent.php yang akan di-generate ke sub-folder views. Isinya merupakan kode untuk menampilkan Cookie Consent dalam Bootstrap Toast atau kotak kecil di pojok kanan atas halaman Aplikasi Web.

File keempat adalah routes.php yang di-generate ke sub-folder src. File ini berisi route atau routing privacy yang dibangkitkan oleh PHPMaker 2021, supaya kita bisa mengakses halaman tersebut dari Aplikasi Web.

Sedangkan file kelima adalah OtherControllers.php yang di-generate ke sub-folder controllers. File ini berisi controller-controller lain (sesuai dengan namanya), dimana salah satunya merupakan controller untuk halaman privacy.

Setelah kelima file tersebut di-generate, maka pastikan kita sudah mengunggahnya ke server production.

Kesimpulan dari artikel ini adalah, jika kita menambahkan halaman tertentu ke Aplikasi Web, khusus-nya yang sudah kita buat sebelumnya dengan PHPMaker 2021, maka pastikan sudah men-generate dan meng-upload kelima file-file tersebut.

Hal ini sekaligus memberikan gambaran kepada kita, bahwa jika ingin menambahkan halaman tertentu yang tidak dihasilkan dari object Tables/Views/Reports di PHPMaker 2021, maka kita harus memperhatikan file-file apa saja yang wajib di-generate dan di-upload ke web server tempat Aplikasi Web kita di-hosting.

Membuat Konten Kebijakan Cookie yang Mendukung Multi Bahasa di PHPMaker 2021

$
0
0

Di artikel sebelumnya, kita sudah membahas bagaimana cara menambahkan halaman yang berisi Kebijakan Cookie di Aplikasi Web yang di-generate oleh PHPMaker 2021.

Sekilas sudah dibahas di artikel tersebut, bahwa untuk menambahkan konten Kebijakan Cookie melalui halaman Halaman Privasi, kita dapat mengoptimalkan phrase bahasa yang bernama PrivacyPolicyContent.

Pertanyaannya adalah, bagaimana cara mengoptimalkan phrase tadi? Jawabannya sangatlah mudah. Kita cukup menggunakan server event Language_Load untuk mengeset konten tersebut:

if (CurrentLanguageID() == "id") { 
    $this->setPhrase("PrivacyPolicyContent", "<strong>1. Pengumpulan Informasi</strong><br><br>Kami mengumpulkan informasi dari Anda ketika akun Anda didaftarkan pada aplikasi web ini, login ke aplikasi web, mengentri data, dan/atau ketika Anda logout. Data yang dikumpulkan mencakup nama lengkap Anda, Email, dan nomor telepon Anda.<br><br>Selain itu, kami menerima dan merekam informasi secara otomatis dari komputer dan peramban Anda, termasuk alamat IP Anda, perangkat keras dan perangkat lunak Anda, dan halaman yang Anda minta.<br><br><strong>2. Penggunaan Informasi</strong><br><br>Segala informasi yang kami kumpulkan dari Anda dapat digunakan untuk:<br>- Personalisasi data pribadi Anda<br>- Meningkatkan cara penggunaan aplikasi web<br>- Meningkatkan layanan dan mendukung kebutuhan Anda<br>- Mengkonfirmasi penggantian Kata Sandi lewat Email.<br><br><strong>3. Proteksi Informasi</strong><br><br>Kami menerapkan berbagai langkah keamanan guna menjaga keamanan informasi pribadi Anda. Kami menggunakan enripsi satu arah untuk memproteksi Kata Sandi. Komputer/server yang digunakan untuk menyimpan informasi pribadi yang dapat diidentifikasi disimpan dalam lingkungan yang aman.<br><br>Apakah aplikasi web ini menggunakan kuki?<br><br>Ya. Kuki meningkatkan akses ke aplikasi web dan mengenali pengunjung yang kembali lagi.<br><br><strong>4. Penggunaan Email</strong><br><br>Kami menggunakan alamat email yang Anda berikan untuk mengirimi Anda konfirmasi perubahan Kata Sandi.<br><br><strong>5. Persetujuan</strong><br><br>Dengan menggunakan situs kami, Anda setuju dengan kebijakan privasi kami.<br><br>");
} else {
    $this->setPhrase("PrivacyPolicyContent", "<strong>1. Information Collection</strong><br><br>We collect information from you when your account is registered with this web application, logs in to the web application, enters data, and/or when you log out. The data collected includes your full name, Email and telephone number.<br><br>In addition, we automatically receive and record information from your computer and browser, including your IP address, your hardware and software, and the page you requested.<br><br><strong>2. Use of Information</strong><br><br>Any information we collect from you may be used to:<br>- Personalize your personal data<br>- Improve the way you use web applications<br>- Improve services and support your needs <br>- Confirm Password change via Email.<br><br><strong>3. Information Protection</strong><br><br>We implement various security measures to keep your personal information safe. We use one way encryption to protect Password. The computers/servers used to store personally identifiable information are stored in a secure environment.<br><br>Does this web application use cookies?<br><br>Yes. Cookies improve access to web applications and recognize returning visitors.<br><br><strong>4. Use of Email</strong><br><br>We use the email address you provided to send you confirmation of your Password change.<br><br><strong>5. Consent</strong><br><br>By using our site, you agree to our privacy policy.<br><br>");
}

Konten di atas adalah contoh sederhana saja, dimana untuk bahasa Indonesia, kita mendefinisikan kontennya terlebih dulu. Selain itu, maka kita mendefinisikan konten Kebijakan Privasi dalam bahasa Inggris. Tentu saja kita dapat mengubah kontennya sesuai dengan kebutuhan. Bahkan, kita bisa menambahkan kondisi untuk bahasa lainnya.

Jika kita perhatikan lebih seksama lagi kode di atas, tag HTML seperti strong untuk cetak tebal, dan br untuk berpindah antar baris dapat ditambahkan ke dalam konten tersebut.

Melalui server event Language_Load, kita dapat meng-overide atau mengganti nilai dari suatu phrase. Artinya, jika suatu phrase sudah didefinisikan nilainya melalui file bahasa yang berekstensi .xml, seperti: english.xml atau indonesian.xml, maka kita dapat mengganti nilai phrase di file tersebut dengan menggunakan server event Language_Load.

Di PHPMaker 2021, jika kita mengubah kode di server event Language_Load, maka pastikan sudah men-generate ulang folder src. Sesudah itu, pastikan untuk mengunggah ulang file Language.php yang terdapat di sub-folder src tadi.

Betapa mudah dan cepatnya, bukan? 😉

Memeriksa Permission di Table Lain pada Aplikasi Web dari PHPMaker 2021

$
0
0

Pernah terpikir tidak, ketika Anda menggunakan sebuah tools development, kemudian setiap hari Anda akan menemukan hal-hal baru, yang tidak pernah Anda bayangkan sebelumnya itu bisa ditangani oleh tools tersebut?

Setiap hari Anda akan belajar sesuatu yang baru. Seolah tidak ada habisnya, ada saja ilmu baru yang bisa diungkap, dipelajari, sekaligus dipraktekkan. Fitur-fitur luar biasa, yang semakin memudahkan Web Developer untuk bekerja membangun Aplikasi Web. Hidup pun menjadi semakin menyenangkan dan semangat untuk dijalani.

Kalau saya sering, dan akhir-akhir ini semakin sering. Bukan hanya sekedar omong kosong belaka. Buktinya, Anda bisa menyaksikan sendiri di situs ini. Nyaris setiap hari ada saja tulisan baru, berisi pengalaman yang sangat menyenangkan ketika bekerja menggunakan PHPMaker, khususnya versi 2021, versi terakhir saat artikel ini saya tulis.

Tidak terkecuali dengan ilmu baru yang akan kita pelajari hari ini, yang sungguh sayang untuk dilewatkan begitu saja. Betapa mudahnya kita bisa memeriksa permission di table lain pada Aplikasi Web yang dihasilkan oleh PHPMaker 2021. Secara standar, PHPMaker hanya memeriksa permission di halaman aktif yang menggunakan suatu table tertentu.

Oke, langsung saja kita buktikan bersama-sama, bagaimana cara memeriksa permission tertentu untuk suatu table, apakah bisa diakses oleh Pengguna yang sedang login.

Katakanlah di project demo2021 yang bisa Anda download dan coba sendiri, kita ingin memeriksa permission untuk user nancy (level pengguna: Sales), apakah dapat mengubah data di table orders. Tapi, kita mengeceknya saat membuka halaman List dari table models. Itu artinya, kita mengecek permission di table lain saat membuka table yang berbeda.

Nah, ternyata untuk memeriksanya, kita cukup menggunakan method allowEdit milik object Security yang sudah disediakan oleh PHPMaker 2021. Kita cukup menambahkan sedikit kode PHP ini saja ke dalam server event Page_Load di bawah List Page dari table models:

    $check_permission = Security()->allowEdit("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders");   
    $this->setMessage("Check Edit permission: " . $check_permission);

Penting untuk diketahui, bahwa method allowEdit tersebut memiliki satu parameter, yaitu nama table. Dalam hal ini, nama table harus dilengkapi dengan Project ID, seperti yang tersimpan di table userlevelpermissions. Anda juga bisa melihat data Project ID ini dari menu Tools -> Advanced Settings.

Untuk contoh kode di atas, maka Project ID-nya adalah {DFB61542-7FFC-43AB-88E7-31D7F8D95066}.

Setelah itu, pastikan untuk men-generate ulang semua file script seperti biasa, lalu cobalah login dengan menggunakan username nancy dan password 1234 (asumsi belum pernah diganti). Kemudian buka menu Models yang akan menampilkan halaman List dari data di table models.

Seharusnya muncul kotak pesan yang berisi tulisan Check Edit permission: 0. Itu artinya, permission Edit milik table orders untuk user nancy tidak diijinkan, karena nilainya nol.

Untuk membuktikan permission yang lain, sekarang mari kita ubah kode di atas menjadi seperti ini:

    $check_permission = Security()->allowView("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders");  
    $this->setMessage("Check View permission: " . $check_permission);

Kemudian akses kembali halaman List dari table models, maka seharusnya Anda akan melihat tulisan Check View permission: 32. Itu artinya, permission View yang bernilai 32 diberikan kepada user nancy untuk table models.

Sampai di sini, kita sudah berhasil membuktikan bahwa permission Edit table orders tidak diberikan, dan permission table orders diberikan untuk user nancy.

Berikutnya, kita coba untuk permission Add, dengan mengubah lagi kode di atas menjadi:

    $check_permission = Security()->allowAdd("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders");
    $this->setMessage("Check Add permission: " . $check_permission);

Jika kita akses kembali halaman List dari menu models, maka seharusnya sekarang teks pada kotak pesan berubah menjadi: Check Add permission: 1. Itu artinya, permission Add yang bernilai 1 diberikan kepada user nancy untuk table models.

Terbukti sudah, dengan kode di atas tadi, kita bisa memeriksa permission tertentu untuk table yang berbeda dengan table pada halaman yang sedang kita akses.

Mungkin timbul pertanyaan, darimana kita bisa mengetahui nilai dari setiap permission yang sudah kita bahas di atas tadi? Lagi-lagi, jawaban untuk pertanyaan ini pun sangatlah mudah.

Cukup dengan melihat kode berikut pada file config.php yang terdapat di sub-folder src:

// User level constants
define(PROJECT_NAMESPACE . "ALLOW_ADD", 1); // Add
define(PROJECT_NAMESPACE . "ALLOW_DELETE", 2); // Delete
define(PROJECT_NAMESPACE . "ALLOW_EDIT", 4); // Edit
define(PROJECT_NAMESPACE . "ALLOW_LIST", 8); // List
define(PROJECT_NAMESPACE . "ALLOW_REPORT", 8); // Report
define(PROJECT_NAMESPACE . "ALLOW_ADMIN", 16); // Admin
define(PROJECT_NAMESPACE . "ALLOW_VIEW", 32); // View
define(PROJECT_NAMESPACE . "ALLOW_SEARCH", 64); // Search
define(PROJECT_NAMESPACE . "ALLOW_IMPORT", 128); // Import
define(PROJECT_NAMESPACE . "ALLOW_LOOKUP", 256); // Lookup

Itu adalah nilai dari setiap konstanta permission terkait.

Jadi, jika output dari kode yang sudah kita coba sebanyak 3 kali di atas tadi tidak sama dengan nilai konstanta tersebut, atau jika misalnya nilai hasil pengecekan tadi adalah 0 (nol), maka itu artinya user tidak memiliki hak akses atau permission untuk table yang bertalian.

Tapi sayangnya, di class AdvancedSecurity bawaan PHPMaker 2021 sampai dengan versi minor 2021.0.14, belum tersedia method lainnya yang terkait dengan konstanta tadi.

Yang belum ada adalah method-method berikut ini:
allowReport
allowDelete
allowSearch
allowImport

Lalu solusinya bagaimana?

Keempat method yang belum tersedia di class AdvancedSecurity itu kini sudah diatasi oleh Masino Extensions untuk PHPMaker 2021. Jika Anda sudah terdaftar di ILovePHPMaker.com maka Anda bisa men-download ulang file Masino Extensions for PHPMaker 2021, karena hari ini saya baru saja memperbarui dan mengunggahnya ke situs tersebut.

Semoga bermanfaat ya. 🙂

Menyembunyikan Table Detail Sesuai Kondisi di Aplikasi Web dari PHPMaker 2021

$
0
0

Sekarang mari kita bermain-main dengan fitur Master/Detail di Aplikasi Web yang dihasilkan oleh PHPMaker 2021. Kali ini kita akan belajar bagaimana cara menyembunyikan table Detail pada table-table yang memiliki relasi sebagai Master/Multiple-Detail.

Relasi Master/Multiple-Detail artinya kita memiliki sebuah table Master yang memiliki relasi ke lebih dari satu table Detail. Kebetulan contohnya sudah ada di project demo2021 yang bisa kita download dan coba sendiri di localhost.

Satu table Master memiliki relasi ke dua table Detail. Table Master: orders, table Detail: orderdetails dan order details extended. Dalam hal ini, order details extended adalah Database View, sedangkan orderdetails adalah Table.

Untuk menyederhanakan istilah, kita menyebut order details extended sebagai Table Detail dari Table Master orders.

Katakanlah kita ingin menyembunyikan table Detail orderdetails hanya jika data di field CustomerID pada table Master orders kosong. Sebaliknya, jika data di field CustomerID tadi tidak kosong, maka table Detail order details extended yang disembunyikan.

Penasaran kan, bagaimana cara kita mengimplementasikannya pada Aplikasi Web yang dihasilkan oleh PHPMaker 2021 Hohoho… 😀

Solusinya sangatlah mudah dan cepat, Saudara-saudara! Cukup dengan memasukkan 7 baris kode ini saja ke dalam server event ListOptions_Rendering yang terdapat di halaman List dari table orders:

if (empty($this->CustomerID->CurrentValue)) {
    $this->DetailPages->Items["orderdetails"]->Visible = false; // sembunyikan orderdetails
    $this->DetailPages->Items["orderdetailsextended"]->Visible = true; // tampilkan order details extended
} else {
    $this->DetailPages->Items["orderdetails"]->Visible = true; // tampilkan orderdetails
    $this->DetailPages->Items["orderdetailsextended"]->Visible = false; // sembunyikan order details extended
}

Perhatikan kode tersebut. Untuk menyembunyikan table Detail orderdetails, kita cukup mengeset property Visible milik object DetailPages untuk Items yang bernama orderdetails dengan nilai false.

Demikian juga dengan table Detail order detail extended. Sebaliknya, jika kita ingin menampilkannya, maka kita harus mengeset property Visible dengan nilai true.

Keren, kan? hanya dengan sedikit kode itu saja, kita sudah bisa mengimplementasikan business-logic yang kita tentukan di atas tadi.

Tidak sia-sia kita menggunakan PHPMaker 2021, karena dapat menghemat waktu development. Ngoding pun semakin menyenangkan. Tidak perlu lagi menulis kode sampai berpuluh-puluh, beratus-ratus, atau bahkan beribu-ribu baris, karena selebihnya sudah di-generate oleh PHPMaker 2021 secara otomatis.

Improvement Fitur Read Only di Aplikasi Web yang Dihasilkan oleh PHPMaker 2021

$
0
0

Sudah bukan rahasia lagi bahwa di versi terakhir, PHPMaker selalu melakukan improvement dari versi-versi sebelumnya. Termasuk fitur Read Only, di versi 2021, PHPMaker pun membuktikannya. Pekerjaan Web Developer pun menjadi semakin ringan saja.

Jika di artikel ini kita harus menangani lagi dengan menggunakan kode khusus untuk membuat icon lookup supaya menjadi non-aktif (disabled), sekarang di PHPMaker 2021 itu sudah ditangani secara otomatis. Jadi, tidak perlu lagi kode tambahan yang harus kita tulis sendiri hanya untuk membuat field Read Only.

Tidak hanya itu saja, jika artikel yang satu ini kita harus menulis kode tambahan di server event Row_Updating untuk meneruskan nilai lama ke nilai baru pada field yang Read Only, maka di PHPMaker 2021 kode tambahan itu tidak perlu lagi kita tulis, karena PHPMaker sudah menangani nilai pada field yang Read Only tadi secara otomatis.

Fakta ini lagi-lagi semakin membuktikan bahwa PHPMaker versi terakhir selalu memiliki banyak keuntungan, sehingga sangat disarankan untuk dipakai dibandingkan versi-versi yang lama. Di samping improvement tersebut, teknologi Web Development yang digunakan pun relatif mengikuti trend, seperti misalnya Aplikasi Web sudah mendukung fitur URL yang SEO-Friendly.

Di PHPMaker 2021, kode yang kita tulis untuk membuat field menjadi Read Only secara dinamis, menjadi lebih sedikit, dibandingkan di versi-versi major sebelumnya. Kita tidak perlu lagi menangani control atau tombol Lookup menjadi disable. Kita juga tidak perlu menangani kode tambahan di server event Row_Updating.

Katakanlah di table models dari project demo2021 yang bisa kita download dan coba sendiri di localhost masing-masing, kita ingin membuat field Trademark menjadi Read Only hanya untuk user admin. Sedangkan untuk user yang bukan admin, maka field Model yang Read Only.

Ada dua cara yang hanya bisa kita pilih salah satu untuk mengimplementasikannya.

Cara pertama, kita menggunakan server event Row_Rendered. Cukup dengan menambahkan kode ini:

    if (CurrentPageID() == "edit") {
        if (IsAdmin()) {
            $this->Trademark->ReadOnly = true;
        } else {
            $this->Model->ReadOnly = true;
        }
    }

Karena server event Row_Rendered dipanggil untuk beberapa halaman, maka kita harus menggunakan kondisi, dengan memeriksa ID halaman yang aktif, apakah edit.

Cara kedua, kita menggunakan server event Page_Load milik halaman Edit dari table models:

    if (IsAdmin()) {
        $this->Trademark->ReadOnly = true;
    } else {
        $this->Model->ReadOnly = true;
    }

Karena kode di server event Page_Load sudah mengacu langsung di bawah halaman Edit, maka kode yang kedua ini tidak perlu lagi menggunakan pemeriksaan kondisi ID halaman.

Betapa mudah dan cepatnya, bukan? Hohoho… 😀


Memastikan Checkbox Sudah Dipilih di Extended Search dari PHPMaker 2021

$
0
0

Artikel berikut akan membahas betapa mudahnya kita menerapkan business-logic yang mengharuskan Pengguna Akhir untuk memilih sedikitnya satu Checkbox pada field yang Lookup ke table tertentu. Bukan di form Add atau Edit, tetapi di bagian Extended Search pada halaman List dari Aplikasi Web yang di-generate oleh PHPMaker 2021.

Untuk mencobanya, pastikan Anda sudah mengikuti artikel ini. Kita akan menggunakan database dan table yang dibahas di artikel tersebut.

Sebagai Web Developer, kita ingin Pengguna Akhir wajib memilih atau memberi tanda centang sedikitnya pada satu Checkbox di field yang terdapat di bagian Extended Search tadi. Jika ini belum dilakukan, maka data tidak dapat ditampilkan di halaman List tersebut.

Untuk itu, maka pastikan kita sudah mengaktifkan Requires search dari bagian Table setup.

Selain itu, pastikan juga dari Fields setup, kita sudah mengaktifkan Ext. Search yang terdapat di kolom List Page untuk field Tags.

Selanjutnya, mari kita fokus pada field Tags di table multiple_tags tadi. Field ini lookup ke table yang bernama lookup.

Cukup hanya dengan memasukkan sedikit kode PHP ini saja ke dalam server event Form_CustomValidate milik halaman List dari table multiple_tags tadi, sehingga hasil lengkapnya menjadi seperti ini:

// Form Custom Validate event
function Form_CustomValidate(&$customError)
{
    // Return error message in CustomError
    if ($this->Tags->AdvancedSearch->SearchValue == "" && !$this->Tags->AdvancedSearch->IssetSession() && isset($_GET["cmd"]) && $_GET["cmd"] == "search") {
        $customError = "Tags belum dipilih, silahkan pilih sedikitnya satu Checkbox";
        return FALSE;
    }
    
    return true;
}

Setelah semua file script di-generate oleh PHPMaker 2021, maka kita dapat mencobanya dari halaman List milik table multiple_tags. Saat halaman ini ditampilkan pertama kali, belum ada data di table.

Sekarang cobalah untuk langsung mengklik tombol Search tanpa ada satu Checbox pun dicentang pada field Tags di Extended Search, maka kita akan melihat pesan error muncul: Tags belum dipilih, silahkan pilih sedikitnya satu Checkbox.

Kemudian, cobalah beri tanda centang pada satu Checkbox saja, lalu klik tombol Search, maka seharusnya kita akan melihat di table pada halaman List data yang sesuai dengan kriteria item Checbox yang kita centang tadi.

Horeee… berhasil… berhasil… berhasil… 😀

Betapa mudah dan cepatnya bukan? 😉

Auto Fill yang Fleksibel di Aplikasi Web yang Dihasilkan oleh PHPMaker 2021

$
0
0

Kadang-kadang, kita ingin mengakses Lookup Table menggunakan Ajax. Sebagai contoh, setelah Pengguna Akhir memasukkan data ke sebuah field, kita ingin mengotomatiskan field lain terisi datanya. Untuk itu, maka kita dapat menggunakan API dan Client Scripts untuk mengimplementasikannya.

Supaya Auto fill bisa dijalankan lewat kode yang kita tulis, maka pastikan untuk tidak mengaktifkan fitur built-in Auto-Fill di table Lookup Table.

Katakanlah, jika kita ingin memasukkan Product Price ketika kita memilih sebuah ProductID (dengan menggunakan table products sebagai lookup table) ketika sedang mengisi record baru, Anda dapat mengotomatiskan pengisian ProductPrice di table orderdetails, apakah secara asynchronous atau synchronous dengan kode.

Contoh pertama, kita bisa menggunakan Auto-Fill asynchronously dengan action API view.

Cukup dengan menulis kode Javascript di bagian Startup Script dari halaman Add milik table orderdetails, untuk melampirkan event onchange dan mendapatkan data dari table lain (dalam hal ini products) dengan action API yang bernama “view”.

$("#x_ProductID").change(function() { 
    $.get(ew.getApiUrl(["view", "products", $(this).val()]), function(res) { // Get response from API
        if (res && res.success) {
            var row = res["products"];
            $("#x_UnitPrice").val(row["UnitPrice"]); // isi hasil ke field target
        } else {
            ew.alert(res.failureMessage);
        }
    });
}); 

Dalam contoh ini, kita menggunakan Lookup API, sehingga tidak perlu menulis kode di sisi server.

Jika action = view, kita akan mendapatkan sebuah record dengan melewatkan Primary Key di URL. Jika Primary Key lebih dari satu, maka pisahkan dengan karakter pemisah composite key (nilai default-nya adalah karakter koma). Hasilnya adalah satu record.

Sedangkan jika action = list, kita akan mendapatkan beberapa record (object array), dengan melewatkan parameter pencarian di URL. Contohnya bisa dilihat dari URL di halaman List setelah melakukan proses pencarian. Hasilnya adalah array record.

Jika User ID dan/atau User Level diaktifkan, record-record dan/atau halaman akan tetap diproteksi. Jadi, jika misalnya Pengguna tidak memiliki hak akses ke halaman View, maka action view tadi (misalnya) tidak diijinkan.

Nilai yang dikembalikan adalah nilai asli dari Database. Tentu saja kita bisa mem-format-nya terlebih dulu sesuai dengan kebutuhan, sebelum ditampilkan ke field target.

Contoh kedua, kita bisa menggunakan Auto-Fill synchronously lewat ew.ajax().

Cukup dengan menuliskan kode Javascript ke bagian Startup Script milik halaman Add, untuk melampirkan event onchange.

$("#x_ProductID").change(function() { 
    var object = "products", data = { "action": "view", "object": object, "ProductID": encodeURIComponent($(this).val()) };
    var res = ew.ajax(data);
    if (res && res.success) {
        var row = res[object];
        $("#x_UnitPrice").val(row["UnitPrice"]); // isi hasil ke field target
    }
});  

Perlu diingat bahwa fungsi built-in ew.ajax() menggunakan API halaman View. Jadi, dalam hal ini kita tidak perlu menentukan URL.

Contoh ketiga, kita menggunakan Auto-Fill asynchronously melalui ew.ajax().

Cukup dengan menulis kode Javascript di bagian Startup Script milik halaman Add, dengan melampirkan event onchange. Sama seperti contoh 2 di atas.

$("#x_ProductID").change(function() { 
    var object = "products", data = { "action": "view", "object": object, "ProductID": encodeURIComponent($(this).val()) };
    ew.ajax(data, function(res) { // Lewatkan fungsi callback sebagai parameter kedua ew.ajax()
        if (res && res.success) {
            var row = res[object];
            $("#x_UnitPrice").val(row["UnitPrice"]); // isi hasil ke field target
        }
    });
}); 

Contoh keempat, kita menggunakan Auto-Fill asynchronously lewat custom API action dan Client Script.

Pastikan untuk menulis API handler terlebih dulu, katakanlah “getUnitPriceByProductID”, dan tempatkan di bagian Global Code untuk mengemalikan nilai yang dibutuhkan. Dalam contoh ini, hanya nilai tunggal yang dibutuhkan, jadi ExecuteScalar() yang digunakan.

$API_ACTIONS["getUnitPriceByProductID"] = function(Request $request, Response $response) {
    $productId = Param("ProductID"); // Get the input value from $_GET or $_POST
    if ($productId !== NULL) 
        Write(ExecuteScalar("SELECT UnitPrice FROM products WHERE ProductID = " . AdjustSql($productId))); // Output field value as string
};

Jika kita ingin mengembalikan seluruh baris dengan JSON, maka kita dapat menggunakan WriteJson() yang dikombinasikan dengan ExecuteRow().

WriteJson(ExecuteRow("SELECT * FROM products WHERE ProductID = " . AdjustSql($productId))); // Output the row (array) as JSON

Selanjutnya tulis kode Javascript di bagian Startup Script milik halaman Add untuk melampirkan event onchange:

$("#x_ProductID").change(function() { 
    var url = ew.API_URL, action = "getUnitPriceByProductID", id = encodeURIComponent($(this).val());
    //$.get(url + "/" + action + "?ProductID=" + id, function(res) { // URL format if URL Rewrite enabled
    $.get(url + "?action=" + action + "&ProductID=" + id, function(res) { // Get response from custom API action
        if (res)
            $("#x_UnitPrice").val(res); // isi hasil ke field target
    });
});

Cara Menggunakan Login by session variables di Aplikasi Web dari PHPMaker 2021

$
0
0

Ada satu fitur yang cukup menarik di PHPMaker 2021, dan selama ini luput dari perhatian kita. Fitur itu adalah Allow login by session variables yang dapat kita lihat dari menu Tools -> Advanced Settings.

Jika pilihan ini kita aktifkan sebelum men-generate ulang semua file script, maka itu artinya kita sebagai Web Developer mengijinkan Pengguna Akhir untuk mengakses halaman di Aplikasi Web tanpa harus login secara manual seperti yang biasa dilakukan dari halaman Login.

Seperti yang dijelaskan dari menu Help PHPMaker 2021, fitur ini mengijinkan kita untuk melewatkan username dan password ke halaman Login lewat penggunaan variabel session (variabel yang nilainya tersimpan di session).

Secara standar, halaman Login hanya menerima HTTP POST. Jika pilihan Allow login by session variables diaktifkan, maka halaman Login dapat menerima variabel session juga. Akibatnya, Pengguna Akhir dapat login secara otomatis hanya dengan cara mengeset beberapa variabel session username dan password.

Supaya tidak bingung, mari kita praktekkan pada project demo2021 yang dapat Anda download dan coba sendiri di localhost.

Pertama sekali, kita aktifkan pilihan Allow login by session variables dari menu Tools -> Advanced Settings.

Langkah kedua, cukup copy/paste dua baris kode PHP ini ke dalam server event Page_Rendering yang terdapat di bawah lokasi: Server Events -> Global -> All Pages:

    $_SESSION[PROJECT_NAME . "_Username"] = "nancy"; 
    $_SESSION[PROJECT_NAME . "_Password"] = "1234"; // asumsi: password belum pernah diganti

Terakhir, simpan project-nya, lalu generate ulang semua file script seperti biasa menggunakan PHPMaker 2021.

Karena kode pada server event Page_Rendering akan dipanggil oleh semua halaman, maka itu artinya ketika kita mencoba mengakses halaman tertentu di Aplikasi Web yang sudah di-generate oleh PHPMaker 2021, maka sistem sudah otomatis melakukan login.

Jadi, dalam hal ini kita tidak perlu melakukan login manual seperti yang selama ini kita lakukan dengan memasukkan data username dan password pada halaman Login.

Fitur Allow login by session variables ini sangat cocok jika kita ingin langsung memberikan akses suatu Aplikasi Web kepada Pengguna Akhir tanpa mereka harus melakukan login secara manual dengan cara memasukkan username dan password dari halaman Login.

Betapa mengasyikkan bukan menggunakan PHPMaker 2021? Hanya dengan 2 baris kode itu saja, kita sudah dapat membuat Aplikasi Web yang dapat login secara otomatis hanya dengan mengeset variabel session yang terkait dengan username dan password.

Selebihnya sudah ditangani oleh PHPMaker 2021. Kita tidak perlu menulis kode berpuluh-puluh, beratus-ratus, atau bahkan beribu-ribu baris hanya untuk mengimplementasikan fitur tersebut.

Menyembunyikan Pilihan User Select pada Advanced Search di PHPMaker 2021

$
0
0

Ada yang pernah memilih USER SELECT dari lokasi Fields setup -> Advanced Search Page -> Operator pada PHPMaker 2021? Jika ya, maka itu artinya kita dapat menggunakan beberapa Operator pencarian yang tersedia di sana.

Kadang-kadang, kita tidak ingin menggunakan semua Operator pencarian tersebut. Kita hanya ingin menampilkan 2 Operator pencarian, yaitu = dan LIKE (contains). Sedangkan Operator pencarian lainnya harus disembunyikan. Bagaimana caranya?

Hohoho… ternyata jawabannya mudah dan cepat sekali.

Katakanlah kita akan mengimplementasikan pada field LastName di table employees dari project demo2021 yang bisa Anda download dan coba sendiri di localhost masing-masing.

Pastikan kita sudah memilih USER SELECT dari bagian Fields setup, untuk field LastName pada table employees.

Pastikan juga kita sudah mengaktifkan Advanced dari Table setup -> Search, supaya PHPMaker 2021 nanti men-generate halaman Advanced Search atau Pencarian Lanjutan.

Setelah itu, salin kode CSS di bawah ini ke lokasi berikut pada project PHPMaker 2021 Anda: HTML -> Styles -> Users:

#z_LastName { /* I use the name of the select tag */
	option[value="<>"] {display: none;};
	option[value="<"] {display: none;};
	option[value=">"] {display: none;};
	option[value="<="] {display: none;};
	option[value=">="] {display: none;};
	option[value="NOT LIKE"] {display: none;};
	option[value="STARTS WITH"] {display: none;};
	option[value="ENDS WITH"] {display: none;};
	option[value="IS NULL"] {display: none;};
	option[value="IS NOT NULL"] {display: none;};
	option[value="BETWEEN"] {display: none;};
}

Setelah itu, generate ulang semua file script seperti biasa dengan menggunakan PHPMaker 2021.

Kode di atas akan ditambahkan oleh PHPMaker 2021 ke dalam file demo2021.css (asumsi: kita menggunakan project demo2021).

Untuk memastikan Aplikasi Web menggunakan file demo2021.css yang versi terakhir tadi, maka silahkan muat ulang file ini dari browser, misalkan dengan mengetik alamat ini di browser: http://localhost/demo2021/css/demo2021.css lalu cek, maka seharusnya PHPMaker 2021 akan menambahkan kode berikut di bagian paling bawah dari isi file demo2021.css tadi:

#z_LastName {
  /* I use the name of the select tag */ }
  #z_LastName option[value="<>"] {
    display: none; }
  #z_LastName option[value="<"] {
    display: none; }
  #z_LastName option[value=">"] {
    display: none; }
  #z_LastName option[value="<="] {
    display: none; }
  #z_LastName option[value=">="] {
    display: none; }
  #z_LastName option[value="NOT LIKE"] {
    display: none; }
  #z_LastName option[value="STARTS WITH"] {
    display: none; }
  #z_LastName option[value="ENDS WITH"] {
    display: none; }
  #z_LastName option[value="IS NULL"] {
    display: none; }
  #z_LastName option[value="IS NOT NULL"] {
    display: none; }
  #z_LastName option[value="BETWEEN"] {
    display: none; }

Perhatikanlah sekarang kode yang sudah ditambahkan tadi. PHPMaker 2021 akan secara otomatis menambahkan id selector dari field LastName tadi di setiap option dari Operator pencarian yang ingin kita sembunyikan tersebut.

Sekarang cobalah akses Aplikasi Web dari browser, login dengan username admin dan password master, lalu klik menu Admin Only -> Employees, lalu klik tombol kaca pembesar yang ada huruf A di dalamnya, dengan tooltip Advanced Search.

Di halaman Advanced Search yang muncul berikutnya, klik pada combobox yang terdapat di sebelah kanan label Last Name, maka Operator Pencarian yang tersedia di sana hanya = dan contains atau LIKE.

Mission completed!

Mudahnya Memberikan Akses Administrator kepada User dari PHPMaker 2021

$
0
0

Suatu saat, kita ingin memberikan akses user level Administrator kepada user yang levelnya bukan Administrator. Kita dapat menggunakan server event TablePermission_Loading yang lokasinya berada di bawah Server Events -> Global -> All Pages dalam project PHPMaker 2021.

Penting untuk diketahui, server event TablePermission_Loading dijalankan hanya untuk Table dari halaman yang sedang dimuat. Jika kita mengganti Hak Akses yang terdapat di Table lainnya melalui server event ini, maka tidak akan ada efeknya bagi Table lain tersebut. Gunakanlah server UserLevel_Loaded jika ingin mengganti Hak Akses di Table lainnya.

Katakanlah kita ingin memberikan akses Administrator kepada user nancy yang levelnya adalah Sales pada project demo2021, maka cukup masukkan kode berikut ke dalam server event TablePermission_Loading:

    if ((CurrentPageName() == "employeesadd" || CurrentPageName() == "employeesedit") && (CurrentUserLevel() == 1)) 
        $this->addUserLevel("Administrator");

Kode di atas artinya, jika halaman saat itu yang sedang diakses oleh Pengguna Akhir adalah employeesadd atau employeesedit, dan level pengguna adalah 1 (Sales), maka tambahkan akses level pengguna Administrator.

Tentu saja dalam hal ini kita sudah memberikan permission list, add, dan edit dari table employees, kepada level pengguna 1 (Sales) dari halaman User Levels yang sudah di-generate oleh PHPMaker 2021.

Mungkin masih ada yang bertanya-tanya, apa tujuan kita memberikan akses Administrator untuk halaman Add dan Edit dari table employees tadi?

Jawabannya adalah, supaya nilai pada field User Level di halaman Add dan Edit dari table employees tadi menjadi dapat dipilih oleh Pengguna yang bukan Administrator.

Dengan kata lain, jika kode di atas tadi tidak kita tambahkan ke dalam server event TablePermission_Loading, maka field User Level akan tetap dalam posisi read-only; yang ditandai dengan karakter beberapa bintang: ********

Betapa mudah dan cepatnya bukan? Hanya dengan dua baris kode itu saja, kita sudah bisa mengimplementasikan business-logic tersebut

Lagi-lagi, kita tidak perlu menulis berpuluh-puluh, beratus-ratus, atau bahkan beribu-ribu baris kode, karena selebihnya sudah ditangani oleh PHPMaker.

Viewing all 176 articles
Browse latest View live