Odoo安裝教程13-創建新的插件模塊之業務邏輯層

業務邏輯層

業務邏輯層編寫應用的業務規則,如驗證和自動計算。現在我們來爲按鈕添加邏輯,通過在模型
Python 類中編寫方法來實現。

添加業務邏輯

上文中我們在 Book 表單中添加了一個按鈕,用於檢查 ISBN 是否有效。現代 ISBN 包含 13位數字,最後一位是由前 12 位計算所得的檢查位。我們無需深入到算法的細節,這裏是一個實現驗證的 Python 方法。應當在 class Book(…)中進行添加:

@api.multi
def _check_isbn(self):
self.ensure_one()
isbn = self.isbn.replace('-', '') # 爲保持兼容性自行添加
digits = [int(x) for x in isbn if x.isdigit()]
if len(digits) == 13:
ponderations = [1, 3] * 6
terms = [a * b for a,b in zip(digits[:12], ponderations)]
remain = sum(terms) % 10
check = 10 - remain if remain !=0 else 0
return digits[-1] == check

圖書模型的 button_check_isbn()方法應使用該函數來驗證 ISBN 字段中的數字,如果驗證失
敗,應向用戶顯示警告信息。
首先要導入 Odoo API 庫,添加對應的 import 及 Odoo Warning 異常。這需要編輯library_book.py 文件修改前兩行爲:
from odoo import api, fields, models
from odoo.exceptions import Warning
然後還是在 models/library_book.py 文件 Book 類中加入:
@api.multi
def button_check_isbn(self):
for book in self:
if not book.isbn:
raise Warning('Please provide an ISBN for %s' % book.name)
if book.isbn and not book._check_isbn():
raise Warning('%s is an invalid ISBN' % book.isbn)
return True
對於記錄的邏輯,我們使用@api.multi 裝飾器。此處 self 表示一個記錄集,然後我們遍歷每一條記錄。其實@api.multi 裝飾器可以不寫,因爲這是模型方法的默認值。這裏保留以示清晰。代碼遍歷所有已選圖書,對於每本書,如果 ISBN 有值,則檢查有效性,若無值,則向用戶拋出一條警告消息。
模型方法無需返回值,但此處需至少返回 True 值。因爲不是所有 XML-RPC 客戶端實現都支持None/Null 空值,這種情況若返回空值則會導致拋出錯誤。此時可更新模塊並再次運行測試,添加–test-enable 參數來確定測試是否通過。也可以在線測試,進入 Book 表單使用正確和錯誤的ISBN 點擊按鈕進行測試。

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章