The Events for You Web Part functions in a manner very similar to the Links for You Web Part that can be found on the Home Page and Personal MySite page of SharePoint Portal Server. With this free Web Part, Event Items from the Events List located in the portal’s root web are presented to portal users based on their Audience membership. The Events for You Web Part can also be configured to override a user’s Audience membership, targeting Events to a definable set of one or more Audiences. In order to function properly, the Events for You Web Part requires that the Events List located in the portal’s root web be customized with the addition of an “Single line of text” type column named Audience. The Audience column can contain a semicolon delimitted list of Audiences for targeting that particular Event Item. The Events for You Web Part also requires that the Events List has the “Current Events” view.
Here’s a screenshot of Events For You in action:
Setup Instructions
Follow these steps to setup your portal’s Events List for use with the Events for You Web Part:
1. Modify Events List | 2. Modify Settings and Columns | 3. Add a New Column |
4. Single Line of Text Column Type | 5. Poplulate Audience Values | |
Customizing Behavior
Once you have the Events list setup and populated with data, you can customize how the Events for You Web Part behaves:
1. Modify Shared Web Part | 2. Deselect ‘Use default user audiences’ | 3. Target Specific Audiences |
Technical Perspective: A few highlights
The Events for You Web Part makes use of the SPQuery object and CAML to query the Events list.
SPQuery query = null;
string caml = string.Empty;
SPListItemCollection results = null;
// CAML uses ISO8601 date format: yyyy-mm-ddThh:mm:ssZ
string todaysDate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Today).ToString();
try
{
query = new SPQuery(events.Views["Current Events"]);
// Build the CAML Query to get all Events which belong to the current Audience (a)
// and have start date of today or in the future
// Apparently there is a problem with using CAML to get recurring events, so they're not supported.
// More info about DateRangesOverlap element at http://wss.collutions.com/Lists/FAQ/DispForm.aspx?ID=320
caml = string.Format("<Where><And><Contains><FieldRef Name='Audience'/><Value Type='Text'>{0}</Value></Contains>"
+ "<And><Geq><FieldRef Name='EventDate' /><Value Type='DateTime'>{1}</Value></Geq><DateRangesOverlap>"
+ "<FieldRef Name='EventDate'></FieldRef><FieldRef Name='EndDate'></FieldRef><FieldRef Name='RecurrenceID'>"
+ "</FieldRef><Value Type='DateTime'><Month/></Value></DateRangesOverlap></And></And></Where><OrderBy><FieldRef Name='EventDate'/></OrderBy>",
audienceName, todaysDate);
query.Query = caml;
results = events.GetItems(query);
// If the results collection contains items, we have some hits
if(results.Count > 0)
hasEvents = true;
}
catch(ArgumentException ex)
{
// 'Current Events' View doesn't exist
_messages.Text += "<p>This portal's 'Events' List must have a 'Current Events' View defined in order for this web part to function properly.</p>";
_hasHandledErrors = true;
break;
}
catch(NullReferenceException ex)
{
// No items in results collection
_hasHandledErrors = true;
break;
}
catch(Microsoft.SharePoint.SPException ex)
{
// 'Audiences' column not defined
_messages.Text += "<p>This portal's 'Events' List must have a 'Single line of text' type Column named 'Audience' defined in order for this web part to function properly.</p>";
_hasHandledErrors = true;
break;
}
The AudienceManager object is used to determine Audiences for the current user:
public static string[] GetUserAudiencesNamesArray(string url)
{
// Get the portal context
SPSite portal = new SPSite(url);
PortalContext context = PortalApplication.GetContext(portal.ID);
// Get the list of audiences for the user
AudienceManager manager = new AudienceManager(context);
string[] names = new string[manager.GetUserAudienceIDs().Count];
IEnumerator enumer = manager.GetUserAudienceIDs().GetEnumerator();
int i = 0;
while(enumer.MoveNext())
{
AudienceNameID temp = (AudienceNameID)enumer.Current;
names[i] = temp.AudienceName;
i++;
}
return names;
}
The MSOPGrid_doBuilder() JavaScript function located in ows.js is used to launched the Audience Chooser Custom Property Builder:
{
try
{
// Client-side code to apply changes
string applyFunction = "ApplyProperties" + _qualifier;
string EmbeddedScriptFormat = "<script language=jscript>function " + applyFunction + "(){\n";
EmbeddedScriptFormat += "document.forms[MSOWebPartPageFormName].MSOTlPn_Button.value = 'apply';\n";
EmbeddedScriptFormat += "document.forms[MSOWebPartPageFormName].elements['" + _shortId + ":MSOTlPn_AppBtn'].click();\n";
EmbeddedScriptFormat += "}\n";
EmbeddedScriptFormat += "</script>\n";
if(!Page.IsClientScriptBlockRegistered(applyFunction))
Page.RegisterClientScriptBlock(applyFunction, EmbeddedScriptFormat);
string onClick = "MSOPGrid_doBuilder('"
+ "_layouts/1033/Audience_Chooser.aspx" + "', " + "EventsForYou" + _qualifier
+ ", '" + "dialogHeight:510px;dialogWidth:560px;help:no;status:no;resizable:yes" + "');";
onClick += applyFunction + "();";
_button.Attributes.Add("OnClick", onClick);
_chkDefaults.Attributes.Add("OnClick", applyFunction + "()");
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("{0} {1} {2}",ex.GetType().ToString(), ex.Message, ex.StackTrace), "ERROR");
}
}
The source code and binaries for the Events for You Web Parts are released to public domain. Download source and binaries from the links below.
8 comments:
Thanks on my blog EROL
Very helpful thankyou
Hi,
I have a problem using "events for you".
I have downloaded version 1.0.0.0, unzipped it on my sharepoint server computer and run installation (logged in as administrator). In command window that is opened, I got a message that installation succeeded.
I went to my portal and followed your instructions about adding Audience text field.
I also created new audience and compiled it and populated Audience column in all my events with this new audience.
After that I tried to add new portal part to my portal page and to "My Site" page and in both cases I get the same error:
System.Security.SecurityException Request for the permission of type Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c failed.
This portal must have an 'Events' List defined in order for this web part to function properly.
No events.
On my portal home page I do have Events (that are managed as top-level list) and I added the Audience to THIS list as instructed.
What could cause my problem?
Hi,
I have a problem using "events for you".
I have downloaded version 1.0.0.0, unzipped it on my sharepoint server computer and run installation (logged in as administrator). In command window that is opened, I got a message that installation succeeded.
I went to my portal and followed your instructions about adding Audience text field.
I also created new audience and compiled it and populated Audience column in all my events with this new audience.
After that I tried to add new portal part to my portal page and to "My Site" page and in both cases I get the same error:
System.Security.SecurityException Request for the permission of type Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c failed.
This portal must have an 'Events' List defined in order for this web part to function properly.
No events.
On my portal home page I do have Events (that are managed as top-level list) and I added the Audience to THIS list as instructed.
What could cause my problem?
anonymous poster,
To get around the security excpetion you are seeing, you'll need to open your web.config file and change the trust level from WSS_Minimal to WSS_Medium.
Great!
It works. Thank you for this useful webpart.
Hi,
I'm trying to enable the events web part but it doesn't seem to look the same as your screen shots. The details are fine but the headings (that are showing in orange on your screen shots)don't appear to be the same. Please can you help
Post a Comment