Get it on Google Play

Portlets para gestión de usuarios en Liferay

07-02-2010
 

liferayl-logoEn un proyecto que hice hace un año mas o menos tuve que crear un Portlet que gestionara datos del perfil de los usuarios de una comunidad Liferay.

Como me pareció muy interesante voy ha explicar en pocas líneas como se hace.

Primero de todo, para hacer modificaciones en los perfiles de Liferay se utilizan las classes: User que encapsula los datos del usuario, Contact que gestiona los datos de contacto y UserServiceUtil para realizar las operaciones.

Primero de todo para obtener los datos del usuario a partir del Id de usuario. En este ejemplo lo hacemos a partir del Id de usuario logueado:

User user = UserLocalServiceUtil.getUser( themeDisplay.getUserId() );
Contact contact = user.getContact();

A partir de aquí podemos hacer distintas operaciones:

Añadir un usuario (Cogiendo muchos datos del usuario actual):

newUser=UserServiceUtil.addUser(
user.getCompanyId(),
true,
"",
"",
true,
"",
email,
user.getLocale(),
nom,
cognom1,
cognom2,
contact.getPrefixId(),
contact.getSuffixId(),
true,
Integer.parseInt( aniversariMonth ),
Integer.parseInt( aniversariDay ),
Integer.parseInt( aniversariYear ),
"",
user.getOrganizationIds(),
true);

Modificar los datos de usuario (Atención que en el ejemplo no modificamos ningún dato, los cogemos todos de los que ya tenemos):

UserServiceUtil.updateUser(
user.getUserId(),
user.getPasswordUnencrypted(),
false,
user.getScreenName(),
user.getEmailAddress(),
user.getLanguageId(),
user.getTimeZoneId(),
user.getGreeting(),
user.getComments(),
user.getFirstName(),
user.getMiddleName(),
user.getLastName(),
contact.getPrefixId(),
contact.getSuffixId(),
user.getMale(),
daniversariMonth,
daniversariDay,
daniversariYear,
contact.getSmsSn(),
contact.getAimSn(),
contact.getFacebookSn(),
contact.getIcqSn(),
contact.getJabberSn(),
contact.getMsnSn(),
contact.getMySpaceSn(),
contact.getSkypeSn(),
contact.getTwitterSn(),
contact.getYmSn(),
contact.getJobTitle(),
user.getOrganizationIds()
);

Actualizar el Portrait de usuario (Imagen):

imagen = imagen.getScaledInstance( wi,he, java.awt.Image.SCALE_DEFAULT );
ByteArrayOutputStream bas = new ByteArrayOutputStream();
ImageIO.write(toBufferedImage(imagen),"jpeg", bas);
byte[] data = bas.toByteArray();
UserServiceUtil.updatePortrait( Long.parseLong(userid), data );

Interesado en formación Liferay?

 

Comments

23 Responses to “Portlets para gestión de usuarios en Liferay”
  1. Osmany says:

    Hola Alberto
    Soy un estudiante cubano que quiere hacer su tesis en Liferay, voy a utilizar PHP y como BD postgres, Mi tesis es un Sistema de Informacion de Mercadotecnia y estoy aprendiendo por las malas con el portal ya que soy practicamente pionero en mi escuela con este portal, necesito de tu ayuda por favor.
    gracias de antemano

  2. albert says:

    Hola Osmany,

    Pregunta lo que quieras, pero creo que vas mal. Liferay esta desarrollado en Java.

    Saludos,

  3. Marc says:

    Hola Alberto,

    Hay que hacer algun import para usar tu código?

    Gracias!

  4. albert says:

    Hola Marc,

    Te paso todos los que tengo en la clase:

    import javax.portlet.*;

    import org.apache.commons.logging.*;

    import com.liferay.portal.kernel.dao.jdbc.*;

    import org.apache.commons.fileupload.*;

    import com.liferay.portal.theme.*;
    import com.liferay.portal.util.*;
    import com.liferay.portal.service.*;
    import com.liferay.portal.model.*;
    import com.liferay.portal.kernel.util.*;
    import com.liferay.portal.service.persistence.*;

    import org.hibernate.*;

    import org.hibernate.cfg.*;

    Saludos,

  5. Isis says:

    Hola Alberto somos unos estudiantes en practicas en Berlin,y nos han pedido si podiamos hacer un servlet con portlets de subida modificacion y descarga de archivos. No he encontrado mucha informacion acerca del tema. A ver si era posible que nos orientaras un poco y en que sentido va orientado el codigo. Muchas gracias!.Un saludo desde Berlin.

  6. albert says:

    Hola Isis,

    Carai, desde Berlin!!!. Pues si queréis hacer un portlet para Liferay lo mejor es que empezeis instalandos el liferay SDK desde aquí(http://www.liferay.com/downloads/liferay-portal/additional-files), también podéis encontrar gran cantidad de ejemplos de los “Community pluggins” y los “Official pluggins” (Podéis descargaros los war y después descomprimirlos, son ficheros .zip).

    Una vez hayáis creado el primer portlet os puedo passar trozos de código que tengo hecho por mail, comentadmelo.

    Por cierto, perdón por la tardanza en contestar, he estado bastante liado.

    Saludos,

  7. Ignacio González says:

    Albert
    Cordial Saludo

    Soy un rotante y me han puesto a buscar un portlet que que permita la creación de tablas dinámicas, he buscado pero no encuentro lo que me han pedido, por casualidad encontré tu blog el cual me parece muy bueno, entonces te pregunto si conoces donde puedo buscar esa clase de portlet, o conoces algo que me ayude para ello.
    Muchas Gracias

  8. albert says:

    Hola Ignacio, pues la verdad es que no se muy bien a que te refieres con ‘tablas dinamicas’. Has probado a buscar en los portlets oficiales y de la comunidad de liferay?¿ Un saludo,

  9. Eddy says:

    Hola
    e estado desarrollando con flex y php.
    ahora me piden que lo convierta a un portlet para poderlo introducir a liferay mi problema es como hacer correr php en glassfish

  10. albert says:

    Hola Eddy,

    Directamente no vas a poder, normalmente lo que se hace es hacer correr un apache y hacer llamadas del glassfish al apache. La forma mas “sencilla” que se me ocurre es através de un IFrame.

    De todos modos no se quanto de difícil es pasar la lógica del PHP a Java. Esa quizás seria la solución mas elegante.

    Siento no poder ayudarte mas.

    Saludos,

  11. Raúl says:

    Hola Albert,

    Estoy realizando un estudio sobre LifeRay. Te cuento mi problema.
    Tengo un portal desarrollado en J2EE (jsps, portlets, multiidioma y cumpliendo AA Accesibilidad). El problema es que se encuentra muy mal estrucuturado y el mantenimiento es muy costoso. El planteamiento sería migrar a LifeRay (manteniendo la taxonomía, css, contenidos,…). Estoy intentando ver buscar herramientas que me faciliten la transición pero no encuentro nada. Si me puedes dar una pista o indicarme un camino “sencillo” te lo agradecería.

    Un saludo.

  12. albert says:

    Hola Raúl,

    Pues cone sa información no puedo decirte gran cosa. Quizà te interesaria desarrollar algún portlet para poder llevar una gestión mejor de los contenidos.

    Dame alguna pista mas, porque sinó no se que decirte. Aunque ya te adelanto que no hay muchas herramientas para facilitar una migración de este tipo de portales, se requiere de un analisi previo bueno para poder migrar sin problemas.

    Saludos,

  13. Alexandra Cruz says:

    Hola, desde Rep. Dom. Quiero saber si liferay me permitiria crear un website donde cada usuario guarde y muestre informacion de su perfil, asi como administrar la parte de registro y logeo de usuarIos, mensajería interna, sistema de “friends”, sistema de detección de online u offline, comentarios, upload de fotografías y embed de videos. La pregunta es si liferay posee estas funcionalidad y que solo sea cuestion de activarlas y darles estilo. Sino es asi, que tanto puedo hacer con liferay?

  14. albert says:

    Hola Alexandra,

    Si, Liferay posee la mayoria de estas funcionalidades, aunque alguna la tendrias que desarrollar tu (Como por ejemplo el Streaming de vídeos).

    Te aconsejaría que algún consultor bueno en Liferay te hiciera un poco de análisis de tu proyecto, antes de lanzarte a la piscina. Saludos,

  15. MARCO PINCHIERA says:

    mira soy nuevo en esto de liferay necesito incluir en un portlet google apps para liferay y tengo algunas dudas…alguien me podria orientar un poco.

    de antemano muchas gracias.

    mpinch41

  16. Lina Margarita says:

    Al actualizar la imagen se crea tambn en el directorio de Liferay? Puedes copiar tu ejemplo completo? es que tengo muchas dudad y no se cuando le dices que imagen quieres que se cargue para actualizarse. Muchas Gracias!

  17. Hola Lina,

    Disculpa la tardanza, es que he estado toda la semana impartiendo una formación Liferay en Valencia y no he parado por la oficina.

    La imagenes, por defecto, se guardan en la carpeta ‘data’ de la carpeta de Liferay. Cuidado porque todos los ficheros se gestionan a través de la librería de documentos y debes acceder a ellos via API de liferay.

    En cuanto pueda te intento ampliar el ejemplo.

    Saludos,

  18. Juan Carlos says:

    Hola

    Recientemente me “ha tocado” la administración de un portal en Liferay 6.0.5 CE organizado en varias comunidades. El alta de usuario se hace importación mediante LDAP . Se puede delegar la gestion de usuario de una comunidad, no el añadirlos a la misma con el administrador de comunidad, sino gestionar sus datos personales. ¿ Conoces de algun pluging que realice informes de los usuarios ?

    Saludos y gracias de antemano he leido cosas interesantes en el blog.

  19. Hola Juan Carlos,

    Disculpa la tardanza en contestar, estoy fuera por trabajo. La verdad es que lo desconozco, por defecto no lo hace y no creo que exista un pluggin hecho que ya lo haga. Creo que tendreis que desarrollar uno, porque el LDAP no contempla eso(Cuidado que no soy un experto en LDAP).

    Saludos,

  20. Sandra says:

    Hola,

    Estoy intentando desarrollar un portlet y necesito hacer un hook para que cuando el usuario modifica su perfil saber que campos ha cambiado y llamar a unas funciones. Pero no tengo ni idea como lo puedo hacer, ni que evento es la modificacion del perfil.

    Muchas gracias!

  21. Hola Sandra,

    Yo lo que haría sería un hook a la sobre la capa servicio, son los métodos que se llaman cada vez que se actualiza un registro.

    Saludos,

  22. Sandra says:

    Hola,
    Ya he conseguido saber cuando el usuario modifica su perfil con listener. En el portal.properties tengo:

    value.object.listener.com.liferay.portal.model.User=com.myhook.updateaccount

    y luego tengo la funcion onAfterUpdate que se ejecuta cuando se modifica algun atributo de My Account, pero no consigo saber que atributo es el que ha cambiado de valor. No se si estoy haciendo lo correcto…

    Muchas gracias! Y disculpa las molestias

  23. Hola Sandra,

    Pues puedes interceptar también el evento onBeforeUpdate y luego comparar. Como alternativa puedes hacer como te dije, hacer un hook en la capa de servicio, donde puedes sobrescribir los métodos ‘updateUser’.

    Saludos,

Leave a Reply

© Albert Coronado Calzada