Membuat modul¶
Sebelum membuat modul pertama Anda, perlu membuat project Odoo.sh dan mengetahui URL repositori GitHub Anda.
Glosarium
~/srcadalah direktori tempat repositori Git yang terkait dengan project Odoo Anda berada.odooadalah user GitHub.odoo-addonsadalah repositori GitHub.feature-1adalah nama branch pengembangan.mainadalah nama branch produksi.my_moduleadalah nama modul.
Ganti sesuai kebutuhan.
Buat branch development¶
Dari tampilan Branches:
Di panel navigasi branches, klik tombol + (New development branch) di samping Development.
Di bawah Fork, pilih branch
main.Di bawah To, masukkan
feature-1.
Setelah build siap, Anda dapat mengakses editor dan kode branch pengembangan Anda dari folder ~/src/user.
Clone repositori GitHub Anda di komputer dengan menjalankan perintah berikut:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Buat branch baru dengan menjalankan:
git checkout -b feature-1 main
Buat struktur modul¶
Scaffolding¶
Meskipun tidak wajib, scaffolding menghindari kerumitan menyiapkan struktur modul Odoo dasar. Anda dapat membuat scaffold modul baru menggunakan executable odoo-bin.
Dari terminal editor, jalankan:
odoo-bin scaffold my_module ~/src/user/
Dengan Odoo terinstal di komputer Anda, jalankan:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Tip
Jika Anda tidak ingin menginstal Odoo di komputer, Anda juga dapat mengunduh template struktur modul ini. Ganti setiap kemunculan my_module dengan nama pilihan Anda.
Struktur berikut akan dihasilkan:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ ├── ir.model.access.csv
│ └── models.py
└── views
├── templates.xml
└── views.xml
Peringatan
Gunakan hanya karakter alfanumerik (a-z, 0-9) atau garis bawah (_) saat memberi nama modul Anda, karena namanya digunakan untuk kelas Python, dan nama kelas yang berisi karakter khusus selain garis bawah tidak valid di Python.
Hapus komentar pada file berikut:
models/models.pycontoh model dengan field-nyaviews/views.xmlview tree dan form, dengan menu yang membukanyademo/demo.xmlrecord demo untuk model contohcontrollers/controllers.pycontoh controller yang mengimplementasikan beberapa routeviews/templates.xmldua contoh tampilan qweb yang digunakan oleh route controller__manifest__.pymanifest modul Anda, termasuk judul, deskripsi, dan file data yang akan dimuat. Hapus komentar pada file data daftar kontrol akses:# 'security/ir.model.access.csv',
Manual¶
Untuk membuat struktur modul Anda secara manual, ikuti tutorial Server framework 101 untuk memahami struktur modul dan konten setiap file.
Push ke branch pengembangan¶
Stage perubahan yang akan di-commit dengan menjalankan:
git add my_module
Commit perubahan Anda dengan menjalankan:
git commit -m "My first module"Push perubahan Anda ke repositori remote dengan menjalankan:
Dari terminal editor, jalankan:
git push https HEAD:feature-1
Jalankan:
git push -u origin feature-1
Hanya perlu menentukan
-u origin feature-1saat pertama kali Anda push. Setelah itu, jalankan:git push
Uji modul¶
Branch seharusnya muncul di bawah bagian Development pada panel navigasi tampilan Branches.
Klik nama branch untuk melihat riwayatnya, termasuk perubahan yang baru saja Anda push. Setelah database siap, klik Connect untuk mengaksesnya.
Jika project Odoo.sh Anda dikonfigurasi untuk secara otomatis menginstal modul, modul akan muncul langsung di dashboard database. Jika tidak, modul akan tersedia untuk instalasi di bawah aplikasi Apps.
Uji dengan data production¶
Catatan
Database produksi diperlukan untuk langkah ini. Jika Anda belum memilikinya, buatlah.
Setelah Anda menguji modul dalam build pengembangan dengan data demo dan yakin modul sudah siap, Anda dapat mengujinya dengan data produksi menggunakan branch staging.
Anda dapat:
Konversi cabang pengembangan Anda menjadi cabang staging dengan menyeret dan menjatuhkannya ke dalam bagian Staging.
Gabungkan ke dalam cabang staging yang ada dengan menyeret dan menjatuhkannya ke cabang tersebut.
Gunakan perintah
git mergeuntuk menggabungkan cabang Anda.
Ini membuat build staging baru yang menduplikasi database produksi dan menjalankannya di server yang diperbarui dengan perubahan terbaru cabang Anda.
Setelah database siap, klik Connect untuk mengaksesnya.
Instal modul¶
Instal modul dari aplikasi Apps. Karena modul mungkin tidak muncul langsung dalam daftar aplikasi, perbarui daftar aplikasi dengan mengaktifkan mode pengembang dan klik .
Catatan
Modul tidak diinstal secara otomatis, karena tujuan build staging adalah untuk menguji perilaku perubahan Anda seperti yang akan terjadi di database produksi, jadi Anda tidak ingin modul diinstal secara otomatis.
Deploy di production¶
Setelah Anda menguji modul dalam cabang staging dengan data produksi dan yakin modul tersebut siap untuk produksi, Anda dapat menggabungkan cabang Anda ke dalam cabang produksi dengan:
Menyeret dan menjatuhkan cabang staging ke cabang produksi.
Menggunakan perintah
git mergeuntuk menggabungkan cabang Anda.
Ini menggabungkan perubahan terbaru dari cabang staging ke dalam cabang produksi dan memperbarui server produksi dengan perubahan tersebut.
Setelah database siap, klik Connect untuk mengaksesnya.
Instal modul¶
Instal modul dari aplikasi Apps. Karena modul mungkin tidak muncul langsung dalam daftar aplikasi, perbarui daftar aplikasi dengan mengaktifkan mode pengembang dan klik .
Tambahkan perubahan¶
Bagian ini menjelaskan cara menambahkan perubahan dalam modul Anda dengan menambahkan field baru dalam model dan menerapkannya.
Dari editor atau dari komputer Anda, buka folder modul
~/src/odoo-addons/my_module, kemudian buka filemodels/models.pyuntuk mengeditnya. Setelah field description:description = fields.Text()
tambahkan field datetime:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Buka file
views/views.xmldan setelah:<field name="value2"/>
tambahkan:
<field name="start_datetime"/>
Perubahan ini mengubah struktur database dengan menambahkan kolom ke tabel dan memodifikasi tampilan. Untuk diterapkan ke database yang sudah ada, seperti database produksi Anda, perubahan ini memerlukan modul diperbarui. Jika Anda ingin pembaruan dilakukan secara otomatis oleh platform Odoo.sh saat Anda mendorong perubahan Anda, tingkatkan versi modul dalam manifestnya dengan membuka
__manifest__.pydan mengganti:'version': '0.1',
dengan:
'version': '0.2',
Platform akan mendeteksi perubahan versi dan memicu pembaruan modul saat deployment revisi baru.
Selanjutnya, push perubahan.
Setelah Anda menguji perubahan, Anda dapat menggabungkannya ke branch production, misalnya dengan menarik dan melepas branch ke branch production di antarmuka Odoo.sh. Karena Anda meningkatkan versi modul di manifest, platform akan secara otomatis memperbarui modul, dan field baru Anda akan langsung tersedia. Jika tidak, Anda dapat secara manual memperbarui modul dalam daftar aplikasi.
Gunakan pustaka Python eksternal¶
Jika Anda ingin menggunakan library Python eksternal yang tidak terpasang secara default, Anda dapat mendefinisikan file requirements.txt yang berisi daftar library eksternal yang dibutuhkan oleh modul Anda. Platform akan menggunakan file ini untuk secara otomatis menginstal library Python yang dibutuhkan oleh project Anda.
Catatan
Tidak dimungkinkan untuk menginstal atau mengupgrade paket sistem pada database Odoo.sh (misalnya paket apt). Namun, dalam kondisi tertentu, `paket dapat dipertimbangkan untuk instalasi<https://www.odoo.sh/faq#install_dependencies>`_. Ini juga berlaku untuk modul Python yang memerlukan paket sistem untuk kompilasi dan untuk modul Odoo pihak ketiga.
Ekstensi PostgreSQL tidak didukung di Odoo.sh sehingga tidak dimungkinkan untuk menginstal ekstensi (seperti PostGIS, ltree, ...) dalam database Odoo.sh.
Misalnya, untuk menggunakan `library Unidecode<https://pypi.org/project/Unidecode>`_ dalam modul Anda:
Buat file
requirements.txtdi folder root repositori Anda:Dari editor Odoo.sh, buat dan buka file
~/src/user/requirements.txt.Dari komputer Anda, buat dan buka file
~/src/odoo-addons/requirements.txt.
Tambahkan ke file:
unidecode
Anda sekarang dapat menggunakan library di modul Anda, misalnya untuk menghapus aksen dari karakter di field nama model Anda. Untuk melakukannya, buka file
models/models.pydan sebelum:from odoo import models, fields, api
tambahkan:
from unidecode import unidecode
Setelah:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
tambahkan:
@api.model def create(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).create(values) def write(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).write(values)
Tingkatkan versi modul untuk menginstal dependensi Python dengan mengedit manifest modul
__manifest__.py.Kemudian, push perubahan.
Tip
Stage file
requirements.txtdengan menjalankangit add requirements.txt.