Form dibangun dengan konsep berupa kolom/field yang terlibat, di mana kolom/field bisa diatur agar harus diisi (required), dapat dibaca saja (readonly), telah terisi nilai tertentu (default), bebas diisi atau user harus memilih (dalam bentuk combo box) dan lainnya.
Apa saja yang tersedia dalam form?
- Data entry sederhana
- Sintaks JSON sederhana
- Field readonly
- Field required
- Mendukung nilai yang telah ditentukan (opsi) dari SQL Query atau list Python
- Nilai default: panggilan fungsi, nilai statis, atau SQL Query
- Constraint: memeriksa sebelum menyimpan, untuk mencegah menyimpan nilai yang tidak valid (dimungkinkan untuk memanggil fungsi sebelum perbandingan)
- Pengaturan security yang sederhana
- Onsave: menjalankan SQL Query (dan menggunakan hasilnya) sebelum data disimpan. SQL Query bisa sangat kompleks dan melibatkan pemanggilan fungsi bersarang.
- Subform: digunakan dalam one to many relationship. Namun, field dalam subform terbatas dibandingkan dengan form.
- Pesan hasil custom (berdasarkan hasil query SQL) juga didukung
- Statement SQL query tambahan dapat diberikan, dan masing-masing akan dieksekusi secara berurutan, jika Anda perlu melakukan tugas tambahan, setelah data form disimpan.
- insert into table dapat dinonaktifkan dengan mengatur insert key menjadi nilai nol / negatif. Ini berguna jika Anda perlu memperbaharui / menghapus data dalam tabel, menggunakan statement query SQL tambahan. Secara default, menyimpan form / subform akan menyisipkan baris baru ke dalam tabel.
- Mendukung python handler, yang akan secara otomatis dipanggil bila disediakan. Python handler memudahkan integrasi dengan sistem eksternal (misalnya: sistem ERP).
- Tautan dapat ditambahkan ke form
- Extended result message: dimungkinkan untuk melakukan operasi perhitungan pada field form, dan menggunakan hasilnya.
Referensi Kode Form
- 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.
- Setiap definisi form adalah dict ({}).
- Keys:
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
data
|
Data pada form
|
list dari dictionary
|
Wajib
|
Lihat: Keys (data)
|
security
|
Security pada form
|
dictionary
|
Wajib
|
Lihat: Keys (security)
|
title
|
Judul form
|
string
|
Opsional
|
“Form Saya”
|
info
|
Informasi tentang form
|
string
|
Opsional
|
“Informasi Form”
|
sub
|
Subform:
Harus terdiri dari 5
anggota: tabel terkait (str); kolom relasi
dalam tabel subform ke tabel form (str); list dari [jumlah baris
(int), jumlah baris wajib diisi (int)]; list dari
list kolom [kolom (str), label (str), reference, default]; informasi
subform (str).
|
list
|
Opsional
|
["table2", "a",
[5,3], [["b", "Column B", [ ["0",
"NO"], ["1",
"YES"] ], "1"], ["c", "Column C",
"select a, b from table1",
""]], "My Subform"]
|
message
|
custom result message
- Tidak bisa digunakan
untuk subform
- 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
- $last_insert_rowid
akan diganti oleh last_insert_rowid () hasil panggilan fungsi (setelah
disisipkan ke tabel utama)
- $python_handler akan
diganti dengan nilai pengembalian python handler (jika disediakan, nilai defaultnya:
-1)
- Bisa menggunakan html
|
list
|
Opsional
|
["unknown result",
"zero result", "success:
$result"]
|
result
|
extended result message:
Kriteria yang dimilki
persis dengan message dimana perbedaan result memiliki 2 anggota (str)
|
list
|
Opsional
|
[ "$a + $b = $result",
"select $a+$b as result" ]
|
sql0
|
Statement SQL Query tambahan, yang
akan
dikerjakan sebelum form
diproses.
|
list
|
Opsional
|
|
sql2
|
Statement SQL Query tambahan, yang
akan
dikerjakan setelah form
diproses.
|
list
|
Opsional
|
["insert into table3(a, b, c, d,
e) values($a, $b,
$c, $d, $e)", "insert into
table4(x)
values($last_insert_rowid)"]
|
insert
|
mencegah insert baris baru ke dalam tabel saat form /
subform disimpan jika
nilai nol / negatif diberikan
|
integer
|
Opsional
|
|
confirm
|
Pesan konfirmasi
|
string
|
Optional
|
|
focus
|
Kolom yang menjadi fokus
|
string
|
Opsional
|
|
link
|
Tautan
|
list dari list 2 anggota
[target, label]
|
Opsional
|
[[“https://messi.com/”, “messi”]]
|
- Keys (Data)
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
table
|
Nama tabel; hanya mendukung
satu tabel, tabel lain akan diabaikan jika sudah ada tabel pertama.
|
string
|
Wajib
|
“tablex”
|
column
|
Kolom
|
string
|
Wajib
|
“kol5”
|
label
|
Label
|
string
|
Opsional
|
“kolom 5”
|
required
|
Data wajib diisi sebelum
disimpan (0 = tidak wajib, 1 = wajib).
|
integer
|
Opsional
|
1
|
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 form
disimpan.
- 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
|
onsave
|
Menjalankan query SQL
sebelum data disimpan
- Query SQL bisa saja sangat
kompleks dan bercabang
- Query SQL harus
mengembalikan satu kolom: onsave
- Pengutipan dilakukan secara
otomatis
- $value akan digantikan
dengan input dari pengguna
- Nilai yang dikembalikan
akan disimpan ke dalam tabel (bukan nilai yang diinput pengguna)
|
string
|
Opsional
|
"select $value || ' : ' ||
sqliteboy_upper(sqliteboy_md5($value)) as onsave"
|
- Key (Security)
Key
|
Deskripsi
|
Tipe
|
Status
|
Contoh
|
run
|
Untuk mengeksekusi form; pengguna
berstatus admin selalu dapat mengeksekusi form.
“”: semua pengguna bisa
mengeksekusi form.
list: hanya pengguna yang
terdaftar di list saja yang dapat mengeksekusi form.
|
“” atau list
|
Wajib
|
- []
- ["pengguna2",
"pengguna3"]
|
Catatan:
- jika Anda menggunakan primary key pada suatu kolom, kolom yang bersangkutan akan diberi tanda *.
- gunakan function sqliteboy_as_integer pada constraint untuk konversi atau perbandingan integer.
Contoh Form
1. {
"title" : "Form Saya",
"info" : "Informasi Form",
"data" : [
{
"table" : "tabel2",
"column" : "x"
},
{
"table" : "tabel2",
"column" : "y"
},
{
"table" : "tabel2",
"column" : "z"
}
],
"security" : {
"run" : ""
}
}
2. {
"title" : "Form Saya",
"info" : "Informasi Form",
"sub" : [
"table2",
"a",
[5,3],
[
["b", "Column B", [ ["0", "NO"], ["1", "YES"] ], "1"],
["c", "Column C", "select a, b from table1", ""]
],
"Subform Saya"
],
"sql2" : [
"insert into table3(a, b, c, d, e) values($a, $b, $c, $d, $e)",
"insert into table4(x) values($last_insert_rowid)"
],
"data" : [
{
"table" : "table1",
"column" : "a",
"label" : "column a",
"required" : 1,
"reference" : [ ["0", "NO"], ["1", "YES"] ],
"default" : "1"
},
{
"table" : "table1",
"column" : "b",
"reference" : "select sqliteboy_randrange(1, 100000000000) as a, 'hello ' || sqliteboy_time() as b from _sqliteboy_"
},
{
"table" : "table1",
"column" : "c",
"default" : ["sqliteboy_md5", "hello"],
"constraint": ["sqliteboy_len", 1, "= 32", ""],
"onsave" : "select sqliteboy_upper($value) as onsave"
},
{
"table" : "table1",
"column" : "d",
"label" : "d (incorrect larger than 100)",
"required" : 1,
"constraint": ["", 0, "> 100", "must be larger than 100"]
},
{
"table" : "table1",
"column" : "e",
"label" : "e (correct larger than 100)",
"required" : 1,
"constraint": ["sqliteboy_as_integer", 1, "> 100", "must be larger than 100"]
},
{
"table" : "table1",
"column" : "f"
}
],
"focus" : "d",
"link" : [["https://www.fcbarcelona.com/","fcb"]],
"message" : ["hasil tidak diketahui", "kosong", "success: $result"],
"security" : {
"run" : ""
}
}
3. {
"title" : "Perkalian",
"data" : [
{
"table" : "tabel2",
"column" : "v"
},
{
"table" : "tabel2",
"column" : "w"
}
],
"insert" : 0,
"result" : ["$v + $w = $result", "select $v+$w as result"],
"security" : {
"run" : ""
}
}
Selamat mencoba :).
Tidak ada komentar:
Posting Komentar