サーバー アクションは、Open ERP の最も強力な機能の 1 つです (ただし、あまり文書化されていません)。ここでは、オープン ERP のサーバー アクションについて、できる限り説明したいと思います。
サーバー アクションは、ワークフローの特定の段階に達したときに、サーバー側で実行される 1 つ以上のアクションをトリガーするために使用されます。
例えば。
- 販売注文が承認されると、顧客の履歴に追加されます。
- 売上請求書が確認されたら、顧客に郵送します。
- CRM ケースがクローズされると、クライアント側にウィンドウがポップアップして、やり取りやフィードバックなどの概要が表示されます。
サーバー アクションを作成するには、[管理]>>[カスタマイズ]>>[アクション]>>[サーバー アクション] に移動します。
作成の手順:
ステップ 1: サーバー アクションの定義
アクション名: 名前のとおりわかりやすい
オブジェクト: サーバー アクションがトリガーされるオブジェクト/モデル。例えば。売り注文
アクションの種類: 各ケースが処理されるため、これについては後で詳しく説明します。シーケンス: アクション タイプがマルチ アクションの場合に使用され、一連のアクションがシーケンスの順序で発生します。
条件: 1 行の Python 条件。例えば。5000 を超えるバウチャーが発生するたびに SMS アラートを送信する場合。object.amount>5000
. 条件がない場合は、True を指定して実行する必要があります。
アクションタイプ固有のタブ: ここでは、各アクションタイプについて詳しく説明します
ダミー: ダミー ステージは何もしません。(なぜそこにあるのかは神のみぞ知る..)
クライアント アクション: 開くフォーム、実行するウィザード、または起動するレポートを選択できます。リストからレポートを選択します。
object.move_lines
繰り返し: Python ループ式に基づいて、サーバー アクションを繰り返すことができます。履歴作成の仕事をするように言われました。
Python コード: 複数行の Python コードを実行できます。戻り値は変数の値ですaction = {}
。これは、コンテキストに固有の特定のウィンドウ (フォーム) をポップしたい場合にのみ意味があります。私見では、戻り値は必要ありません。注: コードは、python の exec 関数を使用して実行されます。この関数は、変数object
, time
, cr
,を使用してディクショナリ名前空間で実行されますuid
。ids
トリガー: これを使用して、ワークフローの遷移をトリガーできます。設定する必要があるオプションは次のとおりです。ワークフロー モデル: ワークフローをトリガーするターゲット オブジェクト。「トリガーオン」フィールドには、ターゲット モデル レコードの ID が必要です。たとえば、請求書の変更をトリガーする場合は、請求書の ID を取得します。「トリガー名」は、遷移を開始するために使用する必要がある信号です。ドロップダウンには、考えられるすべてのトリガーが一覧表示されます。注:トリガー名リストには、モデルからのすべての可能な遷移も表示されるため、正しいトリガーを選択してください。モデルは括弧内に示されています。
メール: メールアドレス、件名、メッセージを設定します。これには、Open ERP building smtpserver を構成する必要があります。Open ERP の一般的な電子メール アーキテクチャである Power email は、より多くの機能と自動化された電子メールを提供するため、電子メール送信に使用できます (サーバー アクションをいじる必要はありません)。http://launchpad.net/poweremailで入手でき、http: //launchpad.net/poweremail/+downloadでダウンロードできます。
SMS: 携帯電話番号を選択してください。例:[[ object.shipping_address.mobile ]]
および件名。
オブジェクトの作成: これは、サーバー アクションがトリガーされたときに、任意のモデルで新しいレコードを作成するために使用されます。説明した履歴機能は、これを使用して実装できます。フィールド マッピングは、レコード内のフィールドに値を与えるために使用されます
この例を見てみましょう
<record id="ir_actions_server_timsheet_sheet" model="ir.actions.server">
<field name="sequence" eval="5"/>
<field name="state">code</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_hr_timesheet_current_open"/>
<field name="code">action = pool.get('hr.timesheet.current.open').open_timesheet(cr, uid, None, context)</field>
<field name="condition">True</field>
<field name="name">My Timesheet</field>
</record>
これは、このmodel_hr_timesheet_current_open
アクションが実行されたオブジェクトの参照です。あなたの場合、<field name="model_id" eval="Selling"/>
model_id は販売されていませんが、これが実行されたオブジェクトの参照です。