---
# System prepended metadata

title: 隨手筆記 - ODOO act_window 的進階用法
tags: [隨手筆記, ' ODOO']

---

---
tags: 隨手筆記, ODOO
---

# 隨手筆記 - ODOO act_window 的進階用法

## 撰文動機
在 Odoo 中，只要在 act_window 中宣告要使用的 view_type，Odoo 就會把相對應描述的操作介面產生出來，但是這邊有一個問題，act_window 可以設定 UI 但是就算在 view_type 設定多個 view_type，最後還是只能設定一個 view_id(只能指定一個 UI，其他會自動產生)，所以這邊要做的是設定完 act_window 之後，把多個 UI 指定給同一個 act_window。

## 方法說明
在只有一個 UI 的時候，我們會在 act_window 裡的 view_id 指定我們要用的UI，但是如果有多個 UI 的時候，我們只要把需要用到的 view 都在 act_window 裡的 view_type 指定好，剩下的就是 act_window.view 的事了。

## 用法示例:
### view
```xml
<record id="jobapp_form" model="ir.ui.view">
    <field name="name">jobapplication.form</field>
    <field name="model">hr.job</field>
    <field name="arch" type="xml">
        <form string="PassportForm" version="9.0">
            <group col="2">
                 <field name="job_code" />
                 <field name="key_skill" />
            </group>
        </form>
    </field>
</record>

<record id="jobapp_tree" model="ir.ui.view">
     <field name="name">jobapplication.form.tree</field>
     <field name="model">hr.job</field>
     <field name="arch" type="xml">
         <tree string="PassportForm">
             <field name="job_code" />
         </tree>
     </field>
 </record>
```

### act_window & act_window.view
```xml
<record model="ir.actions.act_window" id="action_job_app">
    <field name="name">JobApplication Application</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">hr.job</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
</record>

<record model="ir.actions.act_window.view" id="action_jobapp_tree">
    <field name="sequence" eval="1"/>
    <field name="view_mode">tree</field>
    <field name="view_id" ref="jobapp_tree"/>
    <field name="act_window_id" ref="action_job_app"/>
</record>

<record model="ir.actions.act_window.view" id="action_jobapp_form">
    <field name="sequence" eval="2"/>
    <field name="view_mode">form</field>
    <field name="view_id" ref="jobapp_form"/>
    <field name="act_window_id" ref="action_job_app"/>
</record>
```

## 程式碼解說
前面的 view 設定應該都沒有問題，重點在後面的 act_window 和 act_window.view。

act_window 用來設定這個 action 會有的 view_type，還有預設要使用的 view，因為要指定多個UI，故不指定 view_id。

下面兩個 act_window.view 用來設定分別的兩個 view_type 要使用哪個 UI。

## 結語

