Domain adalah sebuah kondisi yang digunakan untuk menyaring atau mencari data. Odoo menggunakan notasi Polish untuk filter domain. Sebenarnya apa sih notasi polish dan bagaimana implementasinya di Odoo?
Polish Notation?
Polish notation juga dikenal sebagai “Prefix notation” Adalah notasi aritmetika dimana pada notasi ini tidak digunakan tanda kurung untuk mendefinisikan prioritas untuk setiap operator. Dalam notasi ini, operator berada di depan operand.
Contoh: + A * B C
Mari kita telusuri lebih dalam lagi tentang Polish Notation.
Di Odoo, domain ditulis menggunakan syntax (‘field_name’, ‘operator’, ‘value’).
Dimana,
- field_name: Adalah nama field yang akan digunakan.
- operator: operator pembanding < , > , <= , >= , = , != .
- value: Value yang akan dievaluasi, dapat menggunakan tipe data Python seperti Integer, Boolean, string, atau list.
Contoh:
Normal Expression: ((A AND B) OR C ) OR (D AND E)
Polish Expression: [‘|’, ‘|’, ‘&’, A, B, C, ‘&’, D, E]
Explanation:
Step 1: Dimulai dari mengambil operator terluar.
((A AND B) OR C ) OR (D AND E) => OR ((A AND B) OR C ) (D AND E)
Step 2: Ulangi step 1 untuk setiap expression dengan langkah sebagai berikut:.
- OR ((A AND B) OR C ) (D AND E) => OR OR ((A AND B) C ) (D AND E)
- OR OR ((A AND B) C ) (D AND E) => OR OR AND ((A B) C ) (D AND E)
- OR OR AND ((A B) C ) (D AND E) => OR OR AND ((A B) C ) AND (D E)
Step 3: Hilangkan tanda kurung.
- OR OR AND A B C AND D E
Jadi, Expression diatas jika akan digunakan untuk filter domain odoo akan menjadi [‘|’, ‘|’, ‘&’, A, B, C, ‘&’, D, E].
Perhatikan gambar berikut:
- If you will try to write the above expression in “Polish” notation as per explanation then, you will get it as per below:
'|', '&', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('use_next_on_work_order_id', '=', id)
Polish Notation dalam odoo dapat digunakan baik dalam XML maupun .py file seperti contoh dibawah.
XML file:
<field name="final_lot_id" domain="['|', '&', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('use_next_on_work_order_id', '=', id)]" groups="stock.group_production_lot"/>
py file:
final_lot_id = fields.Many2one('stock.production.lot', 'Lot/Serial Number', domain="['|', '&', ('product_id', '=', product_id), ('product_id.tracking', '!=', 'serial'), ('use_next_on_work_order_id', '=', id)]",states={'done': [('readonly', True)], 'cancel': [('readonly', True)]})
Demikian sedikit penjelasan tentang Filtering Odoo menggunakan Polish Notation. Semoga artikel ini dapat bermanfaat.
Untuk support professional, Anda dapat menghubungi kami di angga@amreta.net
Recent Comments