콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
3 답글
7938 화면

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
20958
2
3월 25
1487
6
12월 23
46574
0
8월 25
127
1
8월 25
495