Odoo XML Is More Than Just Views

Odoo XML
December 29, 2025 by
Odoo XML Is More Than Just Views
Fazri Muhammad Yazid
| No comments yet

XML is a core configuration structure in Odoo. It defines UI architecture, system behavior, permissions, automation, and initial data. It provides declarative, modular control over major system functions.


XML Usement with Examples:

1. View Definitions

Purpose: layout, field behavior, user interaction

Example: Form view for a model

<record id="view_employee_form" model="ir.ui.view">
    <field name="name">employee.form</field>
    <field name="model">hr.employee</field>
    <field name="arch" type="xml">
        <form>
            <sheet>
                <group>
                    <field name="name"/>
                    <field name="job_title"/>
                </group>
            </sheet>
        </form>
    </field>
</record>


2. Menu and Action Binding

Purpose: navigation and interface structure

Example: Action linked to form view via menu

<record id="action_employee" model="ir.actions.act_window">
    <field name="name">Employees</field>
    <field name="res_model">hr.employee</field>
    <field name="view_mode">tree,form</field>
</record>

<menuitem id="menu_hr_employee"
          name="Employees"
          parent="hr.menu_hr_root"
          action="action_employee"/>


3. Access Control and Record Security

Purpose: role-based permissions, data filtering

Example: Record rule

<record id="rule_employee_own" model="ir.rule">
    <field name="name">Employee Own Records</field>
    <field name="model_id" ref="hr.model_hr_employee"/>
    <field name="domain_force">[('user_id', '=', user.id)]</field>
</record>


4. Data Initialization and Configuration

Purpose: preload essential master data

Example: Loading a sequence

<record id="seq_employee_code" model="ir.sequence">
    <field name="name">Employee Code</field>
    <field name="code">hr.employee.code</field>
    <field name="padding">5</field>
    <field name="prefix">EMP</field>
</record>


5. QWeb Templates

Purpose: UI rendering for reports, emails, website
Example: Simple report template

<t t-name="report.employee_card">
    <div>
        <h3><t t-esc="doc.name"/></h3>
        <p><t t-esc="doc.job_title"/></p>
    </div>
</t>


6. Server Actions and Automation

Purpose: execute internal operations automatically

Example: Scheduled action (cron job)

<record id="ir_cron_employee_check" model="ir.cron">
    <field name="name">Check Employee Status</field>
    <field name="model_id" ref="hr.model_hr_employee"/>
    <field name="state">code</field>
    <field name="code">model.check_employee_status()</field>
    <field name="interval_number">1</field>
    <field name="interval_type">days</field>
</record>


7. Inject Default Data

Purpose: Injecting default data for your master data

Example: Injecting custom data to custom model

<record id="default_custom_data" model="custom.model">
    <field name="name">Default Name</field>
    <field name="description">Initial data loaded at module install</field>
    <field name="active">True</field>
</record>
Odoo XML Is More Than Just Views
Fazri Muhammad Yazid December 29, 2025
Share this post
Archive
Sign in to leave a comment