アクション¶
アクションは、ユーザーアクション(ログイン、アクションボタン、請求書の選択)に応じてシステムの動作を定義します。
アクションはデータベースに保存するか、ボタンメソッドなどの辞書として直接返すことができます。すべてのアクションは2つの必須属性を共有します:
type
現在のアクションのカテゴリで、どのフィールドを使用するかと、アクションの解釈方法を決定します。
name
アクションの短いユーザー読み取り可能な説明はクライアントのインターフェイスに表示されることがあります
クライアントは4つの形式でアクションを取得できます:
False
アクションダイアログが開いている場合は閉じます
- 文字列
client action が一致する場合、クライアントアクションのタグとして解釈します。そうでない場合は数値として扱います。
- A number
データベースから対応するアクションレコードを読み込みます。データベース識別子または 外部 ID かもしれません。
- 辞書
クライアントアクション記述子として扱い、実行する
バインド¶
2つの必須属性以外に、すべてのアクションは、任意のモデルのコンテキストメニューでアクションを表示するために使用される*オプション*属性も共有します。
binding_model_id
は、アクションがバインドされるモデルを指定します。
注釈
サーバーアクションには
model_id
を使用します。binding_type
は、バインディングの種類を指定します。これは主にアクションが表示されるコンテキストメニューです。
action
(デフォルト)バインドされたモデルの
コンテキストメニューにアクションが表示されるように指定します。report
バインドされたモデルの
コンテキストメニューにアクションが表示されるように指定します。
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 Environmentdatetime
,dateutil
,time
,timezone
対応するPythonモジュールlog: log(message, level='info')
logging function to record debug information in ir.logging tableWarning
例外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管理者に通知します。