跳至內容
選單
此問題已被標幟
3 回覆
7290 瀏覽次數

Hello,

When I update data with an override "write" function, I do a post request for an external application with the id of changed record (cf: the code bellow). Then the app get the values in postgres but the values hasn't change at this time.


@api.multi    
def write(self, values):
    for record in self:            
        res = super(my_class_xxxx, self).write(values) 
        data = {"id": record.id}
        requests.post("https://us-central1-xxxxxxxx.com", data=data)        
    return res        

 I think the record is update in Odoo but the value of the database change when the write function is returned.

What can I do for call the endpoint when the data has changed in postgres?

頭像
捨棄
最佳答案

hmm you are right is not committed yet DB. it's committed when request return result 
I think you need to explicitly commit the cursor to stored data forcefully in DB like

​@api.multi
def write(self, values):
    for record in self:
        res = super(my_class_xxxx, self).write(values)
        data = {"id": record.id}
​        record.env.cr.commit()
       requests.post("https://us-central1-xxxxxxxx.com", data=data)
    return res

頭像
捨棄
最佳答案

Hi Theo: 

You may want to consider using an Automated Action (Settings > Technical > Automation) to invoke the api on the On Creation trigger condition of the model.

頭像
捨棄
作者 最佳答案

Thank you both for your answers, the method of Ravi Gadhia works perfectly so I haven't tried your's ​Paresh Wagh ​but I think it can works too :)

頭像
捨棄

it will not work because odoo commits the cursor/transaction when the response despatched.

相關帖文 回覆 瀏覽次數 活動
18
8月 18
20067
2
3月 25
558
6
12月 23
45141
1
4月 25
904
0
2月 25
648