2013-01-16 5 views
6

私の質問は少し複雑で、新しいはOpenERPです。OpenERPで外部のIDを新しいモジュールと一緒に追加

私は外部データベースとOpenERPを持っています。外部のものはPostgreSQLではありません。 私の仕事は、2つのデータベースのパートナーを同期させる必要があることです。 外部のものが重要です。これは、外部データのデータが変更された場合でもOpenERのデータも変更されますが、OpenERPのデータが変更されても外部のものは変更されないことを意味します。

  • 私は外部のデータベースにアクセスし、私もOpenERPのにアクセスも を持つXMLのRCPを使用することができます。

  • XML RCPを使用して外部データベースからデータをインポートすることはできますが、問題は同期化されています。

  • 変更されたパートナーをINSERTして古いものを削除することはできません。古いものを特定する方法がないため、
    は削除できません。

  • 私はそれを更新する必要があります。しかし、私はどちらがどちらであるかを言う人が必要です。 と外部ID。

  • 私の知る限り、OpenERPは外部IDを扱うことができます。

これはどのように機能しますか?これを使用してres.partnerに外部IDを追加するにはどうすればよいですか?

このIDだけで新しいモジュールを作成することはできないと言われましたが、内部IDを使用する必要があります。

答えて

5

短い答え:CSVのインポートとエクスポートウィザードの作業方法を見てい - レコードのエクスポートが自動的に再インポート同じCSVできるとレコードではなく更新されますので、外部識別子を作成します再作成されました。

長い答え
あなたは、設定メニュー1を介してユーザインタフェースにアクセスすることができir.model.dataテーブル内の外部IDを、格納OpenERP。この単純なテーブルは、module_name.record_identifierという形式の「外部識別子」を、実際のテーブルと行を指すペア(model,res_id)にマッピングします。

これらの外部IDは、外部ソースによって作成されたレコード(モジュール(したがってmoduleベースの名前空間)またはインポートされたCSVファイル)によって作成されたレコードに対応するデータベースローカル行を検索するために使用されます。

たとえば、外部識別子base.EURは、データベースのEUR通貨を保持するデータベースレコードにマップされ、baseモジュールが所有します。バージョン6.1のよう

は、OpenERPは自動的エクスポートウィザードをサイドバーを使用してあるすべてのOpenERPレコードのための新たな外部識別子エクスポートを作成しています。彼らはidという名前のCSVの列にエクスポートしています。

そして、このようなid列がインポートウィザードでをインポートするCSVファイルに存在する場合、OpenERPもそれを覚えて、外部識別子を作成します。外部識別子がすでに存在する場合、レコードは作成されるのではなく更新されます。理論的には

、あなたがしなければならないすべてはあなたのマスター・データベースから余分なid2(あなたも、実際のDB IDを使用することができます)との適切なCSVファイルを作成し、OpenERPでそれをインポートしています。必要に応じて、いつでもこのCSVファイルの更新版を再インポートすることができます。

参考文献:

  • インポート輸出ウィザードは基本的にAPIメソッドexport_dataimport_data呼び出すので、必要な場合は、XML-RPC経由でこのスクリプトをすることができます。
  • ir.model.dataモデルは外部識別子(モジュールデータファイルのXMLレコードのidフィールドに対応するため、これまではXML IDと呼ばれていました)を格納します。 OpenERP 6.1で

1それが[設定]> [設定]> [シーケンス&識別子>外部識別子、およびOpenERPバージョン7 下の[設定]>技術>シーケンス&識別子>外部識別子の下に位置しています。

2は持たずドット「.」の文字と任意の文字列を指定できます:それは特別な__export__モジュールの名前空間に格納されます)

+0

'id'列の内容は外部行のIDでもかまいませんか?またはidはOpenERPによって設定されていますか? – NaGeL182

0

両方のデータベースに外部IDを格納するためのresパートナーテーブルに整数フィールドを追加します。データが外部サーバーから取得され、openerpデータベースに追加されると、外部IDがローカルサーバーのresパートナーのレコードに格納され、新しく作成されたパートナーレコードのIDも外部サーバーのパートナーレコードに保存されます。次回に外部パートナーレコードが更新されると、ローカルサーバーの外部IDを検索し、そのレコードを更新することができます。 openerpモジュールのbase_synchronizationを確認して、コードを読んでください。これが役立ちます。

+0

が、フィールドを追加するアドオンを作る意味は、それがないのですか?また、私は7.0でbase_synchronizationを見つけることができません... – NaGeL182

+0

Nevermind。上の新しい注文:私はsyncroを扱うOpenERPモジュールを作る必要があります。それでも、助けてくれてありがとう。 – NaGeL182

+1

@Anoma:データベースレコードの外部識別子を追跡することは、OpenERPフレームワークの組み込み機能であり、余分な列やモジュールを必要としません。これは、モジュールデータやインポート/エクスポートされたCSVファイルなどのために、すぐに使用できます。 – odony

3

行あたりの「ID」列の内容にもすることができ外部の行ID?またはidはOpenERPによって設定されていますか?

IDはOpenERPによって設定されていなければ設定されます。存在しない場合は、そこに置かれた外部行IDを使用します。

私はバージョン7.0であり7.0

ir.model.dataでir.model.dataが表示されない - どのようにあなたがそれを探していましたか?

また、サイドバーのエクスポートウィザードもありません。

バージョン7では、エクスポート/インポートを有効にする必要があります。

http://forum.openerp.com/forum/topic35830.html

+0

それは素晴らしいです!私はちょうどCSVでインポートモジュールを使用し、それを自動化するよりも私は2つの異なるデータベースをsyncroすることができます!ありがとうございました! – NaGeL182

+0

私はついにir_model_dataを見つけました。ありがとうございます。 –

関連する問題