Formación Liferay: Usando el framework de notificaciones de Liferay

30-10-2015
 

Liferay nos provee de un sistema de notificaciones muy potente que permite avisar a nuestros usuarios de los eventos que deseamos:

Liferay Web Notifications

Liferay Web Notifications

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”;
		}
}

Leave a Reply

© Albert Coronado Calzada