สร้างโมดูล¶
ก่อนสร้างโมดูลแรกของคุณ จำเป็นต้อง:doc:สร้างโปรเจกต์ Odoo.sh <getting_started/create> และทราบ URL ของ repository GitHub ของคุณ
คำศัพท์
~/srcคือไดเรกทอรีที่มีที่เก็บ Git ที่เกี่ยวข้องกับโปรเจกต์ Odoo ของคุณodooคือผู้ใช้ GitHubodoo-addonsคือ repository บน GitHubfeature-1คือชื่อของ branch สำหรับการพัฒนาmainคือชื่อของ branch สำหรับ productionmy_moduleคือชื่อของโมดูล
แทนที่สิ่งเหล่านี้ตามความจำเป็น
สร้างสาขาการพัฒนา¶
จาก:doc:มุมมอง Branches <getting_started/branches>:
ในแผง branches navigation คลิกปุ่ม + (New development branch) ถัดจาก Development
ภายใต้ Fork เลือก branch
mainภายใต้ To ใส่
feature-1
เมื่อการ build เสร็จสิ้น คุณสามารถเข้าถึง:doc:ตัวแก้ไข <getting_started/online_editor>`และโค้ดของ branch สำหรับการพัฒนาของคุณได้จากโฟลเดอร์ `~/src/user
โคลน repository บน GitHub ของคุณลงในคอมพิวเตอร์โดยการรันคำสั่งต่อไปนี้:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
สร้าง branch ใหม่โดยการรัน:
git checkout -b feature-1 main
สร้างโครงสร้างโมดูล¶
Scaffolding¶
แม้ว่าจะไม่จำเป็น แต่ scaffolding ช่วยหลีกเลี่ยงความน่าเบื่อของการตั้งค่าโครงสร้างโมดูล Odoo พื้นฐาน คุณสามารถ scaffold โมดูลใหม่โดยใช้ไฟล์ปฏิบัติการ odoo-bin
จากเทอร์มินัลของ:doc:ตัวแก้ไข <getting_started/online_editor> ให้รัน:
odoo-bin scaffold my_module ~/src/user/
เมื่อ:doc:`ติดตั้ง Odoo <../on_premise/source>`บนคอมพิวเตอร์ของคุณแล้ว ให้รัน:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Tip
หากคุณไม่ต้องการติดตั้ง Odoo บนคอมพิวเตอร์ คุณยังสามารถ:download:ดาวน์โหลดเทมเพลตโครงสร้างโมดูลนี้ <create_module/my_module.zip>`ได้ แทนที่ `my_module ทุกตำแหน่งด้วยชื่อที่คุณเลือก
โครงสร้างด้านล่างนี้จะถูกสร้างขึ้น:
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
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.model.access.csv',
ด้วยตนเอง¶
หากต้องการสร้างโครงสร้างโมดูลด้วยตนเอง ให้ปฏิบัติตาม:doc:`/developer/tutorials/server_framework_101`เพื่อทำความเข้าใจโครงสร้างของโมดูลและเนื้อหาของแต่ละไฟล์
พุชไปยังสาขาการพัฒนา¶
จัดเตรียมการเปลี่ยนแปลงที่จะคอมมิตโดยรัน:
git add my_module
คอมมิตการเปลี่ยนแปลงของคุณโดยรัน:
git commit -m "My first module"พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกลโดยรัน:
จากเทอร์มินัลของ:doc:
ตัวแก้ไข <getting_started/online_editor>ให้รัน: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
ฐานข้อมูลที่ใช้งานจริงจำเป็นสำหรับขั้นตอนนี้ หากคุณยังไม่มี ให้สร้างมันขึ้นมา
เมื่อคุณทดสอบโมดูลในบิลด์การพัฒนาด้วยข้อมูลสาธิตและเชื่อว่ามันพร้อมแล้ว คุณสามารถทดสอบด้วยข้อมูลที่ใช้งานจริงโดยใช้สาขาสเตจจิ้ง
คุณสามารถ:
แปลงสาขาการพัฒนาของคุณเป็นสาขาสเตจจิ้งโดยการลากและวางลงในส่วน:guilabel:
Stagingผสานมันเข้ากับสาขาสเตจจิ้งที่มีอยู่โดยการลากและวางลงบนสาขานั้น
ใช้คำสั่ง
git mergeเพื่อผสานสาขาของคุณ
สิ่งนี้จะสร้างบิลด์สเตจจิ้งใหม่ที่ทำซ้ำฐานข้อมูลที่ใช้งานจริงและรันบนเซิร์ฟเวอร์ที่อัปเดตด้วยการเปลี่ยนแปลงล่าสุดของสาขาของคุณ
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก:guilabel:`เชื่อมต่อ`เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป:guilabel:Apps เนื่องจากโมดูลอาจไม่ปรากฏโดยตรงในรายการแอป ให้อัปเดตรายการแอปโดยการเปิดใช้งาน:ref:โหมดนักพัฒนา <developer-mode>`และคลิก:menuselection:`อัปเดตรายการแอป --> อัปเดต
Note
โมดูลจะไม่ถูกติดตั้งโดยอัตโนมัติ เนื่องจากวัตถุประสงค์ของบิลด์สเตจจิ้งคือการทดสอบพฤติกรรมของการเปลี่ยนแปลงของคุณเหมือนกับที่จะเป็นบนฐานข้อมูลที่ใช้งานจริง ดังนั้นคุณจะไม่ต้องการให้โมดูลถูกติดตั้งโดยอัตโนมัติ
ปรับใช้ในการใช้งาน¶
เมื่อคุณทดสอบโมดูลในสาขาสเตจจิ้งด้วยข้อมูลที่ใช้งานจริงและเชื่อว่ามันพร้อมสำหรับการใช้งานจริงแล้ว คุณสามารถผสานสาขาของคุณเข้ากับสาขาที่ใช้งานจริงโดย:
ลากและวางสาขาสเตจจิ้งลงบนสาขาที่ใช้งานจริง
ใช้คำสั่ง
git mergeเพื่อผสานสาขาของคุณ
สิ่งนี้จะผสานการเปลี่ยนแปลงล่าสุดจากสาขาสเตจจิ้งเข้ากับสาขาที่ใช้งานจริงและอัปเดตเซิร์ฟเวอร์ที่ใช้งานจริงด้วยการเปลี่ยนแปลงเหล่านั้น
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก:guilabel:`เชื่อมต่อ`เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป:guilabel:Apps เนื่องจากโมดูลอาจไม่ปรากฏโดยตรงในรายการแอป ให้อัปเดตรายการแอปโดยการเปิดใช้งาน:ref:โหมดนักพัฒนา <developer-mode>`และคลิก:menuselection:`อัปเดตรายการแอป --> อัปเดต
เพิ่มการเปลี่ยนแปลง¶
ส่วนนี้อธิบายวิธีการเพิ่มการเปลี่ยนแปลงในโมดูลของคุณโดยการเพิ่มฟิลด์ใหม่ในโมเดลและปรับใช้งาน
จาก 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 เมื่อคุณพุชการเปลี่ยนแปลง ให้เพิ่มเวอร์ชั่นของโมดูลใน manifest โดยการเปิด
__manifest__.pyและแทนที่:'version': '0.1',
ด้วย:
'version': '0.2',
แพลตฟอร์มจะตรวจจับการเปลี่ยนแปลงเวอร์ชั่นและทริกเกอร์การอัปเดตโมดูลเมื่อปรับใช้งานรีวิชันใหม่
ถัดไป พุชการเปลี่ยนแปลง
เมื่อคุณ ทดสอบการเปลี่ยนแปลงของคุณ แล้ว คุณสามารถรวมเข้ากับบรานช์โปรดักชัน เช่น โดยการลากและวางบรานช์ลงบนบรานช์โปรดักชันในอินเทอร์เฟซ Odoo.sh เนื่องจากคุณได้เพิ่มเวอร์ชั่นของโมดูลใน manifest แพลตฟอร์มจะอัปเดตโมดูลโดยอัตโนมัติ และฟิลด์ใหม่ของคุณจะพร้อมใช้งานทันที มิฉะนั้น คุณสามารถ อัปเดตโมดูลด้วยตนเอง ภายในรายการแอป
ใช้ไลบรารี Python ภายนอก¶
หากคุณต้องการใช้ไลบรารี Python ภายนอกที่ไม่ได้ติดตั้งโดยค่าเริ่มต้น คุณสามารถกำหนดไฟล์ requirements.txt ที่แสดงรายการไลบรารีภายนอกที่โมดูลของคุณต้องการ แพลตฟอร์มจะใช้ไฟล์นี้เพื่อติดตั้งไลบรารี Python ที่โปรเจกต์ของคุณต้องการโดยอัตโนมัติ
Note
ไม่สามารถติดตั้งหรืออัปเกรดแพ็กเกจระบบบนฐานข้อมูล Odoo.sh (เช่น แพ็กเกจ apt) อย่างไรก็ตาม ภายใใต้เงื่อนไขเฉพาะ แพ็กเกจสามารถพิจารณาเพื่อการติดตั้ง ได้ สิ่งนี้ใช้กับโมดูล Python ที่ต้องการแพ็กเกจระบบสำหรับการคอมไพล์และโมดูล Odoo ของบุคคลที่สามด้วย
ส่วนขยาย PostgreSQL ไม่รองรับใน Odoo.sh ดังนั้นจึงไม่สามารถติดตั้งส่วนขยาย (เช่น PostGIS, ltree, ...) ในฐานข้อมูล Odoo.sh
ตัวอย่างเช่น เพื่อใช้ ไลบรารี Unidecode ในโมดูลของคุณ:
สร้างไฟล์
requirements.txtในโฟลเดอร์รากของรีพอสิทอรีของคุณ:จาก editor ของ Odoo.sh สร้างและเปิดไฟล์
~/src/user/requirements.txtจากคอมพิวเตอร์ของคุณ สร้างและเปิดไฟล์
~/src/odoo-addons/requirements.txt
เพิ่มลงในไฟล์:
unidecode
ตอนนี้คุณสามารถใช้ไลบรารีในโมดูลของคุณ เช่น เพื่อลบเครื่องหมายเสียงในตัวอักษรในฟิลด์ name ของโมเดลของคุณ ในการดำเนินการนี้ ให้เปิดไฟล์
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)
เพิ่มเวอร์ชั่นของโมดูลเพื่อติดตั้ง Python dependency โดยแก้ไข:ref:
manifest ของโมดูล <odoo-sh/module/add/manifest>__manifest__.pyจากนั้น push การเปลี่ยนแปลง
Tip
Stage ไฟล์
requirements.txtโดยรันgit add requirements.txt