odoo-8
Odoo v8 API를 사용하는 RPC (JavaScript의 Python 함수 호출)
수색…
비고
파이썬에서 새로운 메소드를 추가하여 JavaScript에서 RPC에 사용하려는 경우 메소드 장식 자의 다음 옵션을 고려하십시오. ids / 레코드 세트를 처리해야한다면 파이썬 메소드 정의에서 데코레이터를 선택하십시오.
- @ api.multi - 메서드에서 레코드 세트 를 가져 오는 방법
- @ api.one - 위의 예제에서 메소드에서 browse_records를 하나씩 얻으려면 @ api.multi가 사용되지만 @api.one도 요구 사항에 따라 ID를 처리하는 데 사용될 수 있습니다 (그러나 @ 성능상의 이유로 @ api.one 대신 api.multi).
또는 레코드 / ID를 처리 할 필요가없는 간단한 함수라면 python 메서드로 데코레이터를 선택하십시오.
- @ api.model - 예전 스타일의 API로 예의 바르게 처리 할 수 있습니다.
- @ api.multi - 다시 말하지만 여기에서도 사용할 수 있습니다. 자바 스크립트에서 첫 번째 인수로
[ ]
(빈 배열)을 전달하십시오.
참고 자료 : Odoo RPC 문서 , Odoo 8 API 메소드 데코레이터
메서드를 호출하는 예제 Odoo 모델
class my_model(models.Model):
_name = "my.model"
name = fields.Char('Name')
@api.multi
def foo_manipulate_records_1(self):
""" function returns list of tuples (id,name) """
return [(i.id,i.name) for i in self]
@api.multi
def foo_manipulate_records_2(self, arg1, arg2)
#here you can take advantage of "self" recordset and same time use aditional arguments "arg1", "arg2"
pass
@api.model
def bar_no_deal_with_ids(self, arg1, arg2):
""" concatenate arg1 and arg2 """
return unicode(arg1) + unicode(arg2)
Odoo RPC 예제
아래 예제는 Odoo 8의 JavaScript에서 Python 함수를 호출하는 방법을 보여줍니다.이 예에서이 페이지의 초기에 설명 된 my_model의 메서드를 호출합니다.
다음 예제에서 "list_of_ids"변수에는 "my.model"모델의 기존 레코드 ID 목록 (배열)이 들어 있다고 가정합니다.
- @ api.multi로 장식 된 foo_manipulate_records_1 메소드 호출 :
new instance.web.Model("my.model") .call( "foo_manipulate_records_1", [list_of_ids]) .then(function (result) { // do something with result });
- @ api.multi로 장식 된 메소드 foo_manipulate_records_2 호출 :
new instance.web.Model("my.model") .call( "foo_manipulate_records_2", [list_of_ids, arg1, arg2]) .then(function (result) { // do something with result });
- @ api.model로 장식 된 bar_no_deal_with_ids 메소드 호출 :
new instance.web.Model("my.model") .call( "bar_no_deal_with_ids", [arg1, arg2]) .then(function (result) { // do something with result });
또한 구현에 따라 의미가있는 경우, id를 처리하지 않아도 @ api.multi로 장식 된 함수를 호출 할 수 있습니다 (인수 목록의 첫 번째 요소 인 ID 대신 빈 배열 전달).
new instance.web.Model("my.model") .call( "foo_manipulate_records_2", [[], arg1, arg2]) .then(function (result) { // do something with result });
v8.0 API의 장식되지 않은 함수는 @ api.multi로 간주되므로 (api.multi가 기본 데코레이터이므로)이 방법은 일부 경우에 유용 할 수 있습니다.
위의 예제 (함수 이름과 인수 목록)에서 사용되는 RPC 호출에 대한 두 개의 매개 변수를 사용하면 세 번째 매개 변수 인 키워드 인수 사전을 사용할 수 있습니다. 문맥을 돌아서는 것이 좋습니다 (경우에 따라서는 필요할 수도 있습니다). 원격 절차 (현지화 등)의 동작이 변경 될 수 있으므로 상황을 바꿀 것을 적극 권장합니다. RPC 호출에서 컨텍스트 인수를 사용하여 아래 예제를 참조하십시오 (위의 모든 예제에 동일하게 적용될 수 있음)
var self = this;
new instance.web.Model("my.model")
.call("foo_manipulate_records_2", [[], arg1, arg2], {'context':self.session.user_context})
.then(function (result) {
// do something with result
});
물론이 예제 에서처럼 기존 컨텍스트를 뒤집는 대신 필요한 경우 사용자 지정 컨텍스트를 사용할 수도 있습니다.