สร้างโมดูล¶
ก่อนที่จะสร้างโมดูลแรกของคุณ จำเป็นต้อง สร้างโปรเจกต์ Odoo.sh และทราบ URL ของ GitHub repository ของคุณ
อภิธานศัพท์
~/srcคือไดเรกทอรีที่เก็บ Git repositories ที่เกี่ยวข้องกับโปรเจกต์ Odoo ของคุณodooคือผู้ใช้ GitHubodoo-addonsคือ GitHub repositoryfeature-1คือชื่อของบรานช์สำหรับพัฒนาmainคือชื่อของบรานช์โปรดักชันmy_moduleคือชื่อของโมดูล
แทนที่สิ่งเหล่านี้ตามความจำเป็น
สร้างสาขาการพัฒนา¶
จาก มมุมองสาขา:
ในแผงนำทางสาขา คลิกปุ่ม + (สาขาพัฒนาใหม่) ถัดจาก พัฒนา
ภายใต้ แยก เลือกสาขา
mainภายใต้ ไปยัง ป้อน
feature-1
เมื่อการสร้างพร้อมแล้ว คุณสามารถเข้าถึง เครื่องมือแก้ไข และโค้ดของสาขาพัฒนาของคุณจากโฟลเดอร์ ~/src/user
โคลนที่เก็บ GitHub ของคุณบนคอมพิวเตอร์โดยรันคำสั่งต่อไปนี้:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
สร้างสาขาใหม่โดยรัน:
git checkout -b feature-1 main
สร้างโครงสร้างโมดูล¶
การสร้างโครงสร้างโมดูล¶
แม้ว่าจะไม่จำเป็น แต่การสร้างโครงสร้างโมดูลช่วยหลีกเลี่ยงความน่าเบื่อในการตั้งค่าโครงสร้างโมดูล Odoo พื้นฐาน คุณสามารถสร้างโครงสร้างโมดูลใหม่โดยใช้ไฟล์ปฏิบัติการ odoo-bin
จากเทอร์มินัล เครื่องมือแก้ไข รัน:
odoo-bin scaffold my_module ~/src/user/
เมื่อ ติดตั้ง Odoo บนคอมพิวเตอร์ของคุณแล้ว รัน:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Tip
หากคุณไม่ต้องการติดตั้ง Odoo บนคอมพิวเตอร์ของคุณ คุณยังสามารถ ดาวน์โหลดเทมเพลตโครงสร้างโมดูลนี้ แทนที่ my_module ทุกแห่งด้วยชื่อที่คุณเลือก
โครงสร้างด้านล่างจะถูกสร้างขึ้น:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ ├── ir.access.csv
│ └── models.py
└── views
├── templates.xml
└── views.xml
Warning
ใช้เฉพาะอักขระตัวอักษรและตัวเลข (a-z, 0-9) หรือขีดล่าง (_) เมื่อตั้งชื่อโมดูลของคุณ เนื่องจากชื่อของมันถูกใช้สำหรับคลาส Python และชื่อคลาสที่มีอักขระพิเศษอื่นนอกจากขีดล่างไม่ถูกต้องใน Python
ยกเลิกการแสดงความคิดเห็นไฟล์ต่อไปนี้:
models/models.pyตัวอย่างของโมเดลพร้อมฟิลด์views/views.xmlมมุมองแบบทรีและแบบฟอร์ม พร้อมเมนูที่เปิดมุมมองเหล่านั้นdemo/demo.xmlระเบียนสาธิตสำหรับโมเดลตัวอย่างcontrollers/controllers.pyตัวอย่างของคอนโทรลเลอร์ที่ใช้งานเส้นทางต่างๆviews/templates.xmlเทมเพลต qweb ตัวอย่างสองรายการที่ใช้โดยเส้นทางของคอนโทรลเลอร์__manifest__.pyไฟล์ manifest ของโมดูล ประกอบด้วยชื่อ คำอธิบาย และไฟล์ข้อมูลที่จะโหลด ยกเลิกการคอมเมนต์ไฟล์ข้อมูลรายการควบคุมการเข้าถึง:# 'security/ir.access.csv',
ด้วยตนเอง¶
หากต้องการสร้างโครงสร้างโมดูลด้วยตนเอง ให้ปฏิบัติตาม:doc:`/developer/tutorials/server_framework_101`เพื่อทำความเข้าใจโครงสร้างของโมดูลและเนื้อหาของแต่ละไฟล์
พุชไปยังสาขาการพัฒนา¶
จัดเตรียมการเปลี่ยนแปลงที่จะคอมมิตโดยรัน:
git add my_module
คอมมิตการเปลี่ยนแปลงของคุณโดยรัน:
git commit -m "My first module"พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกลโดยรัน:
จากเทอร์มินัล เครื่องมือแก้ไข รัน:
git push https HEAD:feature-1
รัน:
git push -u origin feature-1
จำเป็นต้องระบุ
-u origin feature-1เฉพาะครั้งแรกที่คุณพุชเท่านั้น หลังจากนั้นให้รัน:git push
ทดสอบโมดูล¶
สาขาควรปรากฏภายใต้ส่วน:guilabel:การพัฒนา`ของแผงนำทาง:doc:`มุมมองสาขา <getting_started/branches>
คลิกที่ชื่อสาขาเพื่อดูประวัติของมัน รวมถึงการเปลี่ยนแปลงที่คุณเพิ่งพุชไป เมื่อฐานข้มูลพร้อมแล้ว ให้คลิก:guilabel:`เชื่อมต่อ`เพื่อเข้าถึง
หากโปรเจกต์ Odoo.sh ของคุณถูกกำหนดค่าให้ติดตั้งโมดูลโดยอัตโนมัติ มันจะปรากฏโดยตรงบนแดชบอร์ดฐานข้อมูล มิฉะนั้นจะสามารถติดตั้งได้ภายใต้แอป:guilabel:Apps
ทดสอบกับข้อมูลการใช้งาน¶
Note
ฐานข้อมูลที่ใช้งานจริงจำเป็นสำหรับขั้นตอนนี้ หากคุณยังไม่มี ให้สร้างมันขึ้นมา
เมื่อคุณทดสอบโมดูลในบิลด์การพัฒนาด้วยข้อมูลสาธิตและเชื่อว่ามันพร้อมแล้ว คุณสามารถทดสอบด้วยข้อมูลที่ใช้งานจริงโดยใช้สาขาสเตจจิ้ง
คุณสามารถ:
แปลงสาขาการพัฒนาของคุณเป็นสาขา staging โดยการลากและวางลงในส่วน Staging
รวมเข้ากับสาขา staging ที่มีอยู่โดยการลากและวางลงบนสาขานั้น
ใช้คำสั่ง
git mergeเพื่อรวมสาขาของคุณ
การดำเนินการนี้จะสร้าง staging build ใหม่ที่ทำสำเนาฐานข้อมูลการใช้งานจริงและรันบนเซิร์ฟเวอร์ที่อัปเดตด้วยการเปลี่ยนแปลงล่าสุดของสาขาคุณ
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก
Note
โมดูลจะไม่ถูกติดตั้งโดยอัตโนมัติ เนื่องจากวัตถุประสงค์ของ staging build คือการทดสอบพฤติกรรมของการเปลี่ยนแปลงของคุณเหมือนกับที่จะเป็นบนฐานข้อมูลการใช้งานจริง ดังนั้นคุณจะไม่ต้องการให้โมดูลถูกติดตั้งโดยอัตโนมัติ
ปรับใช้ในการใช้งาน¶
เมื่อคุณทดสอบโมดูลในสาขา staging กับข้อมูลการใช้งานจริงแล้วและเชื่อว่าพร้อมสำหรับการใช้งานจริง คุณสามารถรวมสาขาของคุณเข้ากับสาขาการใช้งานจริงโดย:
ลากและวางสาขา staging ลงบนสาขาการใช้งานจริง
ใช้คำสั่ง
git mergeเพื่อรวมสาขาของคุณ
การดำเนินการนี้จะรวมการเปลี่ยนแปลงล่าสุดจากสาขา staging เข้ากับสาขาการใช้งานจริงและอัปเดตเซิร์ฟเวอร์การใช้งานจริงด้วยการเปลี่ยนแปลงเหล่านั้น
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก
เพิ่มการเปลี่ยนแปลง¶
ส่วนนี้อธิบายวิธีเพิ่มการเปลี่ยนแปลงในโมดูลของคุณโดยการเพิ่มฟิลด์ใหม่ในโมเดลและทำการ deploy
จาก editor หรือจากคอมพิวเตอร์ของคุณ ให้เปิดโฟลเดอร์โมดูล
~/src/odoo-addons/my_moduleจากนั้นเปิดไฟล์models/models.pyเพื่อแก้ไข หลังจากฟิลด์ description:description = fields.Text()
เพิ่มฟิลด์ datetime:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
เปิดไฟล์
views/views.xmlและหลังจาก:<field name="value2"/>
เพิ่ม:
<field name="start_datetime"/>
การเปลี่ยนแปลงเหล่านี้จะเปลี่ยนแปลงโครงสร้างฐานข้อมูลโดยการเพิ่มคอลัมน์ในตารางและแก้ไขมุมมอง เพื่อให้ถูกนำไปใช้กับฐานข้อมูลที่มีอยู่ เช่น ฐานข้อมูลการใช้งานจริงของคุณ การเปลี่ยนแปลงเหล่านี้จำเป็นต้องอัปเดตโมดูล หากคุณต้องการให้การอัปเดตดำเนินการโดยอัตโนมัติโดยแพลตฟอร์ม Odoo.sh เมื่อคุณ push การเปลี่ยนแปลง ให้เพิ่มเวอร์ชั่นของโมดูลใน manifest โดยการเปิด
__manifest__.pyและแทนที่:'version': '0.1',
ด้วย:
'version': '0.2',
แพลตฟอร์มจะตรวจพบการเปลี่ยนแปลงเวอร์ชั่นและเริ่มการอัปเดตโมดูลเมื่อมีการปรับใช้รีวิชันใหม่
ถัดไป พุชการเปลี่ยนแปลง
เมื่อคุณ:ref:
ทดสอบการเปลี่ยนแปลงของคุณแล้ว <odoo-sh/module/test-module>คุณสามารถผสานการเปลี่ยนแปลงเหล่านั้นเข้ากับบรานช์ production ได้ เช่น ด้วยการลากและวางบรานช์ลงบนบรานช์ production ในอินเทอร์เฟซ Odoo.sh เนื่องจากคุณได้เพิ่มเวอร์ชั่นโมดูลใน manifest แล้ว แพลตฟอร์มจะอัปเดตโมดูลโดยอัตโนมัติ และฟิลด์ใหม่ของคุณจะพร้อมใช้งานทันที มิฉะนั้น คุณสามารถ:ref:`อัปเดตโมดูล <odoo-sh/module/deploy/install>`ด้วยตนเองภายในรายการแอปได้
ใช้ไลบรารี Python ภายนอก¶
หากคุณต้องการใช้ไลบรารี Python ภายนอกที่ไม่ได้ติดตั้งโดยค่าเริ่มต้น คุณสามารถกำหนดไฟล์ requirements.txt ที่แสดงรายการไลบรารีภายนอกที่โมดูลของคุณต้องการใช้ แพลตฟอร์มจะใช้ไฟล์นี้เพื่อติดตั้งไลบรารี Python ที่โปรเจกต์ของคุณต้องการโดยอัตโนมัติ
Note
ไม่สามารถติดตั้งหรืออัปเกรดแพ็กเกจระบบบนฐานข้อมูล Odoo.sh ได้ (เช่น แพ็กเกจ apt) อย่างไรก็ตาม ภายใต้เงื่อนไขเฉพาะ แพ็กเกจสามารถพิจารณาเพื่อการติดตั้งได้ สิ่งนี้ใช้กับโมดูล Python ที่ต้องการแพ็กเกจระบบสำหรับการคอมไพล์และโมดูล Odoo จากบุคคลที่สามด้วย
ส่วนขยาย PostgreSQL ไม่รองรับบน Odoo.sh ดังนั้นจึงไม่สามารถติดตั้งส่วนขยาย (เช่น PostGIS, ltree, ...) ในฐานข้อมูล Odoo.sh ได้
ตัวอย่างเช่น เพื่อใช้ ไลบรารี Unidecode ในโมดูลของคุณ:
สร้างไฟล์
requirements.txtในโฟลเดอร์รากของ repository ของคุณ:จากเอดิเตอร์ Odoo.sh สร้างและเปิดไฟล์
~/src/user/requirements.txtจากคอมพิวเตอร์ของคุณ สร้างและเปิดไฟล์
~/src/odoo-addons/requirements.txt
เพิ่มในไฟล์:
unidecode
ตอนนี้คุณสามารถใช้ไลบรารีในโมดูลของคุณได้แล้ว เช่น เพื่อลบเครื่องหมายเสียงออกจากตัวอักษรในฟิลด์ชื่อของโมเดลของคุณ ในการทำเช่นนี้ ให้เปิดไฟล์
models/models.pyและก่อน:from odoo import models, fields, api
เพิ่ม:
from unidecode import unidecode
หลัง:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
เพิ่ม:
@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)
เพิ่มเวอร์ชั่นโมดูลเพื่อติดตั้ง dependency ของ Python โดยแก้ไข manifest ของโมดูล
__manifest__.pyจากนั้น พุชการเปลี่ยนแปลง
Tip
สเตจไฟล์
requirements.txtโดยรันgit add requirements.txt