Server Actions in Odoo serve as a dynamic mechanism for automating processes without the need for extensive custom development. These actions enable users to define a sequence of operations or tasks that the system executes automatically under specific conditions. From creating records and updating fields to triggering complex business logic, Server Actions empower users to automate routine activities and respond intelligently to various scenarios within the ERP environment.
To view all the server actions available in the Odoo system, enable debug mode, then go to Settings -> Technical -> Server Actions.
This is the list of existing server actions in Odoo 17.
A server action can perform the following types of actions.
1. Execute a python code
2. Create new record
3. Update new record
4. Sent an email
5. Sent SMS message
6. Add followers
7. Create next activity
8. Execute multiple actions
Create a new server action
In this blog create a server action for copying data from the 'phone' field to the 'mobile' field in the 'res.partners' model.
The server action should be defined in the “ir_action_data.xml” file inside the “data” directory of your module.
<record id="copy_phone_to_mobile" model="ir.actions.server">
<field name="name">Copy phone to mobile</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="binding_model_id" ref="base.model_res_partner"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
action = records.action_copy_phone_to_mobile()
</field>
</record>
In this code
- name: specifies the name of the server action, which shows on the server actions menu.
- model_id: is the model linked to the server action, it should be in this form <module>.model_<model_name>
- binding_model_id: It specifies that the action is bound to the referencing model.
- binding_view_types: specifies the action is intended to be available in which views of the associated model.
- state: It specifies the type of server action we discussed above, in our case, we choose it as “code” for executing a Python script.
- code: specify the Python script to be executed.
After adding the XML code, you should include the function “action_copy_phone_to_mobile()” in the res.partner model, as mentioned in the server action.
def action_copy_phone_to_mobile(self):
for record in self:
if record.phone and not record.mobile:
record.write({'mobile': record.phone})
Now, we can use this server action on the contacts list view.
Select some contacts that do not have mobile fields and have phone fields, then under the “Actions” menu, there will be a newly created server action “Copy phone to mobile” button.
The result would be.
The newly created server action is also visible in Server actions in the Technical menu from settings.
In summary, Odoo Server Actions empower users to automate diverse processes, enhancing efficiency and reducing manual intervention, thereby optimizing operations within the ERP environment.