Liferay nos provee de un sistema de notificaciones muy potente que permite avisar a nuestros usuarios de los eventos que deseamos:
A través de un simple ejemplo veremos como utilizarlos en nuestros desarrollos. En tres simple pasos implementaremos notificaciones en un portlet:
Configurar el portlet para que haga uso de notificaciones
Lo primero será configurar en nuestro portlet el archivo XML donde definiremos los distintos tipos de notificaciones que vamos a usar y la classe que nos pintará el contenido:
<user-notification-definitions>user-notification-definitions.xml</user-notification-definitions> <user-notification-handler-class>com.lostsys.formacion.notifications.NotificationHandler</user-notification-handler-class>
Después deberemos configurar también los tipos de notificaciones que vamos ha hacer, utilizaremos el fichero ‘user-notification-definitions.xml’ que hemos configurado en el anterior fichero:
<?xml version="1.0"?> <!DOCTYPE user-notification-definitions PUBLIC "-//Liferay//DTD User Notification Definitions 6.2.0//EN" "http://www.liferay.com/dtd/liferay-user-notification-definitions_6_2_0.dtd"> <user-notification-definitions> <definition> <notification-type>${com.lostsys.upf.notifications.NotificationHandler.PORTLET_ID}</notification-type> <description>alta-cliente</description> <delivery-type> <name>website</name> <type>${com.liferay.portal.model.UserNotificationDeliveryConstants.TYPE_WEBSITE}</type> <default>true</default> <modifiable>true</modifiable> </delivery-type> </definition> </user-notification-definitions>
Fijaros que definimos una notificación del tipo ‘TYPE_WEBSITE’ pero podriamos crear notificaciones via SMS, Push, etc.
Envío de notificaciones
A partir de este momento ya solo nos queda enviar las notificaciones a nuestros usuarios desde nuestros desarrollos. En este caso vamos a enviar una notificación al usuario inventado ‘cliente’, donde le pasaremos la información par a pintar la notificación ‘estado_pedido’:
JSONObject payloadJSON = JSONFactoryUtil.createJSONObject(); payloadJSON.put("estado_pedido", “Enviado”); UserNotificationEventLocalServiceUtil.addUserNotificationEvent( identificador_de_envio, NotificationHandler.PORTLET_ID, new Date(), usuario_cliente_id, payloadJSON.toString(), false, ServiceContextFactory.getInstance(portletRequest) );
Pintar la notificación
Finalmente ya solo nos queda implementar la classe que nos permitirá pintar las notificaciones:
public class NotificationHandler extends BaseUserNotificationHandler { public static final String PORTLET_ID = "miportlet_WAR_miportletportlet"; public NotificationHandler() { setPortletId(PORTLET_ID); } @Override protected String getBody(UserNotificationEvent userNotificationEvent, ServiceContext serviceContext) throws Exception { JSONObject jsonObject = JSONFactoryUtil.createJSONObject(userNotificationEvent.getPayload()); String estadoPedido = jsonObject.getString("estado_pedido"); return "<strong>Estado Pedido</strong><div>"+estadoPedido+"</div>"; } @Override protected String getLink(UserNotificationEvent userNotificationEvent,ServiceContext serviceContext) throws Exception { JSONObject jsonObject = JSONFactoryUtil.createJSONObject(userNotificationEvent.getPayload()); String estadoPedido = jsonObject.getString("estado_pedido"); return “/web/pedidos”; } }