操作?
操作定義了系統對用戶操作的響應行為:登錄、操作按鈕、選擇發票等。
操作可以存儲在數據庫中,也可以直接作為字典返回,例如在按鈕方法中。所有操作都共享兩個必需屬性:
type
當前操作的類別,決定了可以使用哪些字段以及如何解釋該操作。
name
操作的簡短用戶可讀描述,可能會在客戶端界面中顯示
客戶端可以以4種形式獲取操作:
綁定?
除了兩個必填屬性外,所有操作還共享用于在任意模型的上下文菜單中呈現操作的 可選 屬性:
binding_model_id
指定操作綁定到哪個模型
注解
對于服務器操作,請使用
model_id
。binding_type
指定綁定類型,大多數情況下是指定操作將出現在哪個上下文菜單中
action
(默認)指定該操作將出現在綁定模型的
上下文菜單中。report
指定該操作將出現在綁定模型的
上下文菜單中。
binding_view_types
一個由逗號分隔的視圖類型列表,用于指定操作在上下文菜單中出現的視圖類型,主要包括“list”和/或“form”。默認為“list,form”(即列表和表單)。
窗口操作 ( ir.actions.act_window
)?
最常見的操作類型,用于通過 視圖 展示模型的可視化:窗口操作定義了模型(可能是模型的特定記錄)的一組視圖類型(和可能的特定視圖)。
它的字段為:
res_model
用于展示視圖的模型
views
一個
(view_id, view_type)
對的列表。每個對的第二個元素是視圖的類別(樹形視圖、表單視圖、圖形視圖等),第一個元素是可選的數據庫ID(或False
)。如果沒有提供ID,則客戶端應該獲取請求模型的指定類型的默認視圖(這是由fields_view_get()
自動完成的)。列表中的第一個類型是默認視圖類型,在執行操作時默認打開。每種視圖類型最多只能出現一次。res_id
(可選)如果默認視圖是“form”,則指定要加載的記錄(否則應創建新記錄)
search_view_id
(可選)(id, name)
對,id
是要加載的特定搜索視圖的數據庫標識符。默認情況下,獲取模型的默認搜索視圖target
(可選)視圖應該在主內容區域(
current
),全屏模式(fullscreen
)或對話框/彈出窗口(new
)中打開。使用main
代替current
以清除面包屑。默認為current
。context
(可選)傳遞給視圖的附加上下文數據
domain
(可選)篩選域,隱式添加到所有視圖搜索查詢中
limit
(可選)默認情況下在列表中顯示的記錄數。在Web客戶端中默認為80。
例如,要打開帶有列表和表單視圖的客戶(設置了 customer
標志的合作伙伴):
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
或者在新對話框中打開特定產品(單獨獲?。┑谋韱我晥D:
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new",
}
數據庫內窗口操作有一些不同的字段應該被客戶端忽略,主要用于組合“視圖”列表:
view_mode
(default=tree,form
)將視圖類型作為字符串以逗號分隔的列表 (/!\ 不要有空格 /!\)。所有這些類型都將出現在生成的“views”列表中(至少有一個“False”視圖ID)。
view_ids
M2M1 查看對象,定義“視圖”初始內容
注解
Act_window視圖也可以通過
ir.actions.act_window.view
干凈地定義。如果您計劃為您的模型允許多個視圖,請優先使用ir.actions.act_window.view而不是action
view_ids
<record model="ir.actions.act_window.view" id="test_action_tree"> <field name="sequence" eval="1"/> <field name="view_mode">tree</field> <field name="view_id" ref="view_test_tree"/> <field name="act_window_id" ref="test_action"/> </record>
view_id
如果特定視圖的類型屬于
view_mode
列表并且尚未被view_ids
中的任何視圖填充,則將其添加到views
列表中
這些通常在從 數據文件 定義操作時使用:
<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
中獲取每個(id, type)
(按sequence
排序)如果定義了
view_id
并且其類型尚未填充,則附加其(id,type)
對于
view_mode
中每個未填充的類型,追加(False, type)
- 1
技術上不是M2M:添加一個序列字段,可以由僅視圖類型組成,而無需視圖ID。
URL操作( ir.actions.act_url
)?
允許通過Odoo操作打開URL(網站/網頁)??梢酝ㄟ^兩個字段進行自定義:
url
激活操作時要打開的地址
target
如果是
new
,在新窗口/頁面中打開地址;如果是self
,則用該頁面替換當前內容。默認為new
。
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
將用Odoo主頁替換當前內容部分。
服務器操作( ir.actions.server
)?
- class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[源代碼]?
服務器動作模型。服務器動作基于基礎模型,提供各種類型的動作,可以自動執行,例如使用基礎動作規則,或手動添加到“更多”上下文菜單中。
自Odoo 8.0版本起,在操作表單視圖中提供了一個“創建菜單動作”按鈕。它會在基本模型的“更多”菜單中創建一個條目。這樣可以輕松地通過界面創建服務器動作并以批量模式運行它們。
可用的操作有:
‘執行 Python 代碼’:將執行一段 Python 代碼塊
‘創建新記錄’:創建一個帶有新值的新記錄
‘寫入記錄’: 更新記錄的值
‘執行多個操作’: 定義一個觸發多個其他服務器操作的操作
允許從任何有效的操作位置觸發復雜的服務器代碼。對客戶端而言,只有兩個字段是相關的:
id
要運行的服務器操作的數據庫內標識符
context
(可選)運行服務器操作時使用的上下文數據
數據庫中的記錄更加豐富,可以根據其“狀態”執行許多特定或通用操作。某些字段(及相應的行為)在狀態之間共享:
model_id
與該操作相關聯的Odoo模型。
state
code
: 執行通過code
參數給出的Python代碼。object_create
: 根據fields_lines
的規范創建模型crud_model_id
的新記錄。object_write
: 根據fields_lines
的規范更新當前記錄multi
: 通過child_ids
參數執行多個操作。
狀態字段?
根據其狀態,行為是通過不同的字段定義的。每個字段后面都給出了相關狀態。
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
(創建)(必填)創建新記錄的模型
link_field_id
(創建)many2one 到
ir.model.fields
,指定新創建的記錄應該設置在哪個當前記錄的 m2o 字段上(模型應該匹配)fields_lines
(創建/寫入)在創建或復制記錄時要覆蓋的字段。包括字段為
One2many
的:col1
ir.model.fields
在相關模型中設置(創建使用crud_model_id
,更新使用model_id
)value
字段的值,通過
type
進行解釋type
(值|引用|方程式)如果是
value
,則value
字段被解釋為字面值(可能被轉換),如果是equation
,則value
字段被解釋為Python表達式并進行求值
child_ids
(multi)指定在狀態 multi 中執行的多個子操作(
ir.actions.server
)。如果子操作本身返回操作,則最后一個操作將作為 multi 自己的下一個操作返回給客戶端。
評估上下文?
在服務器操作的評估上下文或周圍環境中,有許多鍵可用:
model
通過model_id
與操作相關聯的模型對象record
/records
觸發操作的記錄/記錄集可以為空。env
Odoo 環境datetime
,dateutil
,time
,timezone
對應的 Python 模塊log: log(message, level='info')
記錄調試信息到ir.logging表的日志函數Warning
異常的Warning
構造函數
報告操作 ( ir.actions.report
)?
觸發報告打印。
如果您通過 <record>
而不是 <report>
標簽定義報表,并且希望該操作出現在模型視圖的打印菜單中,則還需要從 綁定 指定 binding_model_id
。不需要將 binding_type
設置為 report
,因為 ir.actions.report
將隱式默認為該值。
name
(必填)如果未指定
print_report_name
,則用作文件名。否則,僅在查找報告時作為助記符/描述在某種列表中有用。model
(必填)報告所涉及的模型
report_type
(默認值=qweb-pdf)要么選擇
qweb-pdf
生成 PDF 報告,要么選擇qweb-html
生成 HTML 報告report_name
(必填)用于渲染報表的 qweb 模板的名稱( 外部 ID )
print_report_name
Python表達式,定義報表的名稱。
groups_id
將當前報表視圖/使用權限授權給允許的用戶組的
Many2many
字段multi
如果設置為
True
,該操作將不會在表單視圖中顯示。paperformat_id
將
Many2one
字段設置為您希望用于此報告的紙張格式(如果未指定,則使用公司格式)attachment_use
如果設置為
True
,則報告僅在第一次請求時生成,之后從存儲的報告中重新打印,而不是每次重新生成。可用于只需生成一次的報告(例如出于法律原因)
attachment
定義報表名稱的 Python 表達式;記錄可以作為變量
object
訪問。
客戶端操作 ( ir.actions.client
)?
在客戶端中完全實現的操作觸發器。
tag
操作的客戶端標識符,一個任意字符串,客戶端應該知道如何做出反應
params
(可選)一個Python字典,用于在客戶端操作標簽旁邊向客戶端發送附加數據
target
(可選)客戶端操作應該在主內容區域(
current
),全屏模式(fullscreen
)或對話框/彈出窗口(new
)中打開。使用main
代替current
以清除面包屑。默認為current
。
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
告訴客戶端啟動銷售點界面,服務器不知道銷售點界面的工作方式。
另請參閱
自動化操作( ir.cron
)?
在預定義頻率上自動觸發的操作。
name
自動化操作的名稱(主要用于日志顯示)
interval_number
在兩次執行操作之間的 interval_type uom數量
interval_type
頻率間隔的計量單位(
minutes
,hours
,days
,weeks
,months
)numbercall
此操作需要運行的次數。如果預計此操作將無限運行,請將其設置為
-1
。doall
布爾值,指定在服務器重新啟動時是否需要執行未執行的操作。
model_id
將調用此操作的模型
code
操作的代碼內容??梢允菍δP头椒ǖ暮唵握{用:
model.<method_name>()
nextcall
此操作的下一次計劃執行日期(日期/時間格式)