Odoo上書き需要計算方法の問題

2187 ワード

会社の業務需要のため、倉庫の資材調達を発生する時、同時に1筆の速達書(会社の異なる倉庫が同じ場所にないため)を発生したいと思っています.調達書は資材需要を計算する時に発生したので、私は資材需要を計算する方法を書き直して、元の業務ロジックを実行した後、内部需要によって後のロジックを処理したいと思っています.
書き始める方法は以下の通りです.
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クエリが処理される資料が実行されますが、不思議なことに、検索するたびに空になります.
その後、トレース呼び出しにより、この方法はシステムの別のプロセスで処理されていることがわかりました.現在の操作のプロセスとは異なり、コードはaddonsprocurementwizardschedulers_を参照できます.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 {}

テスト後、所望の処理効果を達成することができる.