Saturday, April 13, 2013

OpenERP 7.0 : Attributes _track and track_visibility

_track on the object is used to track events related to a document (an invoice has been paid, an opportunity is won, a task is blocked, ...). Users can follow events, represented by a mail.message.subtype, on any object.

It's different from the track_visibility attribute that you can define on a field which is used to track changes on this field. (e.g. Stage: Proposition --> Negotiation)

Both _track and track_visibility produces messages on the document. Your object need to inherit from mail.thread.

If an object is inherited from 'mail.thread' then _track is used to send notifications. Therefore 'module.subtype_xml' is the related  "Message Subtype". These subtypes have to be declared in XML. Here is an example:

<record id="subtype_xml" model="mail.message.subtype">
    <field name="name">Relevant Fields</field> 
    <field name="res_model">project.issue</field>
    <field name="default" eval="True"/>
    <field name="description">The issue has been closed.</field>

Then whenever the field "field" is updated, all subtypes ("subtype_xml", "subtype_xml2") of this field are processed.

This means that the related method (in this example: lambda ...) is called and if the result is True, then for all users which follow this object and have checked the subtype a notification is created.

In the user preferences every user can choose whether he/she wants to be updated by email in case of new notifications.

You can also set a mail.message.subtype that depends on an other to act through a relation field. Here is an example from crm for Sales Teams using the section_id m2o in crm.lead: 

<record id="mt_lead_won" model="mail.message.subtype">
    <field name="name">Opportunity Won</field>
    <field name="res_model">crm.lead</field>
    <field name="default" eval="False"/>
    <field name="description">Opportunity Won</field>

<record id="mt_salesteam_lead_won" model="mail.message.subtype">
    <field name="name">Opportunity Won</field>
    <field name="res_model"></field>
    <field name="parent_id" eval="ref('mt_lead_won')"/>
    <field name="relation_field">section_id</field>

This allows a user to follow all "Opportunities Won" that are in a specific sales team. The user follow the event "Opportunity Won" on a sales team and he will become automatically follower of all leads/opportunities of this sales team and _track event.

Hope this post will help you to understand the concept of _track and track_visibility.

Priyesh Solanki


  1. Most of the data posted here is not more than a copy-paste of the original data ( or, perhaps, the inverse proposition is true.

    Anyway, it is quite disappointing to see that many widely used opensource projects lack of good documentation (another one: Magento), while there are projects with really good documentation (Django, SQLAlchemy, Pymarmid,... even Yii has a place here).

    Being so the case, there's no excuse for Odoo community to have so crappy, faulty, deprecated, and incomplete documentation. Pleeeease! I'm a n00b @ t.erp/openerp/odoo and thanks to the lack of good docs I'm pretty lost.

  2. This comment has been removed by the author.