Berbeda dengan form, report harus melibatkan sintaks SQL, yang mungkin sangat kompleks, yang memiliki relasi dengan kolom yang tersedia untuk diinput oleh pengguna. Hasil dari query merupakan isi report. Dan kita bebas untuk menentukan urutan kolom dalam report.
Header dan footer juga dapat dibuat, yang masing-masing bisa lebih dari satu baris, dan per
barisnya, bisa lebih dari satu kolom. Header dan footer dapat berisikan teks statik, hasil dari
query, gambar, dan lainnya. Format report yang didukung adalah: PDF, HTML, HTML
(printer friendly), dan CSV.
Apa saja yang tersedia dalam report?
- Sintaks JSON sederhana
- Semua key (input HTML) dalam data diperlukan
- Report juga dapat digunakan sebagai data entry, menggunakan insert SQL query. Custom result message/pesan hasil khusus (berdasarkan hasil query SQL) juga didukung. Menggunakan query SQL, data entry dapat bekerja dengan beberapa tabel
- Header dan footer didukung. Jika tidak ditentukan, header dan footer default akan dibuat. Mendukung teks biasa, SQL Query, dan gambar . Header dan footer disajikan sebagai tabel (beberapa baris / kolom; satu tabel untuk header, satu tabel untuk footer). Jika ada perbedaan jumlah kolom untuk setiap baris, jumlah kolom yang terbesar akan digunakan
- Header default: Baris pertama: kolom pertama (judul report), kolom kedua (informasi report); Baris berikutnya: kolom pertama (kunci pencarian), kolom kedua (input pengguna)
- Footer default (SELECT SQL): Baris pertama: kolom pertama (jumlah baris), kolom kedua ("row(s)"/translated)
- Footer default (NON-SELECT SQL): Baris pertama: kolom pertama (pesan atau ""), kolom kedua ("")
- Report yang printer-friendly didukung dalam format output default (HTML)
Format Report
- HTML lengkap dengan semua menu (default).
- HTML tanpa menu dan warna (printer friendly). Digunakan apabila report tersebut ingin dicetak langsung dari web browser.
- CSV, berguna apabila report tersebut ingin diolah lagi mempergunakan program spreadsheet.
- PDF, berguna apabila report ingin disimpan dan dicetak (lagi) di lain waktu di sistem lain. Kita dapat menentukan ukuran kertas dan margin. Untuk menggunakan fitur ini perlu modul yang dibutuhkan.
Referensi Kode Report
- Form dan Report memiliki cukup banyak kemiripan antar keduanya.
- Harus sintaks JSON yang valid (json.org)
- String (termasuk keys di bawah) harus dikutip ganda (antara " dan ")
- Tanda koma di akhir dictionary atau list tidak diijinkan.
- Setiap key adalah case-sensitive, di mana huruf besar/kecil dibedakan.
- Keys:
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
data
|
Data
wizard / pencarian
|
list
dari dictionary
|
Wajib
(mungkin saja berisikan list kosong)
|
Lihat:
Keys (data)
|
security
|
Security
pada report
|
dictionary
|
Wajib
|
Lihat:
Keys (security)
|
title
|
Judul
report
|
string
|
Opsional
|
“Laporan
Saya”
|
info
|
Informasi
tentang report
|
string
|
Opsional
|
“Informasi
Laporan”
|
sql
|
Query
SQL; harap diingat bahwa placeholder mana pun harus memiliki hubungan dengan
key pada data (lihat Keys (data))
|
string
|
Wajib
|
"select a.a as 'column a of table1', a.e from table1 a where a.a = $input_a_a
and a.e > $a_e"
|
message
|
custom result message; hanya untuk query
SQL yang mengembalikan integer (insert, update, dll). Berguna untuk fungsi data
entry.
- Harus
terdiri atas 3 anggota (str)
- $result
(dalam message) akan digantikan oleh hasil SQL Query yang sebenarnya
- $<column>
akan digantikan dengan nilai input dari pengguna untuk kolom yang dituju
|
list
|
Opsional
|
["unknown result",
"zero result", "success:
$result"]
|
headers
|
Header
custom.
- List
dari list (baris) yang berisi list (kolom) yang berisikan 3 anggota (tiap cell)
(str, str/int, dict)
- cell:
[tipe, nilai, atribut]
type:
“”(teks biasa), “sql”(query SQL), “files.image”
value:
semua nilai valid sesuai tipe
attr:
{}
- untuk
tipe “sql” $result_row_count akan digantikan oleh jumlah baris sebenarnya
(atau -1); $result akan digantikan oleh hasil SQL Query (integer/non-select
atau -1); $result_message akan digantikan oleh pesan sebenarnya (atau “”
untuk custom result message); tiap key di data akan digantikan dengan nilai
yang diinput pengguna; pengutipan dilakukan secara otomatis; query SQL harus
mengembalikan satu kolom: a
|
list
dari list yang berisi list
|
Opsional
|
|
footers
|
Footer
custom.
Ketentuan
sama seperti header
|
list
dari list yang berisi list
|
Opsional
|
|
paper
|
Ukuran
kertas (PDF).
Harus
bilangan integer/float (lebar dan tinggi)
|
list
|
Opsional
|
|
margins
|
Ukuran
margin (PDF).
Harus
bilangan integer/float (kiri, kanan, atas, dan bawah)
|
list
|
Opsional
|
|
confirm
|
Pesan
konfirmasi
|
str
|
Optional
|
|
focus
|
Kolom
yang menjadi fokus
|
str
|
Opsional
|
|
link
|
Tautan
|
list
dari list 2 anggota [target, label]
|
Opsional
|
[[“https://messi.com/”,
“messi”]]
|
- Keys (Data)
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
key
|
Nama
input HTML: hanya underscore dan alfanumerik yang diperbolehkan
|
string
|
Wajib
|
“input_y_y”
|
label
|
Label
|
string
|
Opsional
|
“kolom
5 =”
|
readonly
|
Data
hanya untuk dibaca (0= data masih bisa dimodifikasi, 1 = hanya bisa dibaca)
|
integer
|
Opsional
|
0
|
reference
|
Nilai
yang telah ditentukan sebelumnya.
- str:
query SQL; mengembalikan 2 kolom: a dan b; HTML select.
- list:
nilai statis; list dari 2 anggota; HTML select.
- int:
flag (2: HTML input password)
|
string,
list, atau integer
|
Opsional
|
- "select col1 as a, col2 as b
from table1"
- [ ["0",
"NO"], ["1", "YES"]
]
- 2
|
default
|
Nilai
bawaan.
- str,
int: digunakan sebagaimana mestinya.
- list:
pemanggilan fungsi SQL setidaknya 1 anggota; anggota pertama harus berbentuk
string/str; nilai kembalian akan digunakan sebagai default.
- list
(query SQL); harus terdiri dari anggota berbentuk str; anggota pertama:
string kosong; anggota kedua: query SQL yang mengembalikan satu kolom: a.
|
string,
list, atau integer
|
Opsional
|
- ["sqliteboy_md5",
"hello"]
- ["sqlite_version"]
|
constraint
|
Memeriksa
sebelum laporan dibuat.
Berisikan
4 anggota
[“nama_function”,
as_str, “kondisi”, “pesan_error”]
nama_fungsi
boleh dikosongkan; as_str harus bernilai 1 (memperlakukan pemanggilan argumen
function sebagai string) atau 0; kondisi tidak boleh kosong; kondisi harus
berisikan perbandingan boolean; pesan_error boleh dikosongkan;
|
list
|
Opsional
|
- ["", 0, ">
10", "must be larger than 10"];
Memeriksa
apakah nilai kolom>
10
- ["sqliteboy_len", 1,
"> 10",
""]; |
Memeriksa
apakah sqliteboy_len (nilai kolom)> 10
|
type
|
Tipe:
berbentuk integer (default: string).
Jika
tipe ditentukan, input akan dikonversikan menjad integer menggunakan int-nya
python
|
string
|
Opsional
|
- Key (Security)
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
run
|
Untuk mengeksekusi report; pengguna
berstatus admin selalu dapat mengeksekusi report.
“”: semua pengguna bisa
mengeksekusi report.
list: hanya pengguna yang
terdaftar di list saja yang dapat mengeksekusi report.
|
“” atau list
|
Wajib
|
- []
- ["pengguna2",
"pengguna3"]
|
Catatan:
Gunakan function sqliteboy_as_integer pada constraint untuk konversi atau perbandingan integer.
Contoh Report
1. {
"title" : "Laporan Saya",
"info" : "Informasi Laporan",
"header": ["column a of table1", "e"],
"sql" : "select a.a as 'column a of table1', a.e from table1 a where a.a = $input_a_a and a.e > $a_e",
"data" : [
{
"key" : "input_a_a",
"label" : "column a equals",
"reference" : [ ["0", "NO"], ["1", "YES"] ],
"default" : "1"
},
{
"key" : "a_e",
"label" : "e (as integer) >",
"constraint": ["sqliteboy_as_integer", 1, "> 0", "e must be integer"]
}
],
"security" : {
"run" : ""
}
}
"title" : "Laporan Saya",
"info" : "Informasi Laporan",
"header": ["column a of table1", "e"],
"sql" : "select a.a as 'column a of table1', a.e from table1 a where a.a = $input_a_a and a.e > $a_e",
"data" : [
{
"key" : "input_a_a",
"label" : "column a equals",
"reference" : [ ["0", "NO"], ["1", "YES"] ],
"default" : "1"
},
{
"key" : "a_e",
"label" : "e (as integer) >",
"constraint": ["sqliteboy_as_integer", 1, "> 0", "e must be integer"]
}
],
"security" : {
"run" : ""
}
}
2. {
"title" : "Laporan Saya",
"info" : "Informasi Laporan",
"header": ["column a of table1", "e"],
"sql" : "select a.a as 'column a of table1', a.e from table1 a where a.a = $input_a_a and a.e > $a_e",
"data" : [
{
"key" : "input_a_a",
"label" : "column a equals",
"reference" : [ ["0", "NO"], ["1", "YES"] ],
"default" : "1"
},
{
"key" : "a_e",
"label" : "e (as integer) >",
"constraint": ["sqliteboy_as_integer", 1, "> 0", "e must be integer"]
}
],
"focus" : "a_e",
"link" : [["http://sqliteboy.com","sqliteboy"]],
"headers" : [
[
["files.image", "31", {}],
["", "Laporan Saya", {}]
],
[
["", "Waktu", {}],
["sql", "select sqliteboy_time3(sqliteboy_time()) as a", {}]
],
[
["", "Pengguna", {}],
["sql", "select sqliteboy_x_user() as a", {}]
],
[
["", "kolom a sama dengan", {}],
["sql", "select $input_a_a as a", {}]
],
[
["", "e (sebagai integer) >", {}],
["sql", "select $a_e as a", {}]
],
[
["", "Baris", {}],
["sql", "select $result_row_count as a", {}]
]
],
"security" : {
"run" : ""
}
}
"title" : "Laporan Saya",
"info" : "Informasi Laporan",
"header": ["column a of table1", "e"],
"sql" : "select a.a as 'column a of table1', a.e from table1 a where a.a = $input_a_a and a.e > $a_e",
"data" : [
{
"key" : "input_a_a",
"label" : "column a equals",
"reference" : [ ["0", "NO"], ["1", "YES"] ],
"default" : "1"
},
{
"key" : "a_e",
"label" : "e (as integer) >",
"constraint": ["sqliteboy_as_integer", 1, "> 0", "e must be integer"]
}
],
"focus" : "a_e",
"link" : [["http://sqliteboy.com","sqliteboy"]],
"headers" : [
[
["files.image", "31", {}],
["", "Laporan Saya", {}]
],
[
["", "Waktu", {}],
["sql", "select sqliteboy_time3(sqliteboy_time()) as a", {}]
],
[
["", "Pengguna", {}],
["sql", "select sqliteboy_x_user() as a", {}]
],
[
["", "kolom a sama dengan", {}],
["sql", "select $input_a_a as a", {}]
],
[
["", "e (sebagai integer) >", {}],
["sql", "select $a_e as a", {}]
],
[
["", "Baris", {}],
["sql", "select $result_row_count as a", {}]
]
],
"security" : {
"run" : ""
}
}
Selamat mencoba :).
Tidak ada komentar:
Posting Komentar