Sitecore,移动项目需要多次尝试

时间:2014-07-29 19:18:56

标签: sitecore

我在Sitecore中有一个保存事件处理程序,当项目的日期发生变化时(从2014年8月7日到2014年9月7日),我希望将其移动到另一个文件夹中。

目前它有点做到了,但只有我改变日期两次。

如果我从8/7/2014开始> 2014年6月6日它什么都不做。如果我将相同项目的日期更改为9/7/2014,则会将其移至正确的文件夹中。

如果我调试代码,它两次都遵循完全相同的路径..任何人都有理由为什么会发生这种情况?

1 个答案:

答案 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);
        }
    }