Overview¶
Domain adalah mekanisme dari efitrac untuk melakukan filterisasi data, query ke Database langsung di buat dari domain ini. terdapat 2 tipe domain pada efitrac yaitu domain yang dijabarkan dengan menggunakan String dan dijabarkan dengan menggunakan Java Object. Domain dapat di jabarkan saat melakukkan coding pada Java atau pada saat mendefinisikan Xml tampilan.
Dalam sebuah domain terdapat Leaf, Leaf adalah sebuah kondisi perbandingan contoh ('id', '=', '1') atau sebuah kondisi logika '&' , antara Leaf di pisahkan dengan sebuah tanda ,.
Cara Pembuatan Domain¶
Cara pembuatan domain dengan String atau dengan Object agak berbeda, untuk Domain yang dijabarkan dengan menggunakan String di buat dengan menggunakan bantuan class Domain, untuk tipe Object sendiri cukup dengan menggunakan class List dan turunnannya.
Pembuatan Domain Dengan Menggunakan String¶
Struktur pembuatan domain dengan String :
Domain domain = Domain.Builder("<representasi domain yang di buat>").build();
Pembuatan Domain Dengan Menggunakan Object¶
Struktur pembuatan domain dengan Object :
List<Object> domain = new ArrayList<>();
domain.add(new Object[]{"<Field Yang Akan Di Bandingkan>", "<Operator Pembanding>", <Nilai Yang Akan Di Bandingkan>);
domain.add("<kondisi or atau and>");//kondisi "and" atau "or" kalau di perlukan
Tata cara dalam pembuatan domain¶
Terdapat tata cara yang perlu di perhatikan dalam mendefinisikan domain, dan terdapat sedikit perbedaan dalam pendefinisian dengan String ataupun dengan Object. Berikut adalah cara-cara pendefinisian domain :
| Pendefinisian | String | Object |
|---|---|---|
| Penjabaran value String | harus menggunakan ' ' | cuma menggunakan Object String biasa tanpa menggunakan ' ' |
| "('name', '=', 'budi')" | new Object[]{"name", "=", "budi"} | |
| Penjabaran value Integer | tanpa menggunakan '' | menggunakan value Integer |
| "('number', '=', 1)" | new Object[]{"number", "=", 1} | |
| Value untuk ID | value untuk ID sama dengan penjabaran value integer | value untuk ID sama dengan penjabaran value integer |
| Penjabaran value untuk "in" atau "not in" | ||
| "('ids', 'in', [1,2,3])" | List<Integer> paramIds = new ArrayList<>(); paramIds.add(1); paramIds.add(2); paramIds.add(3); new Object[]{"ids", "in", paramIds}; |
|
| Penjabaran value untuk between | unknown (TBD) | |
| - | List<Object> list = new ArrayList<>(); list.add(<start value>); list.add(<end value>); new Object[]{"date","between", list}; |
|
| Penjabaran fungsi | di mulai dengan '=' | di mulai dengan '=' |
| "('user_id', '=', "=current_user_id()")" | new Object[]{"user_id","=", "=current_user_id()"}; |
Operator¶
Operator adalah tanda operasi pembanding atau logika yang di sediakan untuk di pakai dalam pendefinisian domain, Operator pada domain ada 2 jenis Leaf operator dan Domain operator, Leaf Operator di gunakan untuk memberikan kondisi pembanding pada sebuah Leaf, dan Domain Operator di gunakan untuk memberikan kondisi yang menghubungkan antar Leaf.
Operator pembanding yang ada pada domain(Leaf Operator)¶
| Nama Operator | Simbol Dari Operator |
|---|---|
| equals | = |
| not equals | != |
| less equals than | <= |
| less than | < |
| more equals than | >= |
| more than | > |
| like | like |
| not like | not like |
| not in | not in |
| in | in |
| between | between |
Operator kondisi yang ada pada domain(Domain Operator)¶
| Nama Operator | Simbol Dari Operator |
|---|---|
| and | & |
| or | | |
| negate/not* | ! |
* negate belum support Operator between, dan cuma di support untuk pencarian dengan AbstractModel.searchN
TBD :
- Link ke dokumentasi AbstractModel.searchN
Fungsi-fungsi yang di sediakan pada domain¶
Fungsi-fungsi bawaan di sediakan untuk membantu dan memperkuat kemampuan dari domain. berikut adalah fungsi-fungsi yang di support oleh domain :
current_user_id¶
Untuk mendapatkan user id yang sedang login saat ini.
Contoh :
"[('id','=','=current_user_id()')]"
str_to_date¶
Untuk mengubah inputan dari string menjadi date.
Contoh :
"[('tanggal','=','=str_to_date()')]"
date_create(instance tanggal, tipe modifier, nilai modifier)¶
Membuat tanggal dan mengubah tanggal agar sessuai dengan kebutuhan.
Contoh :
"[('tanggal','=','=date_create('now','sec',1)')]"
List value parameter 1
| Value | Keterangan |
|---|---|
| now | tanggal saat ini |
List value parameter 2
| Value | Keterangan |
|---|---|
| sec | ditambahkan dengan detik |
| day | ditambahkan dengan hari |
| month | ditambahkan dengan bulan |
| year | ditambahkan dengan tahun |
| time | ditambahkan dengan jam,menit,detik dengan format jam:menit:detik |
today¶
Untuk mendapatkan tanggal saat ini.
Contoh :
"[('tanggal','=','=today()')]"
ref(...)¶
Untuk mendapatkan id dari data yang di definisikan di xml
Contoh :
"[('id','=','=ref('module.record_name')')]"
TBD :
- Kata-katanya rasanya masih kurang tepat
exec(jenis, nama model, nama fungsi)¶
Untuk mengeksekusi method yang ada pada sebuah model.
Contoh :Pendefinisian domain
"[('id','=','=exec('func','module.Model','getMyCustomFunc($parent_id)')')]"
Pendefinisian fungsi
public Integer getMyCustomFunc(Integer parentId) {
Integer id;
//Do something here
return id;
}
Return data type di sesuaikan dengan tipe data field di sisi kanan dan Leaf Operator-nya, contoh kalau Leaf Operatornya
inmaka menggunakanList<...>.
eval¶
???
TBD :
- cari info lebih lanjut soal eval
Konversi dari penjabaran String ke List<Object>¶
Untuk menjembatani antara domain dengan representasi String atau Domain dapat menggunakan perintah NExpression.toObjectList(String domain) apabila ingin mengubah langsung dari String ke penjabaran tipe Object, apabila sudah dalam bentuk object Domain dapat menggunakan Domain.toObjectList() secara langsung.
Fitur khusus saat menggunakan domain dengan String pada XML untuk view¶
Parameter¶
Fungsi parameter digunakan untuk mengirimkan nilai dari form yang di buat ke domain, parameter di mulai dengan tanda "$" di ikuti dengan nama field yang ada pada model.
Contoh :
contoh sederhana
domain="[('id','=','$parent_id')]"
contoh dengan menggunakan fungsi
domain="[('id','=','=exec('func','module.Model','getMyCustomFunc($parent_id)')')]"
Parameter khusus selain field yang ada pada model :
| Nama | Kegunaan |
|---|---|
| parent_id | untuk mendapatkan id dari model parent dari form |