Odoo RPC 示例
下面的示例演示瞭如何在 Odoo 8 中從 JavaScript 呼叫 Python 函式。在這些示例中,我們在本頁的前面部分描述了 my_model 的方法。
我們假設在以下示例中,“list_of_ids”變數包含“my.model”模型的現有記錄的 id 的列表(陣列)。
- 呼叫方法 foo_manipulate_records_1 用 @ api.multi 修飾 :
new instance.web.Model("my.model")
.call( "foo_manipulate_records_1", [list_of_ids])
.then(function (result) {
// do something with result
});
- 呼叫方法 foo_manipulate_records_2 用 @ api.multi 修飾 :
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
});
此外,如果它有一定的意義取決於實現,那麼你可以呼叫 @ api.multi 修飾的函式,即使你不處理 id(只是傳遞空陣列代替 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 呼叫的 Cxcept,你可以使用第三個引數 - 關鍵字引數的字典。強烈建議轉換上下文(在某些情況下甚至可能需要),因為它可能會改變遠端過程的行為(本地化等)。請參閱下面的 RPC 呼叫中帶有 context 引數的示例(同樣可以應用於上面的所有示例)
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
});
當然,如果需要,你也可以使用自定義上下文,而不是像本示例中那樣轉換現有上下文。