Senin, 25 Februari 2019

Report pada SQLiteBoy

Report ialah laporan sederhana yang tersedia bila extended feature diaktifkan. Seperti form, report juga dibuat dengan sintaks berupa JSON (http://www.json.org).

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?
  1. Sintaks JSON sederhana
  2. Semua key (input HTML) dalam data diperlukan
  3. 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
  4. 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
  5. Header default: Baris pertama: kolom pertama (judul report), kolom kedua (informasi report); Baris berikutnya: kolom pertama (kunci pencarian), kolom kedua (input pengguna)
  6. Footer default (SELECT SQL): Baris pertama: kolom pertama (jumlah baris), kolom kedua ("row(s)"/translated)
  7. Footer default (NON-SELECT SQL): Baris pertama: kolom pertama (pesan atau ""), kolom kedua ("")
  8. 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" : ""
                   }
    }

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" : ""
                   }
    }

Selamat mencoba :).

Tidak ada komentar:

Posting Komentar