我在Sitecore中有一个保存事件处理程序,当项目的日期发生变化时(从2014年8月7日到2014年9月7日),我希望将其移动到另一个文件夹中。
目前它有点做到了,但只有我改变日期两次。
如果我从8/7/2014开始> 2014年6月6日它什么都不做。如果我将相同项目的日期更改为9/7/2014,则会将其移至正确的文件夹中。
如果我调试代码,它两次都遵循完全相同的路径..任何人都有理由为什么会发生这种情况?
答案 0 :(得分:0)
其他一个问题是保存处理程序运行了两次,一次是使用新的日期值,一次是旧的。更改为已保存的处理程序效果更好,因为我只能访问新保存的值,而不是旧值和新值。
由于有一些评论要求它,这里有工作代码移动和项目从父文件夹到父>年>月。请记住,这是使用glassmapper,因此如果不使用glass mapper,它会略有不同。
protected void MoveItemToMonthDateFolder<T>(T scItem, Func<T, DateTime> dateSelector, Models.Item parentFolder) where T : Models.Item
{
var date = dateSelector(scItem);
if (!parentFolder.Children.Any(x => x.Name.Contains(date.Year.ToString())))
{
var yearFolder = sitecoreService.Create(parentFolder, new Folder { Name = date.Year.ToString() });
var monthFolder = sitecoreService.Create(yearFolder, new Folder { Name = date.Month.ToString() });
sitecoreService.Move(scItem, monthFolder);
}
else
{
var yearFolder = parentFolder.Children.First(x => x.Name.Equals(date.Year.ToString(), StringComparison.CurrentCultureIgnoreCase));
var monthFolder = yearFolder.Children.FirstOrDefault(x => x.Name.Equals(date.Month.ToString(), StringComparison.CurrentCultureIgnoreCase));
if (monthFolder == null)
{
monthFolder = sitecoreService.Create(yearFolder, new Folder { Name = date.Month.ToString() });
}
sitecoreService.Move(scItem, monthFolder);
}
}