跳至內容

【Odoo 開發分享】如何建立第一個 Odoo 應用程式(一)

大家好,

之前的文章有討論如何使用開發者模式建立一個應用程式,這次我們將用程式碼的方式建立第一個 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 模組就安裝好了(但還沒有功能)!

【Odoo 開發分享】如何建立第一個 Odoo 應用程式(二)