DataTables
Server-side processing untuk jQuery DataTables dengan pagination dan sorting
Endpoint /datatables menyediakan server-side processing yang kompatibel dengan library jQuery DataTables.net. Endpoint ini dirancang khusus untuk menampilkan data dalam tabel interaktif di browser dengan fitur pagination, pencarian teks, dan pengurutan kolom.
Kapan Menggunakan /datatables (When to Use /datatables)
| Skenario | Contoh |
|---|---|
| Tabel data interaktif di browser | Halaman daftar supplier dengan pagination dan search box |
| Integrasi dengan DataTables.net | Frontend menggunakan jQuery DataTables atau wrapper-nya |
| Tabel admin untuk melihat seluruh data | Dashboard admin tanpa filter default scope |
Jika kebutuhan bukan untuk integrasi DataTables.net (misalnya API untuk mobile app atau reporting), gunakan endpoint /read yang memiliki format response standar dan fitur WHERE yang lebih lengkap.
Konfigurasi Payload (Payload Configuration)
Endpoint /datatables memerlukan dua property di payload:
{
"tableName": "supplier",
"primaryKey": "supplier_id",
"fieldName": ["supplier_id", "supplier_code", "supplier_name", "contact_person", "phone", "is_active"],
"datatablesQuery": "SELECT supplier_id, supplier_code, supplier_name, contact_person, phone, is_active FROM supplier",
"datatablesWhere": ["supplier_code", "supplier_name", "contact_person", "all"],
"action": {
"datatables": true
}
}| Property | Fungsi |
|---|---|
datatablesQuery | Query SQL yang digunakan oleh endpoint ini. Tidak boleh mengandung WHERE, ORDER BY, atau LIMIT |
datatablesWhere | Daftar kolom yang dapat di-search. "all" mengaktifkan pencarian di seluruh kolom |
Untuk query yang memerlukan JOIN, gunakan file SQL terpisah:
"datatablesQuery": "file:query/supplier-datatables.sql"Cara Penggunaan (How to Use)
Request Dasar (Basic Request)
{
"draw": 1,
"start": 0,
"length": 10,
"search": { "value": "" }
}| Parameter | Tipe | Default | Keterangan |
|---|---|---|---|
draw | number | 1 | Counter request (dikembalikan di response untuk sinkronisasi) |
start | number | 0 | Offset data (index awal, bukan nomor halaman) |
length | number | 10 | Jumlah data per halaman (maksimal 1000) |
search.value | string | "" | Kata kunci pencarian |
Pencarian Teks (Text Search)
Pencarian dilakukan di kolom yang terdaftar di datatablesWhere. Secara default, pencarian berlaku di semua kolom (searchBy: "all"). Untuk mencari di kolom spesifik, gunakan parameter searchBy:
{
"draw": 1,
"start": 0,
"length": 10,
"search": { "value": "Maju Jaya" },
"searchBy": "supplier_name"
}Pengurutan (Sorting)
Parameter sort_columns mengatur urutan data:
{
"draw": 1,
"start": 0,
"length": 25,
"search": { "value": "" },
"sort_columns": [
{ "column": "supplier_name", "direction": "ASC" }
]
}Format sorting DataTables.net (order[0][column], order[0][dir]) juga tetap didukung. Jika keduanya dikirim, sort_columns yang digunakan.
Filter WHERE
Endpoint /datatables juga mendukung parameter where untuk filter tambahan:
{
"draw": 1,
"start": 0,
"length": 10,
"search": { "value": "" },
"where": [
{ "key": "is_active", "value": true }
]
}Format Response
Endpoint /datatables menggunakan format response yang berbeda dari endpoint lainnya. Response tidak menggunakan envelope standar {success, data, message}, melainkan format native jQuery DataTables.net.
{
"draw": 1,
"recordsTotal": 150,
"recordsFiltered": 45,
"data": [
{
"rownumerator": 1,
"supplier_id": "550e8400-...",
"supplier_code": "SUP-001",
"supplier_name": "PT Maju Jaya",
"contact_person": "John Doe",
"phone": "021-5551234",
"is_active": true
}
]
}| Field | Tipe | Keterangan |
|---|---|---|
draw | number | Echo dari parameter draw di request (untuk sinkronisasi client) |
recordsTotal | number | Total seluruh record di database (sebelum filter) |
recordsFiltered | number | Total record setelah filter pencarian diterapkan |
data | array | Array data untuk halaman saat ini |
data[].rownumerator | number | Nomor urut baris (dimulai dari start + 1) |
Sumber Data (Data Source)
Endpoint /datatables menggunakan datatablesQuery sebagai sumber data. Berbeda dengan /read yang mendukung resolusi viewName → viewQuery → tableName, datatables hanya menggunakan satu sumber:
/datatables → datatablesQuery → fallback: SELECT * FROM tableNameEndpoint /datatables tidak menggunakan viewQuery atau viewName. Jika data yang ditampilkan di tabel memerlukan JOIN, query JOIN tersebut harus ditulis langsung di datatablesQuery.
Perbedaan Kunci dengan /read (Key Differences from /read)
| Aspek | /datatables | /read |
|---|---|---|
| Format response | {draw, recordsTotal, recordsFiltered, data} | {success, data, count, pagination} |
| Pagination | Offset-based (start + length) | Page-based (page + per_page) |
| Sumber data | datatablesQuery | viewName → viewQuery → tableName |
| Default scope | Tidak diterapkan | Diterapkan |
| Use case | Tabel interaktif di browser | API konsumsi, mobile, reporting |
Default scope tidak diterapkan pada /datatables sehingga administrator dapat melihat seluruh data termasuk yang tidak aktif. Pada endpoint /read, default scope otomatis memfilter data sesuai konfigurasi (misalnya hanya menampilkan is_active = true).
Langkah Selanjutnya (Next Steps)
- Lookup untuk data dropdown dan autocomplete
- Read — List Data untuk pengambilan data dengan format standar
- POST /datatables untuk spesifikasi teknis lengkap