In the white paper we posted on 3/9 (Integrating ECM with Portal Technologies) I wrote a section that gave an overview of the 3 main types of personalization that are normally implemented in a portal environment.

  1. User Personalization
  2. Content Filtering Personalization
  3. Trend Analysis Personalization

In a short series of posts over the next few weeks I will go into a bit more depth on each type that I mentioned in the paper including technical details when applicable.

First up is User Personalization.

User personalization is the ability for the user to configure or rearrange an interface based on their preferences.  It allows for changing of look and feel and can even dictate what content a user sees.  These preferences are saved on a per user basis so that user’s changes are persisted between visits to the site.

In a Java based portal application this type of personalization is handled by Portlet Preferences, part of the JSR-168 Standard.  The preferences allow you to save configuration information entered by a user and persist that information between visits to the site.  The preferences themselves are saved per instance of a portlet, meaning that one portlet can have multiple configurations without the need to change the code.

Presenting an interface for the user to enter their preferences is done by implementing the EDIT portlet mode.  The different portlet modes are simply rendering states for a portlet that provide specific functionality.  In the EDIT mode you implement a separate rendering jsp that allows a user to enter some attributes about how the portlet will be rendered in the VIEW mode (the default state).  The portlet container (the portal) then saves this information to a persistent store so that it can be retrieved on subsequent visits.  Each portal vendor stores this information differently behind the scenes but thankfully the code to save and retrieve is the same regardless.

//Retrieve a preference
PortletPreferences prefs = request.getPreferences();
String contentID = prefs.getValue("contentID", "");
//do something useful with the content ID, i.e. pull content with CIS or RIDC

//Save a preference
PortletPreferences prefs = request.getPreferences();
String contentID = request.getParameter("contentID");
prefs.setValue("contentID", contentID);
prefs.store();

These preferences differ based on the type of portlet being implemented.  For example if you have an RSS Feed Consuming portlet the possible options available to the user would be the URL for the feed and the number of items to show at once.  In the case of a content consumption portlet the user would be able to pick a piece of content to view, or query for a list of content they would like to see upon logging in.

The thing to remember about this type of personalization is that it is completely manual.  The user has to take the initiative to configure it themselves and then it is only viewable by them making it well suited to a dashboard view (like iGoogle or My Yahoo!).  It does not leverage the inherent benefits in using an ECM system with a portal (i.e. leveraging metadata to provide targeted content).  In the next post we will dive more into those benefits when we talk about Content Filtering personalization.