I was having intermittent issues with a custom alert email that I had created. It would send most of the time, but would inexplicably not always work.
A better programmer than me would have set up exception catching that wrote to the Event Viewer but I couldn't seem to get that to work (might blog on that one later).
Alas, after much frustration I noticed that the alert emails were only firing for Office Documents (eg. Word, Excel) and not for PDFs.
This perplexed me so I opened up
SharePoint Manager and browsed down to the items I was trying to render.
On comparison of the properties I was trying to render to the Alert email, I noticed that Office Documents stored People Picker user names as
15;#John Smith, while PDF documents store People Picker User names as just
15.
So my short-cut function that previously read:
private string GetPPorLookupValue(string LongString)
// Takes People Picker or Lookup column input in the format: 15;#John Smith
// splits it and returns "John Smith" (to right of '#')
{
string[] SplitArray = LongString.Split('#');
return SplitArray[1].ToString();
}
Needed to be made a little bit more robust by actually referring to the User Listing in SharePoint:
private int GetPPorLookupInteger(string LongString)
// Takes People Picker or Lookup column input in the format: 15;#John Smith or 15
// splits it and returns integer 15 (to left of ';', if exists)
{
string[] SplitArray = LongString.Split(';');
int UserNum = Convert.ToInt32(SplitArray[0]);
return UserNum;
}
private string GetUserName_ID(int UserID, SPAlertHandlerParams ahp)
// Takes User ID as a SharePoint User ID: 12
// returns username "John Smith"
{
string username = "Unknown User";
if (!(UserID == 0))
{
SPWeb thisweb = new SPSite(ahp.siteUrl + ahp.webUrl).AllWebs[0];
foreach (SPUser user in thisweb.SiteUsers)
{
if (user.ID.Equals(UserID))
{
username = user.Name;
break;
}
}
thisweb.Dispose();
}
return username;
}
string ReportUpdater = GetUserName_ID(GetPPorLookupInteger(item.Properties["ReportUpdater"].ToString()), ahp);