Tahukah anda, bahwa di odoo enterprise kita bisa mengubah tampilan odoo dengan cara drag and drop ?
Dengan menginstall module yang bernama web_studio atau biasa disebut Odoo Studio kita bisa mengubah tampilan odoo dengan mudah, cukup buka view/tampilan yang ingin kita ubah, buka odoo studio, kemudian ubah tampilan lewat user interface. Berikut ini adalah tampilan odoo studio di odoo enterprise 14, dimana saya sedang menambah sebuah field dengan label Order Reference di form Sales Order.

Sayangnya jika kita telah membuat sebuah field di odoo studio, kemudian kita ingin menggunakan field tersebut di module normal, yang dibuat dengan membuat sebuah folder dan beberapa file python dan xml, saat kita menginstall module tersebut akan muncul pesan error, yang menyatakan field yang dibuat di odoo studio tersebut tidak ada.
Sebagai contoh kasus, anggap saja kita telah membuat sebuah field baru di odoo studio dengan nama x_studio_new_field di model sale.order.
Kemudian anggap saja kita akan membuat sebuah field baru, dengan cara normal, tanpa odoo studio, seperti pada kode berikut ini.
# -*- coding: utf-8 -*- from odoo import api, fields, models, _, tools class Sale(models.Model): _inherit = 'sale.order' other_new_field = fields.Many2one('product.product')
Kemudian anggap saja di tampilan form sales order, kita ingin agar field other_new_field diatas menggunakan domain dengan value dari field x_studio_new_field, seperti pada kode dibawah ini.
<record id="view_order_form_inherit" model="ir.ui.view"> <field name="name">view_order_form</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form" /> <field name="arch" type="xml"> <field name="date_order" position="after"> <field name="other_new_field" domain="[('name','ilike',x_studio_new_field)]" /> </field> </field> </record>
Ternyata saat kita menginstall module yang kita buat dengan cara normal ini akan menyebabkan error. seperti pada gambar dibawah ini.

Pesan error lengkapnya berbunyi Field x_studio_new_field used in domain of <field name=”other_new_field”> ([(‘name’,’ilike’,x_studio_new_field)]) must be present in view but is missing.</field>. Padahal jika kita cari secara manual di menu Setting >> Technical >> User Interface >> Views field x_studio_new_field ini sudah ada di view, seperti yang terlihat pada gambar di bawah ini.

Setelah saya telusuri lebih detail, ternyata tampilan/view yang dibuat di odoo studio tidak secara otomatis diload oleh odoo, jika kita menginstall/upgrade module yang dibuat secara normal. Oleh karena itu jika module yang kita buat pada file xml-nya memanggil field yang dibuat di odoo studio akan menyebabkan error. Tetapi jika di file python module tersebut memanggil field yang dibuat di odoo studio, misal pada sebuah method, odoo tidak menampilkan pesan error.
Lalu apakah ada solusi untuk menyelesaikan problem ini ?
Saat pertama kali menemukan problem ini langkah yang saya lakukan pada awalnya adalah meng-comment isi dari file xml dari module yang saya buat dengan cara normal. Misal seperti ini.
<record id="view_order_form_inherit" model="ir.ui.view"> <field name="name">view_order_form</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form" /> <field name="arch" type="xml"> <!-- <field name="date_order" position="after"> <field name="other_new_field" domain="[('name','ilike',x_studio_new_field)]" /> </field> --> </field> </record>
Dengan cara ini saat kita menginstal/upgrade module field x_studio_new_field tidak akan dibaca, karena dicomment, sehingga module bisa diinstall. Kemudian setelah module selesai diinstall saya akan melakukan uncomment file xml diatas dari menu Setting >> Technical >> User Interface >> Views. Ribet ya ?
Akhirnya setelah mengotak-atik source code odoo saya menemukan cara yang yang lebih baik, yaitu dengan menambah context load_all_views di method _check_xml di model ir.ui.view. Seperti pada kode dibawah ini.
# -*- coding: utf-8 -*- from odoo import api, fields, models, _, tools class IrUiView(models.Model): _inherit = 'ir.ui.view' @api.constrains('arch_db') def _check_xml(self): context = dict(self._context) context['load_all_views'] = True return super(IrUiView, self.with_context(context))._check_xml()
Tulis kode di atas pada module terpisah, kemudian install terlebih dulu sebelum anda install/upgrade module yang memanggil field yang dibuat di odoo studio. Atau anda dapat download module siap pakainya di halaman ini.
Dengan adanya context load_all_views semua view akan diload oleh odoo, baik yang dibuat lewat odoo studio maupun dengan cara normal, sehingga field x_studio_new_field bisa ditemukan di salah satu view dan module yang kita buat secara normal bisa kita install/upgrade dengan sukses.
Sejauh ini setelah saya test di odoo 14, cara ini cukup berhasil. Akan tetapi karena terbatasnya waktu test saya belum bisa memastikan bahwa cara ini menimbulkan efek samping atau tidak. Saya akan sangat menghargai bantuan Anda untuk melakukan test dan review cara ini, dan bersedia untuk berbagi hasilnya.
5 Replies to “Mengatasi Bug Field dari Odoo Studio tidak Ditemukan pada Odoo Enterprise 14”
izin bertanya lagi mas, saya kemarin baru install module web_studio di odoo 14.
proses instalasi berhasil, tetapi mas saya mau akses module yang ada di menu muncul error kaya gini. mau coba uninstall module nya tapi menu app juga tidak bisa di akses.
mohon bantuannya mas.
Error:
Traceback:
TypeError: Cannot read properties of undefined (reading ‘isMobile’)
at QWeb.eval (eval at _compile (http://localhost:8069/web/content/3572-9339e3c/web.assets_common.js:971:178), :20:58)
at QWeb.fn (http://localhost:8069/web/content/3572-9339e3c/web.assets_common.js:955:173)
at QWeb.render (http://localhost:8069/web/content/3572-9339e3c/web.assets_common.js:962:20)
at __owl__.renderFn (http://localhost:8069/web/content/3606-603a78b/web.assets_backend.js:1344:147)
at PatchableClass.__render (http://localhost:8069/web/content/3572-9339e3c/web.assets_common.js:1294:33)
at PatchableClass.__prepareAndRender (http://localhost:8069/web/content/3572-9339e3c/web.assets_common.js:1292:29)
error ini terlalu umum, lihat tab Console di developer tool untuk lihat detail errornya di mana
atau ada link untuk download module web_studio nya mas? untuk versi odoo 14
di console nya juga muncul pesan error yang sama mas.
ada cara untuk uninstall selain dari menu Apps?
ya, di console memang akan menampilkan pesan error yang sama, tapi kita bisa trace module apa yang menyebabkan error tersebut. dari sekian banyak kode javascript yang tersebar di banyak module itu, nanti akan diminified dan digabung jadi 2/3 file javascript saja. tapi nama module dimana file itu ditulis masih disertakan oleh odoo, jadi kita bisa cek module mana yang benar-benar menyebabkan error. untuk module web_studio setahu saya module ini hanya ada di versi enterprise, jadi harus langganan enterprise dulu kalau mau install. kalau mau uninstall suatu module, tapi tidak bisa akses menu Apps, coba eksekusi perintah ini di postgre sql