The ERP5Notification tool provides a central point to send asynchronous messages
from one user to one or many users. The purpose of the tool is to provide an API
which is independent on how messages are actually going to be sent and when.
Table of Contents
Installation¶
ERP5 is going to use ERP5Notification extensively. So, it is necessary to install
it on systems before an upgrade. Since it is provided with the ERP5 product,
you only need to go to the ZMI and add it by selecting 'Add ERP5 Tool'
The Notification Tool will be (soon) automatically created with a new site.
How to send a notification¶
Here is an example about how to send a notification from a workflow transition:
"""
This script tries to send a message to the appropriate recipient
from the appropriate sender. It uses portal_notifications
and the getObject API of ERP5Catalog.
"""
from Products.ERP5Type.Log import log
object = sci['object']
translateString = context.Base_translateString
portal_catalog = object.portal_catalog
# Get the owner
owner = object.getViewPermissionOwner()
owner_value = portal_catalog.getResultValue(portal_type='Person', reference=owner)
# Get the authenticated user
user = context.portal_membership.getAuthenticatedMember().getUserName()
user_value = portal_catalog.getResultValue(portal_type='Person', reference=user)
# If users are not defined, we need to log and return
if not owner or owner_value is None:
# We keep a trace because this is the best we
# can do (preventing answers is even worse)
log("ERP5 Query Workflow", "No owner defined")
return
if not user or user_value is None:
# We keep a trace because this is the best we
# can do (preventing answers is even worse)
log("ERP5 Query Workflow", "Current user is not defined")
return
# Build the message and translate it
subject = translateString("Query was answered")
msg = """The Query ID ${id} which you posted has been answered by ${user}
Question:
${question}
Answer:
${answer}
"""
msg = translateString(msg,
mapping=dict(id=object.getId(),
subject=subject,
user=user_value.getTitle(),
question=object.getDescription(),
answer=object.getTextContent())
)
# We can now notify the owner through the notification tool
context.portal_notifications.sendMessage(sender=user, recipient=owner, subject=subject, message=msg)
In this example, we provide user and owner as an object. However, it is also
possible to provide them as a string or as a list (of object values or string).
Future implementations may make unnecessary the validations which are made at
the header of this script.
Related Articles¶