我目前正在爲堅持使用Odoo for API的客戶開發一個Android應用程序。我沒有任何關於它的任何想法即使在提及link之後,我仍然沒有收到它。他們提供了一個URL,數據庫名稱,用戶名和密碼。如果任何人之前使用Android做過Odoo,你能提出什麼建議嗎?有沒有人用Android整合ODOO?
回答
這僅僅是一個例子做訪問聯繫人/合作伙伴從odoo:
#!/usr/bin/env python
import csv
from xmlrpclib import ServerProxy
SERVER = 'http://localhost:8069'
DATABASE = 'testcompany'
USERNAME = 'admin'
PASSWORD = 'password'
FILE_PATH = 'ODOO_clientsMain2_test.csv'
server = ServerProxy('http://localhost:8069/xmlrpc/common')
user_id = server.login(DATABASE, USERNAME, PASSWORD)
server = ServerProxy('http://localhost:8069/xmlrpc/object')
def search(list, key):
for item in list:
return item[key]
reader = csv.reader(open(FILE_PATH,'rb'))
for row in reader:
#print row
partner_template = {
'name': row[0],
#'company_id': row[1],
}
if row[2] is not None and row[2]<>'':
partner_template.update({'email': row[2]})
if row[5] is not None and row[5]<>'':
partner_template.update({'tin': row[5]})
if row[6] is not None and row[6]<>'':
partner_template.update({'ref': row[6]})
if row[8] is not None and row[8]<>'':
partner_template.update({'phone': row[8]})
if row[9] is not None and row[9]<>'':
partner_template.update({'mobile': row[9]})
print partner_template
partner_id = server.execute_kw(DATABASE, user_id, PASSWORD, 'res.partner', 'create', [partner_template])
#create External ID
external_ids = {
'model': 'res.partner',
'name': row[11],
'res_id': partner_id,
}
external_id = server.execute_kw(DATABASE, user_id, PASSWORD, 'ir.model.data', 'create', [external_ids])
# update related fields
if row[7] is not None and row[7]<>'':
#look up and update payment term
payment_term_id = server.execute_kw(DATABASE, user_id, PASSWORD, 'account.payment.term', 'search_read', [[['name','=',row[7]],['active', '=', True]]],{'fields': ['id'], 'limit': 1})
if payment_term_id is not None:
id = server.execute_kw(DATABASE, user_id, PASSWORD, 'res.partner', 'write', [[partner_id],{'property_payment_term': search(payment_term_id,'id')}])
if row[10] is not None and row[10]<>'':
#look up and update pricelist
pricelist_id = server.execute_kw(DATABASE, user_id, PASSWORD, 'product.pricelist', 'search_read', [[['name','=',row[10]],['active', '=', True]]],{'fields': ['id'], 'limit': 1})
if pricelist_id is not None:
id = server.execute_kw(DATABASE, user_id, PASSWORD, 'res.partner', 'write', [[partner_id],{'property_product_pricelist': search(pricelist_id,'id')}])
我想要的是Android.I認爲這是爲phython.Right? – Noufal
是的,我在這裏使用Python的xmlrpc,你可以適應它 –
有很多的方式將Android連接到Odoo。在這裏,他們是:
- JSON-RPC
- XML-RPC(尤其是aXMLRPC,這是我在用的)
- 還有一個叫Odoo Mobile Framework框架。我嘗試過但發現了很多問題,但無法正常工作。你可以找到文檔here。
Odoo的Web Service API可用於Python,Ruby,PHP和Java。我強烈建議去看看。
對於我的情況,我克隆了aXMLRPC git存儲庫,在我的項目中創建了一個包並調整了原始包名。但最近我發現Stack Overflow的this解釋瞭如何使用Gradle將AMLMLPC添加到您的Android項目中(我還沒有嘗試過)。
Odoo已經提供三個端點:
xmlrpc/2/db
讓你的服務器上可用的數據庫列表,它不需要進行身份驗證;xmlrpc/2/common
登錄到服務器,它不需要進行身份驗證;xmlrpc/2/object
,用於通過execute_kw
RPC函數調用odoo模型的方法。public class OdooConnect { String url; private XMLRPCClient client; public OdooConnect(String serverAddress, String path) { url = serverAddress + "/xmlrpc/2/" + path; client = new XMLRPCClient(url); } public Object login(String db, String username, String password) { Object object; try { object = client.call("login", db, username, password); return object; } catch (XMLRPCException e) { e.printStackTrace(); } return null; } public Object checkServer() { Object object; try { object = client.call("list", new Object[]{}); return object; } catch (XMLRPCException e) { e.printStackTrace(); } return null; } }
在這個類中,構造函數作爲參數服務器地址(也可以是http(s)://your_ip_address:the_port_number
)和path ('db', 'common' or 'object')
。
checkServer方法返回一個實際上是包含可用數據庫列表的數組的對象。
登錄mehtod返回一個Integer,它是經過身份驗證的用戶的Id。
對於Odoo CRUD方法(search_read,search_count,search,write,create,unlink),您可以看看與您想要的方法匹配的Odoo Web Service API Java代碼。
這是search_read方法的一個例子。我假設你有一個名爲client的XMLRPCClient。
public Object search_read(String db, int user_id, String password, String object, List conditions, Map<String, List> fields) {
Object result = null;
try {
result = client.call("execute_kw", db, user_id, password, object, "search_read", conditions, fields);
} catch (XMLRPCException e) {
e.printStackTrace();
}
return result;
}
凡
- 對象是例如
"res.partner"
- 條件的Odoo模型域(過濾器)是這樣的:
Collections.singletonList(Collections.singletonList(Arrays.asList("supplier", "=", true)));
領域,你想要得到的領域,
fields = new HashMap() {{put("fields", Arrays.asList("id","name","is_company","street")); }};
您必須將方法的結果轉換爲Object [],它將爲您提供一個數組,其中包含一個表示記錄的對象列表。
Object[] objects = (Object[]) result;
if (objects.length > 0) {
for (Object object : objects) {
String name= OdooUtil.getString((Map<String, Object>) object, "name");
boolean is_company= OdooUtil.getBoolean((Map<String, Object>) object, "is_company");
String street = OdooUtil.getString((Map<String, Object>) object, "street");
int id= OdooUtil.getInteger((Map<String, Object>) object, "id");
}
}
這裏OdooUtil類
public class OdooUtil {
public static String getString(Map<String, Object> map, String fieldName) {
String res = "";
if (map.get(fieldName) instanceof String) {
res = (String) map.get(fieldName);
}
return res;
}
public static Integer getInteger(Map<String, Object> map, String fieldName) {
Integer res = 0;
if (map.get(fieldName) instanceof Integer) {
res = (Integer) map.get(fieldName);
}
return res;
}
public static Double getDouble(Map<String, Object> map, String fieldName) {
Double res = 0.0;
if (map.get(fieldName) instanceof Double) {
res = (Double) map.get(fieldName);
}
return res;
}
public static Boolean getBoolean(Map<String, Object> map, String fieldName) {
Boolean res = false;
if (map.get(fieldName) instanceof Boolean) {
res = (Boolean) map.get(fieldName);
}
return res;
}
public static Float getFloat(Map<String, Object> map, String fieldName) {
Float res = 0f;
if (map.get(fieldName) instanceof Float) {
res = (Float) map.get(fieldName);
}
return res;
}
}
如果你有many2one場,你只能訪問ID和相關記錄的名稱。您可以使用以下類來獲取many2one記錄的id和名稱。
public class Many2One {
private int id;
private String name;
public Many2One() {
}
public static Many2One getMany2One(Map<String, Object> stringObjectMap, String fieldName) {
Integer fieldId = 0;
String fieldValue = "";
Many2One res = new Many2One();
if (stringObjectMap.get(fieldName) instanceof Object[]) {
Object[] field = (Object[]) stringObjectMap.get(fieldName);
if (field.length > 0) {
fieldId = (Integer) field[0];
fieldValue = (String) field[1];
}
}
res.id = fieldId;
res.name = fieldValue;
return res;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
Many2One類
String partner_name= Many2One.getMany2One((Map<String, Object>) object, "partner_id").getName();
int partner_id= Many2One.getMany2One((Map<String, Object>) object, "partner_id").getId();
對於其他剩餘的CRUD方法的使用示例,你可以很容易地找到一個方式,他們通過閱讀Odoo Web Service API documentation是如何工作的。
我希望這能給你一些見解。
@Noufal讓我知道它是否工作。 – guidev224
如果要創建從拉伸你的應用程序,只在需要的Android API的Odoo,這裏是開源的API https://github.com/oogbox/odoo-mobile-api(Odoo的Android API)
要在Android上使用,首先添加以下依賴於你的應用水平build.gradle
compile 'com.oogbox.api:odoo:1.0.0'
文檔:https://github.com/oogbox/odoo-mobile-api#getting-started
感謝
真的很好努力..我可以知道我們需要通過登錄時通過CSRF令牌嗎?由於Odoo 10版本在登錄時具有CSRF令牌安全性。我們需要在登錄時通過CSRF令牌或不需要? –
- 1. 有沒有人整合過Backbone.Marionette和Rendr?
- 2. 有沒有人整合了twitter與Android NDK
- 3. 使用Drupal和Ruby。有沒有人整合過?
- 4. Android:有沒有人有在webview屏幕上合適的方法?
- 5. 有沒有人將api.ai bot與Gupshup.io整合?
- 6. 有沒有人使用ACR1222L android庫?
- 7. 有沒有人有Android的cropImage示例?
- 8. 整合FosFacebookBundle沒有FosUserBundle
- 9. 有沒有人知道合理的tableview?
- 10. 有沒有人與www.atript.com合作?
- 11. 有沒有人與TestCocoon合作?
- 12. 露天和Odoo整合
- 13. Odoo沒有任何錯誤
- 14. 有沒有辦法整合zephyr與github?
- 15. Android沒有調整大小?
- 16. 有沒有人使用Raven?
- 17. 有沒有人使用ASPMaker?
- 18. 有沒有人用Jelastic v4.9 +
- 19. 有沒有人使用GoogleData?
- 20. 有沒有人用過PreProcessControlMessage
- 21. 有沒有人用influxdb cli?
- 22. 有沒有人使用DbEnumerator
- 23. 與搬運工人Odoo例如譜寫沒有工作
- 24. 有沒有人有經驗在AccountManager中使用confirmCredentials API(Android)
- 25. 有沒有人在完整的REST API中使用swaggervel?
- 26. 有沒有人在任何完整的項目上使用WebSharper?
- 27. 有沒有人將Rome2rio旅遊部件整合到他們的網站上?
- 28. 有沒有人將Fedex網絡服務整合到他們的網站?
- 29. 有沒有辦法將Google表單整合到Android應用程序中?
- 30. 有沒有人將CodedUI與Selenium結合使用?
你可以參考這個文檔https://media.readthedocs.org/pdf/odoo-mobile-doc/latest/odoo-mobile-doc.pdf或https://github.com/Odoo-mobile/framework –
Did你做任何odoo fr後端api? – Noufal
對於哪個版本的odoo你問這個問題? –