Odoo’da OWL Kullanarak Yeni Bir View Oluşturmak
Odoo üzerinde varsayılan olarak birçok farklı görünüm tipi bulunmaktadır. Ancak bazı projelerde standart görünümler yeterli olmayabilir ve iş süreçlerine özel tamamen yeni bir görünüm geliştirmek gerekebilir.
Bu noktada Odoo’nun modern frontend mimarisi olan OWL (Odoo Web Library) devreye girer. OWL sayesinde kendi özel görünüm tiplerinizi oluşturabilir, Odoo içerisine entegre edebilir ve mevcut görünüm altyapısını genişletebilirsiniz.
Bu örnekte Odoo 19 kullanılarak sıfırdan özel bir Square View geliştireceğiz.
Odoo Community ve Enterprise Görünümleri
Odoo varsayılan olarak farklı görünüm tiplerini hazır şekilde sunmaktadır.
List
Form
Kanban
Pivot
Graph
Activity
Calendar
Odoo Enterprise Sürümünde Ek Olarak Gelen Görünümler
Enterprise sürümde ise Community sürümdeki görünümlere ek olarak şu view tipleri de hazır olarak sunulur:
Gantt
Cohort
Map
Ancak bazı senaryolarda bu yapılar yeterli olmayabilir. Böyle durumlarda OWL altyapısını kullanarak tamamen yeni bir görünüm tipi geliştirebiliriz.
1-) Odoo İçerisinde Yeni Bir Modül Oluşturma
İlk olarak yeni bir modül yapısı oluşturmamız gerekir.
Bunu manuel şekilde yapabiliriz ancak Odoo’nun kendi scaffold komutu işleri oldukça kolaylaştırır.
Bu örnekte Odoo 19 versiyonu kullanılmıştır.
Örnek scaffold komutu:
python3 odoo-bin scaffold square_view /dev/erp/corp/custom_addons
2-) Yeni Görünüm Tipinin Odoo’ya Tanıtılması
Odoo’daki tüm görünüm tipleri ir.ui.view modeli üzerinden yönetilir. Bu nedenle yeni görünüm tipimizi sisteme eklememiz gerekir.
Bu örnekte görünüm ismimiz:
square
Örnek model tanımı:
from odoo import fields, models
class View(models.Model):
_inherit = 'ir.ui.view'
type = fields.Selection(
selection_add=[('square', 'Square')]
)
def _get_view_info(self):
return {
'square': {'icon': 'fa fa-th-large'}
} | super()._get_view_info()
Burada yaptığımız işlem:
- Odoo’ya yeni bir square görünüm tipi tanıtmak
- Görünüm için bir ikon belirlemek
- Sistemin bu görünümü tanıyabilmesini sağlamak
3-) Square View Yapısının Oluşturulması
Şimdi OWL tarafında görünüm mimarisini oluşturmamız gerekiyor.
Odoo’daki modern view sistemi temel olarak şu yapılardan oluşur:
- Controller
- Renderer
- Model
- ArchParser
Önerilen klasör yapısı:
static/src/views/square/
Bu klasör altında aşağıdaki dosyaları oluşturabiliriz:
square_view.js
square_controller.js
square_controller.xml
square_renderer.js
square_renderer.xml
square_model.js
square_arch_parser.js
4-) Square View Kaydı
Oluşturduğumuz görünümü Odoo registry sistemine kayıt etmemiz gerekir.
Örnek:
import { registry } from "@web/core/registry";
export const SquareView = {
type: "square",
};
registry.category("views").add("square", SquareView);
5-) Controller Yapısı
Controller katmanı:
- kullanıcı etkileşimlerini yönetir
- search bar entegrasyonunu sağlar
- action işlemlerini yönetir
- renderer ile model arasında bağlantı kurar
Örnek:
export class SquareController extends Component {
setup() {
console.log("Square Controller Initialized")
}
}
6-) Renderer Yapısı
Renderer bileşeni görünümün ekranda nasıl render edileceğini belirler.
Örnek:
export class SquareRenderer extends Component {
static template = "square_view.Renderer"
}
Örnek XML Template:
<t t-name="square_view.Renderer">
<div class="o_square_view">
<h1>Square Renderer Component</h1>
</div>
</t>
7-) Model Yapısı
Model katmanı verilerin backend’den alınmasını sağlar.
Örnek:
export class SquareModel extends RelationalModel {
async fetchData(params) {
this.data = await this.orm.searchRead(
this.config.resModel,
[],
[]
)
}
}
8-) Arch Parser Yapısı
Arch parser XML görünüm yapısını okuyup parse eder.
Örnek:
export class SquareArchParser {
parse(xmlDoc) {
return {
xmlDoc,
}
}
}
9-) XML Görünüm Tanımı
Artık görünümümüzü XML içerisinde kullanabiliriz.
Örnek:
<record id="product_square_view" model="ir.ui.view">
<field name="name">product.square.view</field>
<field name="model">product</field>
<field name="arch" type="xml">
<square/>
</field>
</record>
Action içerisinde kullanım:
<record id="product_action" model="ir.actions.act_window">
<field name="name">Products</field>
<field name="res_model">product</field>
<field name="view_mode">square</field>
</record>
10-) Manifest Dosyası
Son olarak gerekli asset tanımlarını manifest içerisine eklememiz gerekir.
Örnek:
'assets': {
'web.assets_backend': [
'square_view/static/src/views/square/*.js',
'square_view/static/src/views/square/*.xml',
],
},
Sonuç
Bu örnekte OWL altyapısını kullanarak Odoo içerisine tamamen özel bir Square View geliştirdik.
Bu yapı sayesinde:
- tamamen özelleştirilebilir görünüm mimarileri oluşturabilir,
- özel dashboard yapıları geliştirebilir,
- kart bazlı veya grid bazlı gelişmiş ekranlar hazırlayabilir,
- Odoo’nun standart görünüm limitlerini aşabilirsiniz.
OWL mimarisi modern frontend geliştirme yaklaşımını Odoo içerisine taşımaktadır ve özellikle Odoo 17+ sürümlerinde oldukça güçlü bir yapı sunmaktadır.