Quantcast
Channel: SharePoint 2010 - Development and Programming forum
Viewing all articles
Browse latest Browse all 11571

SharePoint Timer Job Not Updating List Items

$
0
0

The timer job is running and creates lists but when I try and add list items to the list I get:

Additional information: The security validation for this page is invalid. Click Back

in your Web browser, refresh the page, and try your operation again

in debugging the code I see the error is when I try and update the list item.

I have tried many blog suggestions without success.  I understand when using Elevated I need to be conscious of what web I am accessing.

here is the code block:


private void createAllCalendarLists(SPWeb oWeb)
{
string strListName = this.Properties["MasterCalendar"].ToString();
SPList sourcelist = oWeb.Lists.TryGetList(strListName);
if (sourcelist != null)
{
List<string> views = getAllViews(sourcelist);
foreach (string view in views)
{ 
//this needs to be the new web created linkedCalendars
using (SPWeb newWeb = oWeb.Webs["LinkedCalendars"])
{

createWebList(newWeb, view);
                 
{
SPUtility.ValidateFormDigest();
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(newWeb.Site.ID))
{
using (SPWeb web = site.OpenWeb(newWeb.ID))
{
 //now add the items from the mastercalendar to list
SPListItemCollection items = getListItems(oWeb, view, sourcelist);
SPCalendarItemCollection calCollection = MakeCalendar(newWeb, items);
SPList calList = newWeb.Lists.TryGetList(view);
if (calCollection.Count > 0)
{
foreach (SPCalendarItem item in calCollection)
{
SPListItem newItem = calList.Items.Add();
newItem["EventDate"] = item.StartDate;
newItem["EndDate"] = item.EndDate;
newItem["Description"] = item.Description;
newItem["Location"] = item.Location;
newItem["Title"] = item.Title;
newItem["fRecurrence"] = item.IsRecurrence;
newItem["fAllDayEvent"] = item.IsAllDayEvent;
HttpContext Saved = HttpContext.Current;
SPWeb thisWeb = site.RootWeb;
try
{
thisWeb.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;
web.Site.WebApplication.FormDigestSettings.Enabled = false;
HttpContext.Current = null;newItem.Update();}
catch (Exception ex)
{
//log ex
}  
finally
{
thisWeb.AllowUnsafeUpdates = false;
web.AllowUnsafeUpdates = false;
web.Site.WebApplication.FormDigestSettings.Enabled = true;
HttpContext.Current = Saved;
}
}
}
}
}
});
}
}
}
}
}


You can see by the try/catch/finally I have tried 4 different approaches.  Maybe I am missing something.  The timer job runs and creates a sub web, and 42calander  lists based on the views in a master calendar, The purpose is to allow linked Calendars for outlook that are based on SharePoint Views.



Viewing all articles
Browse latest Browse all 11571

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>