В SharePoint весь список имеющий Статуса столбца (Datatype является Dropdown) & DueDate колонка. Столбец Duedate превышает сегодняшнюю дату. Состояние. Столбец должен быть изменен. Закрыто автоматически с использованием Timerjob. Я использовал этот код, но не работает, пожалуйста, кто-то изменит этот код и как достичь этого решения.TimerJob SharePoint Server 2013
class.cs
namespace TimerJobNew
{
class StatusCompleted : SPJobDefinition
{
public const string jobName = "CompletedProjectsJob";
public StatusCompleted() : base() { }
public StatusCompleted(SPWebApplication webApplication)
: base(jobName, webApplication, null,SPJobLockType.Job)
{
Title = "Completed Projects Job";
}
public override void Execute(Guid targetInstanceId)
{
SPWebApplication webApp = this.Parent as SPWebApplication;
SPSite site = new SPSite(SPContext.Current.Web.Url);
SPWeb web = site.RootWeb;
// SPWeb web = webApp.Sites["/sites/test"].RootWeb;
SPList list = web.Lists.TryGetList("CommonList");
SPListItem items;
bool flag =true;
SPListItemCollection itemColl = list.Items;
var query =new SPSiteDataQuery();
query.Lists = "<Lists BaseType='0' />";
query.ViewFields = "<FieldRef Name='Title' Nullable='TRUE' />" +
"<FieldRef Name='Status' Nullable='TRUE' />" +
"<FieldRef Name='CommonlistID' Nullable='TRUE' />";
query.Query = "<Where>" +
"<Eq>" +
"<FieldRef Name='Status' />" +
"<Value Type='Choice'>Closed</Value>" +
"</Eq>" +
"</Where>";
query.Webs = "<Webs Scope='SiteCollection' />";
DataTable dt = web.GetSiteData(query);
foreach (DataRow row in dt.Rows)
{
items = list.Items.Add();
if (itemColl.Count != 0)
{
foreach (SPListItem item in itemColl)
{
if (item["CommonlistID"].ToString() == row["CommonlistID"].ToString())
{
flag = false;
break;
}
else
{
flag = true;
}
}
if (flag ==true)
{
items["Title"] = row["Title"].ToString();
items["Status"] = row["Status"].ToString();
items["CommonlistID"] = row["CommonlistID"];
items.Update();
list.Update();
}
}
else
{
items["Title"] = row["Title"].ToString();
items["Status"] = row["Status"].ToString();
items["CommonlistID"] = row["CommonlistID"];
items.Update();
list.Update();
}
}
}
}
}
[Guid("95a2f297-4d46-45b2-b792-a7874f11ce08")]
public class StatusFeatureEventReceiver : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;
DeleteJob(webApp.JobDefinitions);
StatusCompleted tasksTimerJob = new StatusCompleted(webApp);
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;
schedule.EndSecond = 59;
schedule.Interval = 1;
tasksTimerJob.Schedule = schedule;
tasksTimerJob.Update();
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;
DeleteJob(webApp.JobDefinitions);
}
private void DeleteJob(SPJobDefinitionCollection jobs)
{
foreach (SPJobDefinition job in jobs)
{
if (job.Name.Equals(StatusCompleted.jobName,
StringComparison.OrdinalIgnoreCase))
{
job.Delete();
}
}
}
}
}
SPContext.Current.Web.Url не будет работать в задании таймера, поскольку он работает на уровне фермы, используйте полный URL ..... –