Ada pertanyaan yang cukup bagus mengenai bagaimana cara mengubah data yang diekspor jika lebih dari satu kolom. Ternyata pertanyaan tersebut ditujukan pada artikel yang saya tulis sekitar delapan tahun yang lalu. Wow!
Artikel itu saya buat berdasarkan dokumentasi yang disediakan oleh PHPMaker. Memang contoh pada dokumentasi tersebut hanya untuk satu kolom saja.
Untuk membuktikan betapa mudahnya mengubah data yang diekspor jika lebih dari satu kolom pada PHPMaker 2022, maka artikel ini saya buat.
Jawabannya cukup dengan menggunakan 3 server event saja, yaitu Page_Exporting, Row_Export, dan Page_Exported. Pada contoh di atas, penekanannya baru pada server event pertama dan kedua saja.
Katakanlah kita ingin menyesuaikan tampilan data yang diekspor ke file Excel pada table orders di halaman List pada project demo2022. Seperti yang kita ketahui, ada 4 kolom yang ditampilkan di halaman List tersebut, yaitu: OrderID, CustomerID, EmployeeID, dan OrderDate.
Dalam hal ini kita hanya ingin menampilkan 3 kolom pertama saja pada data yang diekspor ke file Excel. Bagaimana caranya?
Langkah Pertama, sisipkan kode berikut ke dalam server event Page_Exporting di atas baris return true:
if ($this->Export == "excel") {
$this->ExportDoc->Text .= "<table class='ew-table'><tr><td style='width:100px; text-align:center'>Order ID</td><td style='width:300px'>Customer</td><td style='width:200px'>Employee</td></tr>";
return false;
}
Kode tersebut artinya kita menampilkan judul kolom data yang akan diekspor ke Excel. Perhatikanlah bahwa kita harus menggunakan format table dengan class ew-table. Ada tiga kolom yang kita gunakan, masing-masing memiliki lebar 100px, 300px, dan 200px.
Pastikan juga di server event Page_Exporting tadi, kita mengembalikan nilai false, agar sistem mengeksekusi kode pada server event Row_Export berikutnya. Jika tidak, maka kode pada server event Row_Export tidak akan pernah dieksekusi.
Langkah Kedua, sisipkan kode berikut ke dalam server event Row_Export:
if ($this->Export == "excel")
$this->ExportDoc->Text .= "<tr><td style='text-align:center'>" . $rs["OrderID"] . "</td><td>" . $this->CustomerID->ViewValue . "</td><td>" . $this->EmployeeID->ViewValue . "</td></tr>";
Kode di server event Row_Export ini artinya kita mengubah data yang ditampilkan di setiap baris. Perhatikanlah bahwa di sana kita menggunakan param $rs jika ingin menampilkan data asli di suatu kolom. Sedangkan jika kita ingin menampilkan data yang sudah diformat, maka cukup gunakan property ViewValue milik object field yang bertalian.
Perhatikan juga bahwa untuk memisahkan data antar kolom, kita menggunakan tag td atau kolom di table. Sama halnya yang kita lakukan pada server event Page_Exporting untuk menampilkan header dari setiap kolom.
Dan langkah yang terakhir atau ketiga, sisipkan kode berikut ke dalam server event Page_Exported:
if ($this->Export == "excel")
$this->ExportDoc->Text .= "</table>";
Kode pada server event Page_Exported ini berfungsi untuk menutup tag table yang sebelumnya kita buka pada server event Page_Exporting. Pastikan kita tidak lupa dengan kode ini, agar data yang diekspor ke file Excel berhasil dilakukan sebagaimana mestinya.
Hanya dengan sedikit kode PHP itu saja, kita sudah dapat menyesuaikan data yang akan diekspor ke file Excel. Setelah itu, pastikan untuk men-generate ulang semua file script menggunakan aplikasi PHPMaker 2022 seperti biasa.
Untuk memastikan kode yang Anda tambahkan sudah benar pada ketiga server event di atas tadi, maka berikut ini kode selengkapnya:
// Page Exporting event
// $this->ExportDoc = export document object
function Page_Exporting()
{
//$this->ExportDoc->Text = "my header"; // Export header
//return false; // Return false to skip default export and use Row_Export event
if ($this->Export == "excel") {
$this->ExportDoc->Text .= "<table class='ew-table'><tr><td style='width:100px; text-align:center'>Order ID</td><td style='width:300px'>Customer</td><td style='width:200px'>Employee</td></tr>";
return false;
}
return true; // Return true to use default export and skip Row_Export event
}
// Row Export event
// $this->ExportDoc = export document object
function Row_Export($rs)
{
//$this->ExportDoc->Text .= "my content"; // Build HTML with field value: $rs["MyField"] or $this->MyField->ViewValue
if ($this->Export == "excel")
$this->ExportDoc->Text .= "<tr><td style='text-align:center'>" . $rs["OrderID"] . "</td><td>" . $this->CustomerID->ViewValue . "</td><td>" . $this->EmployeeID->ViewValue . "</td></tr>";
}
// Page Exported event
// $this->ExportDoc = export document object
function Page_Exported()
{
//$this->ExportDoc->Text .= "my footer"; // Export footer
//Log($this->ExportDoc->Text);
if ($this->Export == "excel")
$this->ExportDoc->Text .= "</table>";
}
PHPMaker memang keren!
Tinggalkan Balasan