OpenERP Technical Tutorial 6.1 : SQL Constraints

Secara default, OpenERP hanya menggunakan field id untuk membedakan keunikan sebuah data. Jika kita merasa hal tersebut kurang memenuhi kebutuhan, maka gunakanlah _sql_constraints ketika mendeklarasikan object.

SYNTAX
_sql_constraints = [
                   (nama_constraints_1, unique(field1_1, field1_2, field1_n), peringatan_jika_dilanggar_1), 
                   (nama_constraints_2, unique(field2_1, field2_2, field2_n), peringatan_jika_dilanggar_2),
                   ...
                   ...
                   (nama_constraints_n, unique(fieldn_1, fieldn_2, fieldn_n), peringatan_jika_dilanggar_n),
                   ]
  • Setiap SQL Constraints berupa tupple yang terdiri dari 3 bagian yang berupa string
  • Bagian pertama merupakan nama dari constraints yang akan dibuat
  • Bagian kedua mendeklarasikan kombinasi dari field yang akan dijadikan unik
  • Bagian ketiga merupakan peringatan jika constraints tersebut dilanggar
CONTOH

#1 Pada object res.partner, field References (ref) tidak mencirikan keunikan sebuah data partner. Artinya jika ada 2 buah data yang mempunyai nilai field References = 001, maka hal tersebut tidak menjadi masalah. Jika kita ingin membedakan data partner berdasarkan nilai dari field tersebut, maka field References harus dibuat menjadi unik
_sql_constraints = [
                   ('nama_unik', 'unique(ref)', 'Tidak boleh ada dua data dengan nilai referensi yang sama'),
                   ]
#2 Pada object stock.picking, Field references (name) tidak boleh sama di sebuah company (company_id). Jadi jika di Perusahaan A sudah ada picking dengan references 001, maka tidak boleh ada lagi data picking pada Perusahaan A dengan references 001. Namun pada Perusahaan B boleh ada data picking dengan references 001
    _sql_constraints = [
        ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'),
    ]

2 thoughts on “OpenERP Technical Tutorial 6.1 : SQL Constraints

  1. Gan, Saya butuh kode yang unik di tabel product, jadi saya coba buat seperti ini di product.product (yg uniknya Internal reference)

    _sql_constraints = [(‘default_code_uniq’, ‘unique(default_code)’,’Internal Reference already exist !’)]

    tapi itu tidak bekerja, kenapa ya gan? mohon infonya,

    thanks,

    • Salam kenal Bapak/Mas Juniar,

      Sebelumnya pastikan terlebih dahulu data yang sudah ada comply dengan constraint yang akan ditambahkan. Jika tidak makan perubahan tidak akan jadi dilakukan.

      Mohon maaf baru sempat balas.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s