สร้างโมดูล

ก่อนที่จะสร้างโมดูลแรกของคุณ จำเป็นต้อง สร้างโปรเจกต์ Odoo.sh และทราบ URL ของ GitHub repository ของคุณ

อภิธานศัพท์

  • ~/src คือไดเรกทอรีที่เก็บ Git repositories ที่เกี่ยวข้องกับโปรเจกต์ Odoo ของคุณ

  • odoo คือผู้ใช้ GitHub

  • odoo-addons คือ GitHub repository

  • feature-1 คือชื่อของบรานช์สำหรับพัฒนา

  • main คือชื่อของบรานช์โปรดักชัน

  • my_module คือชื่อของโมดูล

แทนที่สิ่งเหล่านี้ตามความจำเป็น

สร้างสาขาการพัฒนา

จาก มมุมองสาขา:

  • ในแผงนำทางสาขา คลิกปุ่ม + (สาขาพัฒนาใหม่) ถัดจาก พัฒนา

  • ภายใต้ แยก เลือกสาขา main

  • ภายใต้ ไปยัง ป้อน feature-1

การแยกสาขาการผลิตเพื่อสร้างสาขาพัฒนาบน Odoo.sh

เมื่อการสร้างพร้อมแล้ว คุณสามารถเข้าถึง เครื่องมือแก้ไข และโค้ดของสาขาพัฒนาของคุณจากโฟลเดอร์ ~/src/user

สร้างโครงสร้างโมดูล

การสร้างโครงสร้างโมดูล

แม้ว่าจะไม่จำเป็น แต่การสร้างโครงสร้างโมดูลช่วยหลีกเลี่ยงความน่าเบื่อในการตั้งค่าโครงสร้างโมดูล Odoo พื้นฐาน คุณสามารถสร้างโครงสร้างโมดูลใหม่โดยใช้ไฟล์ปฏิบัติการ odoo-bin

จากเทอร์มินัล เครื่องมือแก้ไข รัน:

odoo-bin scaffold my_module ~/src/user/

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`เพื่อทำความเข้าใจโครงสร้างของโมดูลและเนื้อหาของแต่ละไฟล์

พุชไปยังสาขาการพัฒนา

  1. จัดเตรียมการเปลี่ยนแปลงที่จะคอมมิตโดยรัน:

    git add my_module
    
  2. คอมมิตการเปลี่ยนแปลงของคุณโดยรัน:

    git commit -m "My first module"
    
  3. พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกลโดยรัน:

ทดสอบโมดูล

สาขาควรปรากฏภายใต้ส่วน:guilabel:การพัฒนา`ของแผงนำทาง:doc:`มุมมองสาขา <getting_started/branches>

ตัวอย่างของสาขาการพัฒนา

คลิกที่ชื่อสาขาเพื่อดูประวัติของมัน รวมถึงการเปลี่ยนแปลงที่คุณเพิ่งพุชไป เมื่อฐานข้มูลพร้อมแล้ว ให้คลิก:guilabel:`เชื่อมต่อ`เพื่อเข้าถึง

ปุ่มเชื่อมต่อเพื่อเข้าถึงฐานข้อมูล

หากโปรเจกต์ Odoo.sh ของคุณถูกกำหนดค่าให้ติดตั้งโมดูลโดยอัตโนมัติ มันจะปรากฏโดยตรงบนแดชบอร์ดฐานข้อมูล มิฉะนั้นจะสามารถติดตั้งได้ภายใต้แอป:guilabel:Apps

โมดูลใหม่บนแดชบอร์ดฐานข้อมูล

ทดสอบกับข้อมูลการใช้งาน

Note

ฐานข้อมูลที่ใช้งานจริงจำเป็นสำหรับขั้นตอนนี้ หากคุณยังไม่มี ให้สร้างมันขึ้นมา

เมื่อคุณทดสอบโมดูลในบิลด์การพัฒนาด้วยข้อมูลสาธิตและเชื่อว่ามันพร้อมแล้ว คุณสามารถทดสอบด้วยข้อมูลที่ใช้งานจริงโดยใช้สาขาสเตจจิ้ง

คุณสามารถ:

  • แปลงสาขาการพัฒนาของคุณเป็นสาขา staging โดยการลากและวางลงในส่วน Staging

  • รวมเข้ากับสาขา staging ที่มีอยู่โดยการลากและวางลงบนสาขานั้น

  • ใช้คำสั่ง git merge เพื่อรวมสาขาของคุณ

การดำเนินการนี้จะสร้าง staging build ใหม่ที่ทำสำเนาฐานข้อมูลการใช้งานจริงและรันบนเซิร์ฟเวอร์ที่อัปเดตด้วยการเปลี่ยนแปลงล่าสุดของสาขาคุณ

เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง

ติดตั้งโมดูล

ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก Update Apps List ‣ Update

Note

โมดูลจะไม่ถูกติดตั้งโดยอัตโนมัติ เนื่องจากวัตถุประสงค์ของ staging build คือการทดสอบพฤติกรรมของการเปลี่ยนแปลงของคุณเหมือนกับที่จะเป็นบนฐานข้อมูลการใช้งานจริง ดังนั้นคุณจะไม่ต้องการให้โมดูลถูกติดตั้งโดยอัตโนมัติ

ปรับใช้ในการใช้งาน

เมื่อคุณทดสอบโมดูลในสาขา staging กับข้อมูลการใช้งานจริงแล้วและเชื่อว่าพร้อมสำหรับการใช้งานจริง คุณสามารถรวมสาขาของคุณเข้ากับสาขาการใช้งานจริงโดย:

  • ลากและวางสาขา staging ลงบนสาขาการใช้งานจริง

  • ใช้คำสั่ง git merge เพื่อรวมสาขาของคุณ

การดำเนินการนี้จะรวมการเปลี่ยนแปลงล่าสุดจากสาขา staging เข้ากับสาขาการใช้งานจริงและอัปเดตเซิร์ฟเวอร์การใช้งานจริงด้วยการเปลี่ยนแปลงเหล่านั้น

เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง

ติดตั้งโมดูล

ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก Update Apps List ‣ Update

เพิ่มการเปลี่ยนแปลง

ส่วนนี้อธิบายวิธีเพิ่มการเปลี่ยนแปลงในโมดูลของคุณโดยการเพิ่มฟิลด์ใหม่ในโมเดลและทำการ deploy

  1. จาก 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())
    
  2. เปิดไฟล์ views/views.xml และหลังจาก:

    <field name="value2"/>
    

    เพิ่ม:

    <field name="start_datetime"/>
    
  3. การเปลี่ยนแปลงเหล่านี้จะเปลี่ยนแปลงโครงสร้างฐานข้อมูลโดยการเพิ่มคอลัมน์ในตารางและแก้ไขมุมมอง เพื่อให้ถูกนำไปใช้กับฐานข้อมูลที่มีอยู่ เช่น ฐานข้อมูลการใช้งานจริงของคุณ การเปลี่ยนแปลงเหล่านี้จำเป็นต้องอัปเดตโมดูล หากคุณต้องการให้การอัปเดตดำเนินการโดยอัตโนมัติโดยแพลตฟอร์ม Odoo.sh เมื่อคุณ push การเปลี่ยนแปลง ให้เพิ่มเวอร์ชั่นของโมดูลใน manifest โดยการเปิด __manifest__.py และแทนที่:

    'version': '0.1',
    

    ด้วย:

    'version': '0.2',
    

    แพลตฟอร์มจะตรวจพบการเปลี่ยนแปลงเวอร์ชั่นและเริ่มการอัปเดตโมดูลเมื่อมีการปรับใช้รีวิชันใหม่

  4. ถัดไป พุชการเปลี่ยนแปลง

  5. เมื่อคุณ: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 ในโมดูลของคุณ:

  1. สร้างไฟล์ requirements.txt ในโฟลเดอร์รากของ repository ของคุณ:

    • จากเอดิเตอร์ Odoo.sh สร้างและเปิดไฟล์ ~/src/user/requirements.txt

    • จากคอมพิวเตอร์ของคุณ สร้างและเปิดไฟล์ ~/src/odoo-addons/requirements.txt

  2. เพิ่มในไฟล์:

    unidecode
    
  3. ตอนนี้คุณสามารถใช้ไลบรารีในโมดูลของคุณได้แล้ว เช่น เพื่อลบเครื่องหมายเสียงออกจากตัวอักษรในฟิลด์ชื่อของโมเดลของคุณ ในการทำเช่นนี้ ให้เปิดไฟล์ models/models.py และก่อน:

    from odoo import models, fields, api
    

    เพิ่ม:

    from unidecode import unidecode
    
  4. หลัง:

    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)
    
  5. เพิ่มเวอร์ชั่นโมดูลเพื่อติดตั้ง dependency ของ Python โดยแก้ไข manifest ของโมดูล __manifest__.py

  6. จากนั้น พุชการเปลี่ยนแปลง

    Tip

    สเตจไฟล์ requirements.txt โดยรัน git add requirements.txt