アクション

アクションは、ユーザーアクション(ログイン、アクションボタン、請求書の選択)に応じてシステムの動作を定義します。

アクションはデータベースに保存するか、ボタンメソッドなどの辞書として直接返すことができます。すべてのアクションは2つの必須属性を共有します:

type

現在のアクションのカテゴリで、どのフィールドを使用するかと、アクションの解釈方法を決定します。

name

アクションの短いユーザー読み取り可能な説明はクライアントのインターフェイスに表示されることがあります

クライアントは4つの形式でアクションを取得できます:

  • False

    アクションダイアログが開いている場合は閉じます

  • 文字列

    client action が一致する場合、クライアントアクションのタグとして解釈します。そうでない場合は数値として扱います。

  • A number

    データベースから対応するアクションレコードを読み込みます。データベース識別子または 外部 ID かもしれません。

  • 辞書

    クライアントアクション記述子として扱い、実行する

バインド

2つの必須属性以外に、すべてのアクションは、任意のモデルのコンテキストメニューでアクションを表示するために使用される*オプション*属性も共有します。

binding_model_id

は、アクションがバインドされるモデルを指定します。

注釈

サーバーアクションには model_id を使用します。

binding_type

は、バインディングの種類を指定します。これは主にアクションが表示されるコンテキストメニューです。

action (デフォルト)

バインドされたモデルの Action コンテキストメニューにアクションが表示されるように指定します。

report

バインドされたモデルの Print コンテキストメニューにアクションが表示されるように指定します。

binding_view_types

アクションがコンテキストメニューに表示されるビュータイプのカンマ区切りのリスト。主に "list" と "form" です。 デフォルトは list,form (リストとフォームの両方)

ウィンドウアクション (ir.actions.actions_window)

最も一般的なアクションタイプです。 views: ウィンドウアクションは、モデル(およびモデルの特定のレコード)に対するビュータイプ(および特定のビュー)のセットを定義します。

そのフィールドは次のとおりです:

res_model

ビューを表示するモデル

views

(view_id, view_type) ペアのリスト。各ペアの2番目の要素はビューのカテゴリ(リスト、フォーム、グラフ)です。 ) そして、最初はオプションのデータベース ID (または False )です。 IDが指定されていない場合 クライアントは、リクエストされたモデルの指定された型のデフォルトのビューを取得する必要があります(これは、 fields_view_get()). リストの最初のタイプはデフォルトのビュータイプであり、アクションが実行されたときにデフォルトで開かれます。 各ビュータイプは、リスト内に最大で一度だけ存在する必要があります

res_id (任意)

デフォルトビューが form の場合、ロードするレコードを指定します (そうでなければ、新しいレコードを作成する必要があります)

search_view_id (任意)

(id, name) ペア、 id は、アクションをロードする特定の検索ビューのデータベース識別子です。 デフォルトでは、モデルのデフォルトの検索ビューをフェッチします

target (任意)

ビューをメインコンテンツエリア (current) で開くか、フルスクリーンモード (fullscreen) で開くか、ダイアログやポップアップ (new) で開くか。 パンくずリストを消去するには、current の代わりに main を使用します。デフォルトは current です。

context (任意)

ビューに渡す追加のコンテキスト データ

domain (任意)

すべてのビュー検索クエリに暗黙的に追加するためにドメインをフィルタリングする

limit (任意)

デフォルトでリストに表示するレコードの数。ウェブクライアントのデフォルトは 80 です。

例えば、顧客(customer フラグセットのパートナー)をリストとフォームビューで開くには以下のようにします。

{
    "type": "ir.actions.act_window",
    "res_model": "res.partner",
    "views": [[False, "list"], [False, "form"]],
    "domain": [["customer", "=", true]],
}

または、新しいダイアログで特定の製品(別途取得)のフォームビューを開きます。

{
    "type": "ir.actions.act_window",
    "res_model": "product.product",
    "views": [[False, "form"]],
    "res_id": a_product_id,
    "target": "new",
}

データベース内のウィンドウアクションには、クライアントから無視されるべき項目がいくつかあります。主に``views`` リストの構成に使用します。

view_mode (default= list,form )

ビュータイプを文字列としてカンマで区切ったリスト (/!\ スペースなし /!\)。 これらの型はすべて生成された views リストに存在します (少なくとも False view_id)

view_ids

M2M1 がオブジェクトを表示し、views の初期コンテンツを定義します。

注釈

Act_window ビューは ir.actions.actions.action_window.view を使用してきれいに定義することもできます。

モデルに複数のビューを許可する場合は、アクション view_ids の代わりに ir.actions.actions_window.view を使用することをお勧めします

<record model="ir.actions.act_window.view" id="test_action_tree">
   <field name="sequence" eval="1"/>
   <field name="view_mode">list</field>
   <field name="view_id" ref="view_test_tree"/>
   <field name="act_window_id" ref="test_action"/>
</record>
view_id

views リストに追加された特定のビューは、そのタイプが view_mode リストの一部であり、view_ids のビューのいずれかでまだ入力されていません

これらは主に、 データファイル からアクションを定義するときに使用されます。

<record model="ir.actions.act_window" id="test_action">
    <field name="name">A Test Action</field>
    <field name="res_model">some.model</field>
    <field name="view_mode">graph</field>
    <field name="view_id" ref="my_specific_view"/>
</record>

モデルのデフォルトビューでない場合でも、"my_specific_view" ビューが使用されます。

views シーケンスのサーバー側の構成は以下のとおりです。

  • view_ids (sequence 順) から (id, type) をそれぞれ取得します

  • view_id が定義されていて、その型が既に満たされていない場合、 (id, type) を追加します。

  • view_mode の未入力の型毎に (False, type) の追加

1

技術的にはM2Mではありません:シーケンスフィールドを追加し、ビューIDなしでビュータイプだけで構成される可能性があります。

URL アクション (ir.actions.actions.action_url)

Odoo アクションで URL (ウェブサイト/ウェブページ) を開くことができます。2 つのフィールドでカスタマイズできます:

url

アクションを起動したときに開くアドレス

target (default= new)

利用可能な値は :

  • new: URL を新しいウィンドウ/ページで開きます。

  • self: 現在のウィンドウ/ページで URL を開きます (実際の内容を置き換えます)

  • download: ダウンロード URL にリダイレクト

例:

{
    "type": "ir.actions.act_url",
    "url": "https://odoo.com",
    "target": "self",
}

これにより、現在のコンテンツセクションが Odoo のホームページに置き換えられます。

サーバーアクション (ir.actions.server)

任意の有効なアクション場所から複雑なサーバー コードのトリガーを許可します。クライアントに関連する項目は 2 つだけです。

id

実行するサーバーアクションのデータベース内識別子

context (任意)

サーバーアクションの実行時に使用するコンテキストデータ

データベース内のレコードは state に基づいて多くの特定または一般的なアクションを行うことができます。 いくつかのフィールド(および対応する動作)は状態間で共有されます。

model_id

アクションにリンクされたOdooモデル。

state

  • code: code 引数から与えられた python コードを実行します。

  • object_create: fields_lines 仕様に従ってモデルの crud_model_id の新しいレコードを作成します。

  • object_write: fields_lines 仕様に従って現在のレコードを更新します

  • multi: child_ids 引数で指定されたいくつかのアクションを実行します。

都道府県フィールド

その状態に応じて、動作は異なるフィールドで定義されます。それぞれのフィールドの後に、関係する状態が与えられます。

code (code)

アクションが呼び出されたときに実行するPythonコードを指定します

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        raise Warning(record.name)
    </field>
</record>

注釈

コードセグメントは action と呼ばれる変数を定義することができ、次に実行するアクションとしてクライアントに返されます。

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        if record.some_condition():
            action = {
                "type": "ir.actions.act_window",
                "view_mode": "form",
                "res_model": record._name,
                "res_id": record.id,
            }
    </field>
</record>

条件を満たした場合、クライアントにレコードのフォームを開くように要求します

crud_model_id (create)(required)

新しいレコードを作るために

link_field_id (create)

many2one to ir.model.fields は、新しく作成されたレコードを設定するための現在のレコードの m2o フィールドを指定します (モデルは一致する必要があります)

fields_lines (create/write)

フィールドは、レコードを作成またはコピーするときにオーバーライドします。フィールドの One2many

col1

関係するモデルに設定する ir.model.fields (作成するには crud_model_id 、更新するには model_id )

value

type で解釈されるフィールドの値

type (value|reference|equation)

value の場合、value フィールドはリテラル値として解釈されます (おそらく変換されます)。 equation の場合、value フィールドは Python 式として解釈され評価されます。

child_ids (multi)

複数のサブアクション(ir.actions.server)を指定します。 サブアクション自身がアクションを返す場合、最後のアクションはマルチ自身の次のアクションとしてクライアントに返されます。

評価コンテキスト

多くの鍵は、サーバーアクションまたはその周辺の評価コンテキストで使用できます。

  • model モデルオブジェクトは model_id を介してアクションにリンクされています

  • アクションがトリガーされた record/records レコード/recorset は無効にできます。

  • env Odoo Environment

  • datetime, dateutil, time, timezone 対応するPythonモジュール

  • log: log(message, level='info') logging function to record debug information in ir.logging table

  • Warning 例外 Warning のコンストラクター。

レポートアクション (ir.actions.report)

レポートの印刷をトリガーします。

If you define your report through a <record> instead of a <report> tag and want the action to show up in the Print menu of the model's views, you will also need to specify binding_model_id from バインド. It's not necessary to set binding_type to report, since ir.actions.report will implicitly default to that.

name (必須)

print_report_name が指定されていない場合、ファイル名として使用されます。 それ以外の場合は、何らかの並べ替えのリストで検索するときにレポートのニーモニック/説明としてのみ役に立ちます

model (必須)

報告書のモデルは

report_type (default=qweb-pdf)

PDF レポートの qweb-pdf または HTML の qweb-html のいずれか

report_name (必須)

レポートのレンダリングに使用されるqwebテンプレートの名前 (external id)

print_report_name

レポートの名前を定義する python 式。

groups_id

Many2many フィールドから現在のレポートの表示/使用を許可されているグループ

multi

True に設定すると、フォームビューにアクションは表示されません。

paperformat_id

Many2one このレポートに使用したい用紙フォーマットのフィールド(指定されていない場合、会社フォーマットが使用されます)

attachment_use

True の場合、レポートは最初にリクエストされたときにのみ生成されます。 毎回再生成されるのではなく、保存されたレポートから再印刷されます。

一度だけ生成する必要があるレポート(例えば法的な理由)に使用できます。

attachment

レポートの名前を定義する python 式。レコードは object 変数としてアクセスできます。

Client Actions (ir.actions.client)

クライアントに完全に実装されたアクションをトリガーします。

tag

アクションのクライアント側の識別子、クライアントがどのように反応するか知っておくべき任意の文字列

params (任意)

クライアントに送信する追加データのPython辞書

target (任意)

クライアントアクションをメインコンテンツエリア (current) で開くか、フルスクリーンモード (fullscreen) で開くか、ダイアログやポップアップ (new) で開くか。 パンくずリストを消去するには、current の代わりに main を使用します。デフォルトは current です。

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

POSインターフェイスがどのように機能するのかは、サーバーに知らせます。

スケジュールされたアクション (ir.cron)

定義済みの頻度で自動的にトリガーされたアクション

name

スケジュールされたアクションの名前 (ログ表示で使用されます)

interval_number

アクションの 2 つの実行間の interval_type uom の数

interval_type

周波数間隔の単位 (minutes ``, ``hours, days, weeks, months)

model_id

このアクションが呼び出されるモデル

コード

アクションのコードコンテンツ。モデルのメソッドを呼び出す単純なことができます:

model.<method_name>()
nextcall

このアクションの次の計画された実行日時(日付/時刻形式)

priority

同時に複数のアクションを実行するときのアクションの優先度

高度な使用法: バッチ処理

スケジュールされたアクションを実行するとき 長期間労働者を捕まえることを避け、タイムアウト例外に遭遇する可能性があるために、バッチ処理を試みることをお勧めします。

Odoo は、スケジュールされたアクションバッチ処理のためのシンプルな API を提供します。

self.env['ir.cron']._notify_progress(done=XX:int, remaining=XX:int)

この方法により、スケジューラは進捗状況が確認され、まだ作業が残っているかどうかを知ることができます。

デフォルトでは、API が使用されている場合、スケジューラは一度に10回のバッチを処理しようとします。 それらの10バッチの後に残っているタスクがある場合は、できるだけ早く新しいcronコールが実行されます。

高度な使用法: トリガー

より複雑なユースケースの場合、ビジネスコードから直接スケジュールされたアクションをトリガーするより高度な方法を提供します。

action_record._trigger(at=XX:date)

セキュリティ

スケジュールされたアクションの間でリソースを公平に使用することを避けるために、いくつかのセキュリティ対策は、スケジュールされたアクションを正しく機能させます。

  • スケジュールされたアクションがエラーまたはタイムアウトに3回連続して発生した場合、現在の実行はスキップされ、失敗とみなされます。

  • スケジュールされたアクションが少なくとも7日間に5回連続して実行に失敗した場合。 無効化され、DB管理者に通知します。