odoo/addons/mail/doc/mail_openchatter_howto.rst

113 lines
3.8 KiB
ReStructuredText

How to use OpenChatter in my addon
===================================
Running example
++++++++++++++++
A small my_task model will be used as example to explain how to use the
OpenChatter feature. Being simple, it has only the following fields:
- a name
- a task responsible
- a related project
::
class my_task(osv.osv):
_name = "my.task"
_description = "My Task"
_columns = {
'name': fields.char('Name', required=True, size=64),
'user_id':fields.many2one('res.users', string='Responsible',
ondelete='cascade', required=True, select=1),
'project_id':fields.many2one('project.project', string='Related project',
ondelete='cascade', required=True, select=1),
}
Two-lines feature integration
++++++++++++++++++++++++++++++
Make your object inherit from :class:`mail.thread`::
class my_task(osv.osv):
_name = "my.task"
_description = "My Task"
# inherit from mail.thread allows the use of OpenChatter
_inherit = ['mail.thread']
Use the thread viewer widget inside your form view by using the mail_thread
widget on the message_ids field inherited from :class:`mail.thread`::
<record model="ir.ui.view" id="my_task_form_view">
<field name="name">My Task</field>
<field name="model">my.task</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<form>
[...]
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
</form>
</field>
</record>
Send notifications
+++++++++++++++++++
When sending a notification is required in your workflow or business logic,
use :meth:`mail.thread.message_post`. It will automatically take care of
subscriptions and notifications.
Here is a small example of sending a notification when the ``do_something``
method is called::
def do_something(self, cr, uid, ids, context=None):
self.do_something_send_note(cr, uid, ids, context=context)
return res
def do_something_send_note(self, cr, uid, ids, context=None):
self.message_post(
cr, uid, ids, _('My subject'),
_("has received a <b>notification</b> and is happy for it."),
context=context)
Notifications guidelines
+++++++++++++++++++++++++
- avoid unnecessary content, swamping users with irrelevant messages will lead
to them ignoring all messages
- use short sentences
- do not include the document name, this is done by the thread widget
- use a simple and clean style
- html tags are supported: use <b> or <em> mainly
- put key word(s) in bold
- avoid fancy styles that will break the OpenERP look and feel
- create a separate method for sending your notification, use clear method
names allowing quickly spotting notification code e.g. name notification
methods by using the original method name postfixed by ``_send_note``
(``do_something`` -> ``do_something_send_note``)
Subscription management
++++++++++++++++++++++++
The default subscription behavior is the following:
* Subscriptions are set up by creating a :class:`mail.followers`` entry
* If a user creates or updates a document, they automatically follow it. The
corresponding :class:`mail.followers` entry is created
* If a user explicitly cliks on the document's :guilabel:`Follow` button,
they follow the document. The corresponding :class:`mail.followers` entry
is created
* If a user explicitly clicks on the document's :guilabel:`Unfollow` button,
they stop following the document. The corresponding :class:`mail.followers`
entry is deleted
You should not directly manipulate :class:`mail.followers` entry, if you need
to override the default subscription behavior you should override the relevant
:class:`mail.thread` methods.
.. TODO: wtf are the relevant mail.thread methds? message_get_subscribers
has disappeared and nothing looks like a replacement