Odoo覆寫需求計算方法問題

2021-06-27 07:07:25 字數 1789 閱讀 4615

因公司業務需求,想在產生倉庫物料調撥的時候,同時產生一筆快遞單(因為公司不同的倉庫不在同乙個地方),調撥單是在計算物料需求時產生的,所以我就想覆寫計算物料需求的方法,在執行完原來的業務邏輯以後,再根據內部需求處理後面的邏輯。

開始寫的方法如下:

class rhwl_order(osv.osv):

_inherit = "procurement.order"

def run_scheduler(self, cr, uid, use_new_cursor=false, company_id=false, context=none):

super(rhwl_order,self).run_scheduler(cr,uid,use_new_cursor,company_id,context)

move_obj = self.pool.get("stock.move")

move_ids = move_obj.search(cr,uid,[('state','not in',['done','cancel']),('express_no','=',false)],context=context)

呼叫完父物件方法以後,馬上執行search查詢待處理的資料,但奇怪的是每次搜尋到的內容都是為空。

後來跟蹤呼叫發現此方法是系統另外程序來處理的,與當前操作的程序不一樣,**可參考addons\procurement\wizard\schedulers_all.py中的procure_calculation方法。

threaded_calculation = threading.thread(target=self._procure_calculation_all, args=(cr, uid, ids, context))

threaded_calculation.start()

在另外的程序處理中,cr變數代表的資料庫連線游標已經發生了變化,所以我在後面的search中,使用原來的cr變數,可能就找不到資料了。

class rhwl_order(osv.osv):

_inherit = "procurement.order"

def run_scheduler(self, cr, uid, use_new_cursor=false, company_id=false, context=none):

super(rhwl_order,self).run_scheduler(cr,uid,use_new_cursor,company_id,context)

try:

if use_new_cursor:

cr = openerp.registry(cr.dbname).cursor()

move_obj = self.pool.get("stock.move")#('warehouse_id','=',1),('rule_id','>',0),

move_ids = move_obj.search(cr,uid,[('state','not in',['done','cancel']),('express_no','=',false)],context=context)

#內部業務邏輯處理

if use_new_cursor:

cr.commit()

finally:

if use_new_cursor:

try:

cr.close()

except exception:

pass

return {}

經測試後,可以達到預期的處理效果。

覆寫 重寫(override)

如果子類定義了與父類完全相同 不算許可權 的方法或者屬性的時候,這種操作就稱為覆寫。子類定義了與父類方法名稱,引數列表,方法返回值完全相同的方法。子類不能擁有比父類更嚴格的訪問控制許可權。並且不能出現private關鍵字 判斷呼叫的是父類方法還是子類方法 a.看new 在哪 當前使用的物件是通過哪個...

Java覆寫詳解

覆寫 如果子類定義了與父類相同的屬性或方法,這個操作就稱為覆寫 方法的覆寫 子類定義了與父類方法名稱,引數型別,及個數完全相同的方法,但是覆寫不能有比父類更嚴格的訪問控制許可權 觀察簡單覆寫 package testoverride author weiwei description 簡單的覆寫 c...

GOT表覆寫技術

概念 每乙個外部定義的符號在全域性偏移表 global offset table 中有相應的條目,got位於elf的資料段中,叫做got段。作用 把位置無關的位址計算重定位到乙個絕對位址。程式首次呼叫某個庫函式時,執行時連線編輯器 rtld 找到相應的符號,並將它重定位到got之後每次呼叫這個函式都...