私は現在、APIのためにOdooを使用することを主張するクライアントのためのアンドロイドアプリケーションを開発しています。私はそれについて何も考えていません。linkを参照してもそれを取得していません。 、ユーザー名、パスワードを入力してください。もし誰かが以前に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用です。これはphython用です。右? – Noufal
はいここで私はPythonを使用してxmlrpcを使用しました。それを適応させることができます –
をOdooにアンドロイドを接続する方法はたくさんあります。ここで彼らは、次のとおりです。
- JSON-RPC
- XML-RPC(特にaXMLRPC、これは私が使っているものです)
- Odoo Mobile Frameworkと呼ばれるフレームワークでもあります。私はそれを試してみましたが、多くの問題を発見し、正しく動作させることができませんでした。文書hereがあります。
OdooにはWeb Service APIがあり、Python、Ruby、PHP、Javaで利用できます。私は強くお勧めします。
私の場合、私はaXMLRPC gitリポジトリをクローンし、プロジェクトにパッケージを作成し、元のパッケージ名を適合させました。しかし、最近、私はthisをスタックオーバーフローで見つけました。あなたはGradleを使ってAndroidプロジェクトにaXMLRPCを追加する方法を説明しました(まだ試してみませんでした)。
Odooは、3つのエンドポイント利用可能になった:
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メソッドは、実際に使用可能なデータベースのリストを含む配列であるオブジェクトを返します。
login mehtodは、認証されたユーザーのIDであるIntegerを返します。
Odoo CRUD mehtods(search_read、search_count、search、write、create、unlink)は、希望するメソッドに一致するOdoo Web Service API Javaコードを調べることができます。
次に、search_readメソッドの例を示します。私は、あなたがclientという名前のXMLRPCClientを持っていると仮定します。Collections.singletonList(Collections.singletonList(Arrays.asList("supplier", "=", true)));
フィールド、あなたが取得したいフィールド:例えばOdooモデル"res.partner"
- オブジェクト
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; }
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と名前を取得できます。他の残りのCRUDメソッドの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();
の使用の
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;
}
}
例は、あなたが簡単に彼らはOdoo Web Service API documentationを読み取ることにより、どのように動作するかの方法を見つけることができます。
私はこれがあなたにいくつかの洞察を与えることを望みます。
@Noufalそれが動作するかどうか教えてください。 – guidev224
あなたはストレッチやOdooのためだけに必要なAndroidのAPIからアプリケーションを作成する場合は、ここではオープンソースのAPI https://github.com/oogbox/odoo-mobile-api(OdooアンドロイドAPI)
が最初にアプリのレベルに次の依存関係を追加し、アンドロイドで使用することです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. EF 6を搭載したモノ3 - 誰にも運がありましたか?
- 2. オープンソースのAndroid搭載音声認識アプリケーションはありますか?
- 3. ここにAndroid搭載マップクラスがありません
- 4. Android搭載のGradlew?
- 5. Android搭載フラッシュLED?
- 6. 画面サイズがGL_MAX_TEXTURE_SIZE以上のAndroid搭載端末はありますか?
- 7. Android搭載端末に正方形の画面がありますか?
- 8. Android搭載端末には静的IPアドレスがありますか?
- 9. 根っこのAndroid搭載端末を搭載したFlashプラグイン
- 10. Android搭載デバイスの振動
- 11. Androidブラウザ搭載のHTML5オフラインストレージ
- 12. AndroidTV以外のAndroid搭載端末のLeanback機能はありますか?
- 13. Android搭載画像volley + recyclerView
- 14. Androidサービス(常時GPS搭載)
- 15. Android搭載タイプフェイスfrom .tff
- 16. Android搭載Checkpoint Hyper-V
- 17. Android搭載APIはどれですか?
- 18. Android搭載のオンデマンドホルダー(DalvikまたはART)?
- 19. DiskCacheを搭載したImageResizerのライセンスはありますか?
- 20. Android:スリープステージ/ Android搭載デバイスのレベル?
- 21. Android搭載AndroidとWearエミュレータ5台+
- 22. 角度2ユニバーサルブートストラップ3搭載のAndroid搭載端末のデスクトップとして
- 23. Android搭載端末への展開がVisual Studioに見つかりません
- 24. アプリ/アクティビティにAndroid搭載のデフォルトのオーディオプレーヤー
- 25. Razorを搭載したMVC3の_Layout.cshtmlにはビューモードがありますか?
- 26. Android搭載端末がWi-Fi専用かどうかを確認する方法はありますか?
- 27. MKMapViewは、Google Maps APIを搭載したAndroidの機能を搭載していますか?
- 28. Android搭載のGPSによるUIパフォーマンス
- 29. GoogleマップAndroid搭載端末のトラフィックオーバーレイ
- 30. Android搭載カメラのプレビューと表面ビュー
このドキュメントを参照できますhttps://media.readthedocs.org/pdf/odoo-mobile-doc/latest/odoo-mobile-doc.pdfまたはhttps://github.com/Odoo-mobile/framework –
あなたはodoo fr backend apiをしますか? – Noufal
どのバージョンのodooについてこの質問をしていますか? –