Masino Sinaga

Web Development and PHPMaker

Anda di sini: Beranda / PHPMaker / Ketika PHPMaker 2023 Menyapa Database Microsoft SQL Server 2008
Composer Packages di PHPMaker, Apa Itu?
Mengapa PHPMaker Memuat Kode Javasript dan CSS secara Asynchronous?

Ketika PHPMaker 2023 Menyapa Database Microsoft SQL Server 2008

Jum, 11 November 2022 oleh Masino Sinaga 3 Komentar

Salah satu client terbesar saya saat ini masih menggunakan database Microsoft SQL Server 2008. Suatu ketika, mereka meminta saya untuk memperbarui salah satu aplikasi web yang dulu pernah saya buat untuk client saya ini, dimana aplikasi web tersebut masih menggunakan PHPMaker v2017.

Mereka menginginkan beberapa fitur tambahan pada aplikasi web tersebut. Sekaligus, mereka ingin supaya aplikasi web bisa dijalankan di Cloud, daripada menggunakan infrastruktur server sendiri yang lokasinya ada di Data Center mereka.

Karena sudah banyak sekali peningkatan fitur pada PHPMaker v2023, apalagi selisih dengan versi v2017 sampai 6 versi major, akhirnya saya memutuskan untuk menggunakan PHPMaker v2023. Rasanya sayang sekali kalau tidak menggunakan fitur-fitur canggih di versi 2023.

Semua system requirement untuk aplikasi PHPMaker v2023 dan web server-nya, tentu sudah saya penuhi. Dilanjutkan dengan proses koneksi ke database Microsoft SQL Server 2008, berjalan dengan lancar, tidak ada kendala sama sekali.

Saat proses generate file script, juga berjalan dengan lancar. Semua file script berhasil di-generate tanpa error atau kendala sama sekali.

Hingga tiba saatnya, aplikasi web dijalankan pada server localhost, dan muncullah error berikut:

D:\wamp\www\newsqlserver2023\vendor\doctrine\dbal\src\Driver\API\SQLSrv\ExceptionConverter.php(33): An exception occurred while executing a query: SQLSTATE [42000, 102]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ‘OFFSET’. SQLSTATE [42000, 153]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid usage of the option NEXT in the FETCH statement. SQLSTATE [42000, 8180]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared.

Sedikit kecewa saat itu, lho kok bisa error sih? Sementara dari sisi aplikasi PHPMaker v2023 berhasil terhubung ke database? Tentu ada yang tidak beres, nih!

Kesimpulan awal, aplikasi web yang dihasilkan oleh PHPMaker v2023 tidak kompatibel dengan database Microsoft SQL Server 2008, sekalipun dari sisi aplikasi PHPMaker-nya tidak ada masalah ketika terhubung ke database tersebut.

Kenapa muncul error tersebut ya? Hm, jadi penasaran nih. Oke, kalau begitu, saatnya mencoba aplikasi PHPMaker v2022, eh hasilnya juga sama dengan PHPMaker v2023.

Karena masih penasaran juga, lalu saya coba mundur satu versi major sebelumnya, yaitu v2021, dan ternyata berhasil Saudara-saudara!

Benang merah pun mulai terlihat. Aplikasi web yang dihasilkan oleh PHPMaker v2021 berjalan dengan mulus saat menggunakan database Microsoft SQL Server 2008, sementara tidak berhasil untuk aplikasi web yang dihasilkan oleh PHPMaker v2022 maupun v2023; muncul error yang sama dengan di atas tadi.

Akhirnya saya baca-baca ulang lagi dokumentasi yang menjelaskan perubahan dari versi 2021 ke versi 2022. Di situ dijelaskan bahwa DBAL (Database Abstraction Layer) yang digunakan oleh PHPMaker v2022 telah di-upgrade ke versi 3 dari versi 2.

Apalagi di sana disebutkan bahwa DBAL 3 tidak mendukung database Microsoft SQL Server 2008 dan versi-versi sebelumnya. Wah, semakin kecewa deh jadinya.

Hmmm, tapi tunggu dulu. Jangan cepat menyerah gitu dong. Pasti ada celah nih yang bisa digunakan supaya bisa seperti PHPMaker v2021. Naluri detektif pun muncul kembali.

Langsung saya bandingkan script DBAL yang digunakan oleh aplikasi web yang dihasilkan oleh PHPMaker v2021 dan v2022.

Singkat cerita, dapatlah perbedaannya pada file AbstractSQLServerDriver.php yang lokasinya berada pada folder berikut: D:\wamp\www\phpmaker2021\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\

Coba perhatikan beberapa baris kode di bagian atas file tersebut:

<?php

namespace Doctrine\DBAL\Driver;

use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Driver\DriverException as TheDriverException;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Exception\DriverException;
use Doctrine\DBAL\Platforms\SQLServer2005Platform;
use Doctrine\DBAL\Platforms\SQLServer2008Platform;
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
use Doctrine\DBAL\Platforms\SQLServerPlatform;
...

?>

Sengaja saya potong isi file tersebut, dengan menampilkan pada bagian teratas itu saja.

Sekarang perhatikan lagi potongan kode yang berikut:

...
use Doctrine\DBAL\Platforms\SQLServer2005Platform;
use Doctrine\DBAL\Platforms\SQLServer2008Platform;
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
...

Sementara pada aplikasi web yang dihasilkan oleh PHPMaker v2022 dan v2023, tidak ada kode tersebut. Nah, akhirnya mulai ketahuanlah penyebabnya. Pantesan aplikasi web yang dihasilkan oleh v2022 maupun v2023 tidak berhasil.

Berarti, kesimpulannya, versi DBAL yang digunakan oleh PHPMaker v2023 harus di-downgrade ke versi DBAL yang digunakan oleh PHPMaker v2021.

Oke, saatnya untuk mengubah kode berikut pada file template yang bername composer.json pada direktori berikut: C:\Users\{user}\AppData\Roaming\phpmaker2023\node_modules\@phpmaker\php2023.

...
"doctrine/dbal": "^3.4.4",
...

menjadi seperti ini:

...
"doctrine/dbal": "^2.12.1",
...

Itu artinya, kita men-downgrade versi DBAL-nya dari versi 3.4.4. ke versi 2.12.1. Mengapa? Karena PHPMaker v2021 menggunakan DBAL versi 2.12.1.

Setelah file composer.json disimpan, lalu coba generate ulang semua file script dengan PHPMaker v2023. Sambil memperhatikan log generate, ternyata PHPMaker v2023 otomatis meng-upgrade lagi versi DBAL-nya dari versi 2.12.1 ke versi 2.13.9:

...
- Installing doctrine/dbal (2.13.9): Extracting archive
...

Ketika saya cek ke github-nya si dbal, ternyata versi minor terakhir untuk versi 2 memang betul versi 2.13.9. Cukup cerdik juga nih composer-nya. Dia otomatis menyarankan untuk pakai versi minor yang terakhir.

Oke, sampai di sini, berarti proses downgrade dari versi 3 ke versi 2 berjalan dengan lancar.

Setelah semua file script berhasil di-generate, maka tibalah saatnya untuk mencoba aplikasi web yang dihasilkan oleh PHPMaker v2023. Mau tahu hasilnya?

Horeeee… ternyata berhasil Saudara-saudara! Akhirnya, aplikasi web yang dihasilkan oleh PHPMaker v2023, berhasil terhubung ke database Microsoft SQL Server 2008 tanpa error sedikitpun. Wussshh… wusshhh… berjalan dengan lancar.

Rasanya senang, lega, dan puas semuanya bercampur menjadi satu. Plus bonus senyum-senyum sendiri, sambil ngomong dalam hati: oalaaaaah, ternyata begitu saja toh solusinya. Hohoho… 😀

Sebenarnya saya masih curiga. Kok semudah itu ya, Ferguso? Jangan-jangan ini hanya berhasil terhubung ke database dan menampilkan datanya saja. Bagaimana dengan fungsi-fungsi CRUD? Apakah bisa?

Hmm… akhirnya karena masih penasaran, langsung coba dong fungsi-fungsi CRUD-nya…, eeeh ternyata berjalan dengan mulus juga, Saudara-saudara! Keren kan?

Sampai di sini saya memang belum melihat apa saja fitur-fitur di DBAL 3 yang tidak terdapat di DBAL 2. Tapi untuk saat ini, paling tidak kita sudah berhasil membuat PHPMaker v2023 menyapa database Microsoft SQL Server 2008 melalui aplikasi web yang sudah dihasilkan olehnya.

Rasanya sayang untuk dilewatkan begitu saja peristiwa ini. Jadilah artikel ini, siapa tahu ada yang membutuhkan. Paling tidak, kalau di waktu mendatang Penulis mengalami kejadian yang mirip seperti tadi, sudah tahu di bagian mana yang perlu disesuaikan.

Semakin keren aja nih PHPMaker v2023. Ternyata aplikasi web yang dihasilkannya masih bisa menyapa database Microsoft SQL Server 2008.

Semoga fungsi-fungsi lainnya lancar-lancar saja ya, meskipun DBAL yang digunakan di-downgrade dari versi 3 ke versi 2.

Artikel ini diperbarui pada Senin, 14 November 2022 dengan temuan sebagai berikut:

Fungsi CRUD secara umum berjalan dengan normal, data bisa ditampilkan pada halaman List, View, Edit, demikian juga fungsi Add, Edit, dan Delete berjalan lancar.

Ditemukan error [SQL Server]’CONCAT’ is not a recognized built-in function name saat Pengguna Akhir melakukan pencarian pada field yang menggunakan Lookup Table, baik melalui Modal Dialog maupun kotak pencarian di control Select2.

Untuk mengatasi error tersebut, maka satu-satunya cara adalah dengan memodifikasi kode yang sudah di-generate oleh PHPMaker. Kode ini berada di dalam folder models pada nama table yang bertalian. Contoh, kode berikut terdapat di dalam file CbaDetail.php untuk table yang bernama cba_detail.

Kita cukup menyesuaikan parameter ke-16 (terakhir) dari object Lookup di bawah ini, misalnya kita mengganti kode berikut:

$this->Kantor_Tujuan->Lookup = new Lookup('Kantor_Tujuan', 'master_kantor', false, 'Kode_Kantor', ["Nama_Kantor","Kode_Kantor","",""], '', '', [], [], [], [], [], [], '', '', "CONCAT([Nama_Kantor],'" . ValueSeparator(1, $this->Kantor_Tujuan) . "',[Kode_Kantor])");

menjadi seperti ini:

$this->Kantor_Tujuan->Lookup = new Lookup('Kantor_Tujuan', 'master_kantor', false, 'Kode_Kantor', ["Nama_Kantor","Kode_Kantor","",""], '', '', [], [], [], [], [], [], '', '', '');

Mengapa? Karena fungsi CONCAT baru hanya ada di database Microsoft SQL Server 2012, sedangkan di Microsoft SQL Server 2008 belum ada. Oleh karena itu, kita cukup mengganti parameter ke-16 (terakhir) dari object Lookup menjadi string kosong (”).

Alternatif solusi lainnya adalah dengan membuat Database View yang menggabungkan dua field tadi menjadi satu field lalu beri nama alias untuk gabungan kedua field tersebut. Selanjutnya jadikan field gabungan di Database View tadi menjadi Display field #1 saja.

Dengan cara yang terakhir ini, maka kita tidak perlu menyesuaikan kode yang sudah di-generate oleh PHPMaker 2023. Keren, ‘kan? 😉

Ditempatkan di bawah: PHPMaker Ditag dengan:Belajar PHPMaker, Microsoft SQL Server 2008, PHPMaker 2023, PHPMaker Indonesia, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com dan ilovephpmaker.com.

Composer Packages di PHPMaker, Apa Itu?
Mengapa PHPMaker Memuat Kode Javasript dan CSS secara Asynchronous?

Komentar

  1. Diki mengatakan

    Rab, 16 November 2022 pada 9:25 am

    sungguh pengalaman yang luar biasa om Masino
    anda membeberkan segalanya disini seolah-olah hal itu biasa, semoga pencerahan dan pengalaman anda termasuk dalam kategori ibadah yaa.
    Tetap berkarya om.
    Salam

    Balas
    • Masino Sinaga mengatakan

      Rab, 16 November 2022 pada 9:32 am

      Amiiin. Terima kasih om Diki. 😀

      Balas

Trackbacks

  1. Composer Packages di PHPMaker, Apa Itu? – Masino Sinaga berkata:
    Sab, 19 November 2022 pukul 11:10 am

    […] Anda di sini: Beranda / PHPMaker / Composer Packages di PHPMaker, Apa Itu? Ketika PHPMaker 2023 Menyapa Database Microsoft SQL Server 2008 […]

    Balas

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Pos-pos Terbaru

  • Mudahnya Menyesuaikan Timezone di Calendar Report pada PHPMaker 2023
  • Jangan Gunakan setFailureMessage di Calendar Report!
  • Seberapa Terang atau Gelap Sidebar Aplikasi Webmu?
  • Select2 di PHPMaker 2023 Sekarang Semakin Baik
  • Hati-hati Menggunakan CurrentUserInfo di PHPMaker!

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Dewa Budi pada Mudahnya Memperbarui 4 Field Ini Secara Otomatis di Aplikasi Web dari PHPMaker
  • Masino Sinaga pada Mudahnya Memperbarui 4 Field Ini Secara Otomatis di Aplikasi Web dari PHPMaker
  • Dewa Budi pada Mudahnya Memperbarui 4 Field Ini Secara Otomatis di Aplikasi Web dari PHPMaker
  • Masino Sinaga pada Mudahnya Memperbarui 4 Field Ini Secara Otomatis di Aplikasi Web dari PHPMaker
  • Dewa Budi pada Mudahnya Memperbarui 4 Field Ini Secara Otomatis di Aplikasi Web dari PHPMaker

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2021 | WordPress | Catat masuk | Kembali ke atas