无论如何在sitecore中自动接受克隆通知吗?

时间:2015-12-18 15:38:07

标签: c# sitecore

我有一个已从其他sitecore项目克隆的sitecore项目。当我向父项添加子项时,我希望它也在克隆下添加项。它这样做但我必须手动接受每个更改。我有250个克隆!

enter image description here 有没有办法自动接受这些通知或阻止它们首先执行此操作?

1 个答案:

答案 0 :(得分:5)

this article from sitecore,有人在评论部分提出了类似的问题:

  

为已克隆的项目创建新的子项目时,它   似乎你必须手动去每个克隆并接受一个子项目   在克隆下面创建。有没有办法不必这样做?   对于一个新的解决方案,我们将有几个克隆的一个来源和   客户不想去每个克隆并接受一个子项目。   总是有子项目会更容易和用户友好   出现在克隆中没有任何问题。同样也适用于   内容作者覆盖克隆中的值的实例,   那么一个强大的作者"更改源项目中的值。怎么会这样   更改将应用​​于所有克隆,而无需手动克隆   接受改变?干杯

sitecore发布了一些带有伪代码的回复。基本上这可以转化为以下内容:

构建事件类

public abstract class AcceptCloneNotificationsEventBase<T> where T : Notification
{
    protected abstract bool ShouldAcceptNotification(Item item, Item parent);

    public void AcceptClone_SavedItem(object sender, EventArgs args)
    {
        var item = (Item)Event.ExtractParameter(args, 0);
        var parent = item.Parent;
        foreach (var clone in item.GetClones())
        {
            foreach (var notification in clone.Database.NotificationProvider.GetNotifications(clone.Uri))
            {
                if (notification is T && ShouldAcceptNotification(item, parent)) 
                {
                    notification.Accept(clone);
                }
            }
        }
    }

    public void AcceptClone_CreateItem(object sender, EventArgs args)
    {
        var item = (Item)Event.ExtractParameter(args, 0);
        var parent = item.Parent;
        foreach (var clone in parent.GetClones())
        {
            foreach (var notification in clone.Database.NotificationProvider.GetNotifications(clone.Uri))
            {
                if (notification is T && ShouldAcceptNotification(item, parent)) 
                {
                    notification.Accept(clone);
                }
            }
        }
    }
}

我已经将它构建为abstract类,因此我可以多次使用它。实现如下:

public class ImplementationOfBase: 
             AcceptCloneNotificationsEventBase<FieldChangedNotification>
{
    protected override bool ShouldAcceptNotification(Item item, Item parent)
    {
        return /*filter the event as you see fit here*/;
    }
}

注册活动

<events>
  <event name="item:added">
    <handler type="Namespace.ImplementationOfBase,Namespace" method="AcceptClone_CreateItem"/>
  </event>
  <event name="item:saved">
    <handler type="Namespace.ImplementationOfBase,Namespace" method="AcceptClone_SavedItem"/>
  </event>
</events>