Hi,
We have a Timer Job and an Web Scoped Event Receiver on a List called "WeeklyWrapLog" (uses content type). When I manually enter an item on this list it triggers fine and adds another entry on the same list. However, when the Timer Job creates an entry in this list the event receiver does not seem to fire and only the timer job entry is written. I cannot debug as on another machine.
The code for Event Receiver is:
<?xml version="1.0" encoding="utf-8"?><Elements xmlns="http://schemas.microsoft.com/sharepoint/"><Receivers ListUrl="Lists/WeeklyWrapLog" Scope="Web"><Receiver><Name>WWLogCreatedItemAdded</Name><Type>ItemAdded</Type><Assembly>$SharePoint.Project.AssemblyFullName$</Assembly><Class>IntranetHomepage.Event_Receivers.WWLogCreated.WWLogCreated</Class><SequenceNumber>10000</SequenceNumber></Receiver></Receivers></Elements>
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.WebControls.WebParts;
namespace IntranetHomepage.Event_Receivers.WWLogCreated
{
/// <summary>
/// List Item Events
/// </summary>
public class WWLogCreated : SPItemEventReceiver
{
/// <summary>
/// An item was added.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
EventFiringEnabled = false;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
CreateTestLogItem(properties.List, "in Item Added");
if (properties.List.Title == "WeeklyWrapLog")
{
/* I commented out code here */
}
});
}
catch { }
finally
{
EventFiringEnabled = true;
}
base.ItemAdded(properties);
}
public static string StorageKeyToID(Guid storageKey)
{
if (!(Guid.Empty == storageKey))
{
return ("g_" + storageKey.ToString().Replace('-', '_'));
}
return string.Empty;
}
public void CreateTestLogItem(SPList logList, string str)
{
SPListItem item = logList.AddItem();
item[logList.Fields["WW Edition Reference"].InternalName] = str;
item.Update();
}
}
}The code for the Timer job is
using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System.Xml;
namespace IntranetTimerJob
{
class WWTimerJob : SPJobDefinition
{
public WWTimerJob() : base() { }
public WWTimerJob(string jobName, SPService service)
: base(jobName, service, null, SPJobLockType.None)
{
this.Title = "Weekly Wrap Timer";
}
public WWTimerJob(string jobName, SPWebApplication webapp)
: base(jobName, webapp, null, SPJobLockType.Job)
{
this.Title = "Weekly Wrap Timer";
}
public override void Execute(Guid targetInstanceId)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
SPWebApplication webApp = this.Parent as SPWebApplication;
SPSite site = webApp.Sites[0];
SPWeb mySiteWeb = site.RootWeb;
var pagesList = mySiteWeb.Lists.TryGetList("WeeklyWrapPages");
var dataList = mySiteWeb.Lists.TryGetList("WeeklyWrapData");
var logList = mySiteWeb.Lists.TryGetList("WeeklyWrapLog");
GetListData(pagesList, dataList, logList);
});
}
public void GetListData(SPList pagesList, SPList dataList, SPList logList)
{
DateTime now = DateTime.Now;
string nowDate = now.ToString("dd/MM/yyyy");
SPQuery pagesQuery = new SPQuery();
pagesQuery.Query ="<Where>" +"<Eq>" +"<FieldRef Name=\"" + pagesList.Fields["WW Edition Date"].InternalName + "\" />" +"<Value Type =\"DateTime\">" + now +".aspx</Value>" +"</Eq>" +"</Where>";
SPListItemCollection pageItems = pagesList.GetItems(pagesQuery);
if (pageItems.Count == 0)
{
nowDate = now.ToString("dd MMMM yyyy");
SPQuery dataQuery = new SPQuery();
dataQuery.Query ="<Where>" +"<Eq>" +"<FieldRef Name=\"" + dataList.Fields["WW Edition"].InternalName + "\" />" +"<Value Type =\"Text\">" + nowDate + "</Value>" +"</Eq>" +"</Where>";
dataQuery.RowLimit = 1;
SPListItemCollection wrapItems = dataList.GetItems(dataQuery);
if (wrapItems.Count > 0)
{
CreateLogItem(wrapItems, logList);
}
}
}
public void CreateLogItem(SPListItemCollection wrapItems, SPList logList)
{
DateTime now = DateTime.Now;
SPWeb web = logList.ParentWeb;
SPListItem wrap = wrapItems[0];
SPListItem item = logList.AddItem();
item[logList.Fields["Title"].InternalName] = wrap[wrapItems.Fields["Title"].InternalName].ToString();
SPUser user = web.EnsureUser("<my account name>");
SPFieldUserValue oUser = new SPFieldUserValue(web, user.ID, user.LoginName);
item[logList.Fields["Created By"].InternalName] = oUser;
item[logList.Fields["WW Edition Reference"].InternalName] = wrap[wrapItems.Fields["WW Edition Reference"].InternalName].ToString();
item[logList.Fields["WW Edition Date"].InternalName] = now;
item[logList.Fields["WW Issue Number"].InternalName] = wrap[wrapItems.Fields["WW Issue Number"].InternalName].ToString();
item.Update();
}
}
}Just a note that some fields are read-only on this list and have been used by InfoPath I think as Internal names are GUIDS - not sure if this is associated to problem.
Help would be appreciated.
Thanks.
John.