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('#');
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);
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;
foreach (SPUser user in thisweb.SiteUsers)
username = user.Name;
string ReportUpdater = GetUserName_ID(GetPPorLookupInteger(item.Properties["ReportUpdater"].ToString()), ahp);