操作?

操作定義了系統對用戶操作的響應行為:登錄、操作按鈕、選擇發票等。

操作可以存儲在數據庫中,也可以直接作為字典返回,例如在按鈕方法中。所有操作都共享兩個必需屬性:

type

當前操作的類別,決定了可以使用哪些字段以及如何解釋該操作。

name

操作的簡短用戶可讀描述,可能會在客戶端界面中顯示

客戶端可以以4種形式獲取操作:

  • False

    如果當前有任何操作對話框打開,請關閉它

  • 一個字符串

    如果匹配到 客戶端操作 ,則解釋為客戶端操作的標簽,否則視為數字

  • 一個數字

    從數據庫中讀取相應的操作記錄,可以是數據庫標識符或者是一個 外部ID

  • 一個字典

    將其視為客戶端操作描述符并執行

綁定?

除了兩個必填屬性外,所有操作還共享用于在任意模型的上下文菜單中呈現操作的 可選 屬性:

binding_model_id

指定操作綁定到哪個模型

注解

對于服務器操作,請使用 model_id 。

binding_type

指定綁定類型,大多數情況下是指定操作將出現在哪個上下文菜單中

action (默認)

指定該操作將出現在綁定模型的 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

此操作的下一次計劃執行日期(日期/時間格式)