Help

0

How call an API when values change in DataBase?

Avatar
Théo Da silva

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?

Avatar
Discard
3 Answers
1
Avatar
Ravi Gadhia
Best Answer

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

Avatar
Discard
0
Avatar
Paresh Wagh
Best Answer

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.

Avatar
Discard
0
Avatar
Théo Da silva
Best Answer

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 :)

1 Comment
Avatar
Discard
Avatar
Ravi Gadhia
-

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