odoo-8
Odoo v8 API (जावास्क्रिप्ट से कॉल पायथन फ़ंक्शन) का उपयोग कर आरपीसी
खोज…
टिप्पणियों
यदि आप जावास्क्रिप्ट से आरपीसी में उनका उपयोग करने के लिए पायथन में नए तरीकों को जोड़ने पर विचार कर रहे हैं, तो विधि डेकोरेटर्स के निम्नलिखित विकल्पों पर विचार करें: यदि आपको आईडी / रिकॉर्डसेट से निपटना है तो अजगर विधि परिभाषा के लिए डेकोरेटर चुनें:
- @ api.multi - अपनी विधि में रिकॉर्डसेट प्राप्त करने के लिए
- @ api.one - उपर्युक्त उदाहरणों में अपने तरीके से एक-एक करके ब्राउज़_कार्ड प्राप्त करने के लिए @ api.multi का उपयोग किया जाता है, लेकिन @ api.one का उपयोग आईडी से निपटने के लिए भी किया जा सकता है, आवश्यकताओं के आधार पर (हालांकि, इसका उपयोग करने के लिए दृढ़ता से अनुशंसा की जाती है) api.multi के बजाय @ api.one प्रदर्शन कारणों से)।
या अगर यह सरल कार्य है जिसे रिकॉर्ड / आईडी के साथ नहीं करना है तो अजगर विधि के लिए डेकोरेटर चुनें:
- @ api.model - पुरानी शैली एपीआई के साथ विनम्र होने की अनुमति देता है।
- @ api.multi - फिर से, आप इसे यहाँ भी उपयोग कर सकते हैं, बस जावास्क्रिप्ट में पहले तर्क के रूप में
[ ]
(खाली सरणी) पास करें ...
संदर्भ: Odoo RPC प्रलेखन , Odoo 8 एपीआई विधि सज्जाकार
एक उदाहरण ओडू मॉडल से कॉल करने के तरीके
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)
ओडू आरपीसी उदाहरण
नीचे दिए गए उदाहरण ओडू में जावास्क्रिप्ट से पायथन फ़ंक्शन को कॉल करने का तरीका बताते हैं। उदाहरण में हम इस पृष्ठ पर जल्दी वर्णित my_model के तरीकों को कहते हैं ।
हम मानते हैं कि निम्नलिखित उदाहरणों में "list_of_ids" चर में "my.model" मॉडल के मौजूदा रिकॉर्ड के आईडी (सूची) हैं।
- विधि की कॉल 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 });
- कॉल की विधि bar_no_deal_with_ids को @ api.model से सजाया गया:
new instance.web.Model("my.model") .call( "bar_no_deal_with_ids", [arg1, arg2]) .then(function (result) { // do something with result });
इसके अलावा, अगर इसे लागू करने के आधार पर कुछ समझदारी है, तो आप @ api.multi से सजाए गए फ़ंक्शन को कॉल कर सकते हैं, भले ही आपको आईडी के साथ सौदा न करना पड़े (बस आईडी की जगह खाली सरणी पास करें, तर्क सूची के पहले तत्व के रूप में):
new instance.web.Model("my.model") .call( "foo_manipulate_records_2", [[], arg1, arg2]) .then(function (result) { // do something with result });
यह तरीका कुछ मामलों में उपयोगी हो सकता है, क्योंकि v8.0 एपीआई में अघोषित फ़ंक्शन को @ api.multi (@ api.multi एक डिफॉल्ट डेकोरेटर के रूप में) माना जाता है
RPC कॉल के लिए दो मापदंडों का Cxcept जो उपरोक्त उदाहरणों (फ़ंक्शन नाम और तर्क सूची) में उपयोग किया जाता है, आप तीसरे पैरामीटर का उपयोग कर सकते हैं - कीवर्ड तर्क का एक शब्दकोश । यह एक संदर्भ को घुमाने के लिए अत्यधिक अनुशंसित है (कुछ मामलों में यह आवश्यक भी हो सकता है), क्योंकि यह दूरस्थ प्रक्रिया (स्थानीयकरण, आदि) के व्यवहार को बदल सकता है। 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
});
बेशक, आप कस्टम उदाहरण का उपयोग कर सकते हैं, यदि आवश्यक हो, तो इस उदाहरण में मौजूदा एक के चारों ओर घूमने के बजाय।