6

私の質問は少し複雑で、初めてOpenERPです。

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

  • 外部データベースにアクセスでき、XML RCP を使用して OpenERP にもアクセスできます。

  • XML RCP を使用して簡単に外部データベースからデータをインポートできますが、問題は同期です。


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

  • 私はそれを更新する必要があります。しかし、それから、どれがどれであるかを示す ID が必要です。および外部 ID。

  • 私の知る限り、OpenERP は外部 ID を処理できます。

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

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

4

3 に答える 3

5

簡単な回答: CSV インポートおよびエクスポート ウィザードの動作を確認してください。レコードをエクスポートすると外部識別子が自動的に作成されるため、同じ CSV を再インポートすると、レコードが再作成されるのではなく更新されます。

長い答え:
OpenERP は外部 ID をir.model.dataテーブルに保存します。これは、ユーザー インターフェイスの [設定] メニューからアクセスできます1。この単純なテーブルは、フォーム内の「外部識別子」を、実際のテーブルと行を指すmodule_name.record_identifierペアにマップします。(model,res_id)

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

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

バージョン 6.1 以降、OpenERP は、サイドバーのエクスポートウィザードを使用してエクスポートされたすべての OpenERP レコードに対して、新しい外部識別子を自動的に作成します。それらは、 という名前の CSV 列にエクスポートされます。id

また、インポートウィザードを介してインポートされた CSV ファイルにそのようなid列が存在する場合、OpenERP はそれを記憶するための外部識別子も作成します。また、外部識別子が既に存在する場合、レコードは作成されずに更新されます。

id理論的には、マスター データベースから列2を追加した適切な CSV ファイルを作成し(実際の DB ID を使用することもできます)、それを OpenERP にインポートするだけです。その後、いつでもこの CSV ファイルの更新されたバージョンを再インポートできるようになります。

参考文献:

  • ImportおよびExportウィザードは、基本的に API メソッドexport_dataおよびimport_dataを呼び出すため、必要に応じて XML-RPC を介してこれをスクリプト化できます。
  • ir.model.dataモデルは、外部識別子 (モジュール データ ファイル内の XML レコードのフィールドに対応するため、歴史的に XML ID と呼ばれますid) を格納します。

1 OpenERP 6.1 ではSettings>Configuration>Sequences & Identifiers>External Identifiersの下にあり、OpenERP バージョン 7 ではSettings>Technical>Sequences & Identifiers>External Identifiersにあります。

2は、ドット " " 文字を含まない任意の文字列にすることができますモジュール名前空間.に格納され__export__

于 2013-01-16T11:43:37.653 に答える
3

行ごとの「id」列のコンテンツは、外部の行 ID にすることもできますか? またはそのIDはOpenERPによって設定されていますか?

ID が存在しない場合は OpenERP によって設定されます。それ以外の場合は、そこに入力した外部行 ID が使用されます。

7.0 に ir.model.data が表示されない

ir.model.data はバージョン 7.0 にあります。どのように検索しましたか?

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

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

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

于 2013-01-17T17:31:18.197 に答える
0

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

于 2013-01-16T11:02:49.763 に答える