大家好,
之前的文章有討論如何使用開發者模式建立一個應用程式,這次我們將用程式碼的方式建立第一個 Odoo 應用程式:一個簡單的待辦事宜 (To-Do) 應用程式。它能夠讓我們加入新任務,並將這些任務標記為已完成,最後清除所有已完成任務的任務列表。
從基礎知識開始:建立並安裝一個新模組,可以進行更新開發時所做的修改。
Odoo 遵循類似 MVC 的體系結構,我們將在 To-Do 的應用程式中實作各層:
- model, 定義應用程式資料的結構
- view, 描述使用者界面
- controller, 應用程式的商務邏輯
接著會設定存取控制的安全性,最後再幫模組加入一些說明和品牌訊息。
透過這些方法,您將能夠逐漸了解組成應用程式的基本建構,並從零開始建構 Odoo 模組。
建立一個新的插件 (addon) 模組
一個插件 (addon) 模組是一個包含 Odoo 功能的目錄。它可以加入新功能或修改現有功能。插件模組目錄必須包含 __manifest__.py 描述檔,以及其他檔案目錄。
某些插件模組屬於應用程式。這些用於 Odoo 的應用程式,通常會有自己的 top menu。它們為 CRM 或 HR 等功能提供核心要素。因此,它們會顯示在 Odoo Apps 中。
另一種非應用程式模組插件會為這些應用程式增加額外的功能。一種簡單的區分方法如下:
- 如果您的模組向 Odoo 加入新功能或主要功能,則可能應該是一個應用程式。
- 如果模組只是對現有應用程式的功能進行更改,那麼它可能是標準的插件模組。
結論:
插件 (addon) 模組分為兩種:
- 獨立功能的應用程式
- 增加功能的輔助程式
建立模組的基本架構
客製化的模組應該要與 Odoo 的完整原始碼區分。而我們的程式碼應該保存在自己的目錄中,而且絕不能混淆 Odoo 的原始碼。
因此,為了保管我們的自定義模組,我們將使用一個新的目錄叫 custom-addons。
Odoo 插件模組是一個包含 __manifest__.py 描述檔的目錄。需要被 Python 導入 (import),所以它也必須有一個 __init__.py。
模組的目錄名稱是其技術名稱。我們將使用 todo_app。技術名稱必須是有效的 Python 標識符號:
以字母開頭,並且只能包含字母,數字和下劃線字符。
如果使用命令行,可以使用以下命令初始化我們的模組目錄,其中有一個空的 __init__.py:
$ mkdir -p ~/odoo-dev/custom-addons/todo_app $ touch ~/odoo-dev/custom-addons/todo_app/__init__.py
接下來,我們需要加入描述檔。它應該只包含一個 Python 字典,包含大約十幾種可能的屬性。
現在,使用以下內容建立 __manifest__.py 以及 __init__.py:
{ 'name': 'To-Do Application', 'description': 'Manage personal to-do tasks.', 'author': 'Daniel Reis', 'depends': ['base'], 'application': True, }
依賴 depends 屬性是一個與其他模組相依的列表。安裝此模組後,Odoo 將自動安裝它們。這不是強制性屬性,但建議保留。
如果不需要特定的依賴關係,至少應該依賴核心基礎模組。要小心確保所有的依賴關係都有明確設置;
否則,模組可能無法安裝在乾淨的資料庫中(由於缺少依賴關係),或者如果偶然其他所需模組載入後出現載入錯誤。
目前 todo_app 應用程式,暫時不需要任何特定的依賴關係,因此我們只依賴於基礎模組。
為了簡潔起見,我們選擇僅使用一些基本描述符號:
- name: 是帶有 addon 模組標題的字串。
- description: 是一個帶有功能描述的長文字,通常採用 RST 格式。
- author: 是作者姓名。它是一個字串,但可以包含以逗號分隔的名稱列表。
- depends: 依賴的插件模組的列表。它們將在此模組之前自動安裝。
- application: 是一個 Boolean flag,宣告 addon 模組是否應該作為 Apps 列表中的應用程式。
- summary: 是顯示為模組副標題的字串。預設情況下 version 是 1.0。它應遵循版本規則(有關詳細訊息,請參閱 http://semver.org/ )。在我們的模組版本之前使用 Odoo 版本是一個好習慣,例如:11.0.1.0。
- license identifier: 預設為 LGPL-3。
- website: 是一個 URL,用於搜尋有關該模組的更多訊息。這可以幫助人們找到更多文件或問題跟踪器來提交錯誤和建議。
- category: 是一個包含模組功能類別的字符串,預設為 Uncategorized。可以在 Settings | User | Groups 的“應用程式”欄位下拉列表中找到現有類別的列表。
這些其他描述符鍵也可用:
- installable: 預設為 True,但可以設置為 False 來禁用模組。
- auto_install: 如果設置為True,將在所有依賴項已安裝後立即自動安裝。它用於“膠水”模組,一旦兩個功能安裝在同一個實例中,它們就會將兩個功能連接在一起。
增加一個圖示
很簡單,只需要將一個 static/description/icon.png 加入到模組中。
請複製 odoo/addons/note/static/description/icon.png 檔案到 custom-addons/todo_app/static/description 目錄中
$ cd ~/odoo-dev $ mkdir -p ./custom-addons/todo_app/static/description $ cp ./odoo/addons/note/static/description/icon.png ./custom-addons/todo_app/static/description
licenses
為您的工作選擇許可證非常重要,您應該仔細考慮您的最佳選擇及其影響。 Odoo 模組最常用的許可證是 GNU 寬通用公共許可證 v3(LGPLv3)和 Affero 通用公共許可證 v3(AGPLv3)。 LGPL更寬容並且允許商業修改,而不需要共享相應的原始碼。 AGPL 是一個更強大的開源許可證,並且需要服務託管來共享源程式碼。透過 https://www.gnu.org/licenses/ 可以了解更多關於 GNU 許可的訊息。
安裝新模組
我們現在有一個最小結構的插件模組,而且可以安裝在的 Odoo 中。而 Odoo Server 需要知道 todo_app 模組目錄,並且讓它們可以安裝。
加入插件模組的路徑
要為 Odoo 提供新模組,需要將包含該模組的目錄位置告訴 Odoo,然後更新 Odoo 模組列表。
$ cd ~/odoo-dev $ ./odoo/odoo-bin -d todo --addons-path="custom-addons,odoo/addons" --save
–save 選項保存您在配置檔案中使用的選項。這讓我們無需每次重新啟動服務器時都重複它們; 只需執行 ./odoo-bin 並使用上次保存的選項。
您可以使用 -c 選項指定要使用(並保存到)的配置檔案和位置。
仔細查看服務器日誌。它應該有一個 INFO ? odoo: addons paths:[…] 訊息,同時包括 custom-addons 目錄。
安裝新模組
在可以安裝新的插件模組之前,需要更新模組列表。
這可以從應用程式頂層菜單和更新應用程式列表選項完成。它更新模組列表,將自上次更新以來可能加入的所有模組加入到列表中。請記住,我們需要為此選項啟用開發者模式才可見。
確保您的 Web 客戶端會話使用正確的資料庫。您可以在右上角檢查:資料庫名稱顯示在括號中,緊跟在使用者名後面,這是一種限制服務器僅使用預期資料庫的方法。
在 Odoo 11.0 之前,這是透過附加選項 --db-filter=^MYDB$ 完成的。而 Odoo 11.0 則改成 -d(或 --database)會自動執行該過濾器。
Apps 選項向我們顯示可用模組的列表。預設情況下,它只顯示應用程式模組。由於我們已經建立了一個應用程式模組,因此我們不需要移除該過濾器來查看它。
在搜索中鍵入 todo,你應該看到我們的新模組,準備好安裝:
現在點擊模組的安裝按鈕,一個新的 Odoo 模組就安裝好了(但還沒有功能)!