3

OpenERP6.1で保存ボタン(添付のスクリーンショットで赤でマークされている)をクリックすると、どの関数が呼び出されますか?

前もって感謝します!!!openerp

4

3 に答える 3

7

DReisptの回答を少し詳しく説明すると、スクリーンショットは、既存のレコードフォームのOne2Manyフィールド内にある編集可能なOne2Many行の保存ボタンを強調しているように見えます。One2Many行は、親レコードのサブレコードとして扱われるため、残りのレコードデータと一緒にアトミックに(1回のRPC呼び出しで)保存されることになっています。

この意味で、スクリーンショットで強調表示されている保存ボタンは、サーバー上のメソッドを直接呼び出すのではなく、ブラウザのローカルキャッシュに変更を保存するだけです。(これが新しいレコードの場合)または(レコードが更新されている場合)への実際の呼び出しは、後で親レコードフォームのメインの[保存]ボタンをクリックしたときにのみ実行されます。createwrite

この時点で、行の値は、One2Manyコマンドのリスト内のcreate/に提供された値のマップに渡されます。One2Manyフィールドの値の設定の詳細についてwriteは、のドキュメントも参照してください。write

ところで、OpenERPではRPC呼び出しの調査は非常に簡単です。

  • サーバー側ではopenerp-server、パラメーターを使用してプロセスを開始し--log-level=debug_rpc_answer、すべてのRPC呼び出しの詳細なログを取得できます。
  • Webクライアント側では、Webブラウザのデバッガを使用してすべてのRPC呼び出しを監視できます([ネットワーク監視]タブで)。ほとんどのJSON-RPC呼び出しは、通常のOpenERP ORMメソッド呼び出しに対応しており、OpenERPRPCAPIに慣れれば簡単に読み取ることができます。

注:上記はOpenERP 6.1に固有のものではなく、7.0でも同じように機能します(ただし、6.0以前のバージョンのWebクライアントではone2manyフィールドの動作が異なります)

于 2013-01-07T17:33:19.870 に答える
1

保存ボタンは、そのモデルのORMメソッドを実行します。新しいレコードの場合はそれがcreate()メソッドであり、更新されたレコードの場合はupdate()メソッドです。

これらの標準メソッドは、追加機能を実装するためにモデルでオーバーライドできます。

于 2013-01-07T15:50:51.823 に答える
0

モデルは、BaseModelsave`レコードorm.Model'. There are methods inクラスのサブクラスです。(BaseModel is inherited by Model) which will be call for theこれらのメソッドは

def create(self, cr, user, vals, context=None)

モデルの動作を変更する場合は、このメソッドをオーバーライドする必要があります。

于 2013-01-08T05:33:35.237 に答える