跳至内容
菜单
此问题已终结
3 回复
7177 查看

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
19920
2
3月 25
431
6
12月 23
45025
1
4月 25
758
0
2月 25
519