Buat modul¶
Sebelum membuat modul pertama Anda, perlu untuk membuat proyek Odoo.sh dan mengetahui URL repositori GitHub Anda.
Glosarium
~/srcadalah direktori tempat repositori Git terkait proyek 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 branch, 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 dalam mengatur struktur modul Odoo dasar. Anda dapat melakukan 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, Anda juga dapat mengunduh templat struktur modul ini. Ganti setiap kemunculan my_module dengan nama pilihan Anda.
Struktur di bawah ini 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 menamai modul Anda, karena namanya digunakan untuk kelas Python, dan nama kelas yang mengandung karakter khusus selain garis bawah tidak valid di Python.
Hapus komentar pada file berikut:
models/models.pycontoh model dengan field-nyaviews/views.xmltampilan tree dan form, dengan menu yang membukanyademo/demo.xmlrecord demo untuk contoh modelcontrollers/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 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 akan muncul di bagian Development pada panel navigasi tampilan Branches.
Klik nama cabang untuk melihat riwayatnya, termasuk perubahan yang baru saja Anda push. Setelah database siap, klik Connect untuk mengaksesnya.
Jika proyek Odoo.sh Anda dikonfigurasi untuk menginstal modul secara otomatis, 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 cabang staging.
You can:
Mengonversi cabang pengembangan Anda menjadi cabang staging dengan menyeret dan menjatuhkannya ke dalam bagian Staging.
Menggabungkannya ke dalam cabang staging yang ada dengan menyeret dan menjatuhkannya ke cabang tersebut.
Menggunakan 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, sehingga Anda tidak ingin modul diinstal secara otomatis.
Deploy di production¶
Setelah Anda menguji modul dalam cabang staging dengan data produksi dan yakin modul sudah 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, lalu 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 view. Untuk diterapkan pada database yang sudah ada, seperti database produksi Anda, perubahan ini memerlukan pembaruan modul. Jika Anda ingin pembaruan dilakukan secara otomatis oleh platform Odoo.sh saat Anda push 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, Anda dapat menggabungkannya ke dalam branch produksi, misalnya, dengan menarik dan menjatuhkan branch ke branch produksi di antarmuka Odoo.sh. Karena Anda meningkatkan versi modul dalam manifest, platform akan secara otomatis memperbarui modul, dan field baru Anda akan tersedia segera. Jika tidak, Anda dapat secara manual memperbarui modul dalam daftar aplikasi.
Gunakan pustaka Python eksternal¶
Jika Anda ingin menggunakan library Python eksternal yang tidak terinstal secara default, Anda dapat mendefinisikan file requirements.txt yang mencantumkan library eksternal yang menjadi dependensi modul Anda. Platform akan menggunakan file ini untuk secara otomatis menginstal library Python yang dibutuhkan proyek Anda.
Catatan
Tidak mungkin untuk menginstal atau mengupgrade paket sistem pada database Odoo.sh (misalnya, paket apt). Namun, dalam kondisi tertentu, paket dapat dipertimbangkan untuk diinstal. Ini juga berlaku untuk modul Python yang memerlukan paket sistem untuk kompilasi dan modul Odoo pihak ketiga.
Ekstensi PostgreSQL tidak didukung di Odoo.sh sehingga tidak mungkin untuk menginstal ekstensi (seperti PostGIS, ltree, ...) di database Odoo.sh.
Misalnya, untuk menggunakan library 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 dalam modul Anda, misalnya, untuk menghapus aksen dari karakter dalam field name 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 manifes modul
__manifest__.py.Kemudian, push perubahan.
Tip
Stage file
requirements.txtdengan menjalankangit add requirements.txt.