สร้างโมดูล

ก่อนที่จะสร้างโมดูลแรกของคุณ จำเป็นต้อง สร้างโปรเจกต์ 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.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 an example of a controller implementing some routes

  • views/templates.xml two example qweb views used by the controller routes

  • __manifest__.py the manifest of your module, including its title, description and data files to load. Uncomment the access control list data file:

    # 'security/ir.model.access.csv',
    

ด้วยตนเอง

To create your module structure manually, follow the Server framework 101 tutorial to understand the structure of a module and the content of each file.

Push on the development branch

  1. Stage the changes to be committed by running:

    git add my_module
    
  2. Commit your changes by running:

    git commit -m "My first module"
    
  3. Push your changes to your remote repository by running:

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

    git push https HEAD:feature-1
    

Test the module

The branch should appear under the Development section of the Branches view navigation panel.

Example of a development branch

Click the branch name to view its history, including the changes you just pushed. Once the database is ready, click Connect to access it.

The connect button to access a database

If your Odoo.sh project is configured to automatically install the module, it will appear directly on the database dashboard. Otherwise, it will be available for installation under the Apps app.

The new module on the database dashboard

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

Note

A production database is required for this step. If you do not have one yet, create it.

Once you have tested the module in a development build with the demo data and believe it is ready, you can test it with the production data using a staging branch.

คุณสามารถ:

  • แปลงสาขาการพัฒนาของคุณเป็นสาขา 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