1

我想从我的页面中删除带有损坏链接的块。Fx 我们使用 EPi Server Commerce,有时会从 Commerce 中的 PIM 中删除产品,我需要删除引用该产品的所有块。

但有些东西是“古怪的”......

在我尝试删除它们之后,某些块有时仍然存在。如果我在 ContentArea 中放置一个新块,它似乎会删除旧值并且 ContentArea 再次正常。就像 EPi 服务器没有将我的更改视为更改并且没有发布任何内容。

        private void CleanNonExistingBlocks(PageData page)
    {
        page = page.CreateWritableClone();
        var type = page.GetType();
        var props = type.GetProperties();
        bool isPageDirty = false;
        foreach (var propertyInfo in props)
        {
            if (propertyInfo.PropertyType != typeof(ContentArea))
                continue;

            ContentArea value = propertyInfo.GetValue(page, null) as ContentArea;
            if (value == null)
                continue;
            List<ContentAreaItem> list = value.Items.ToList();
            bool isListDirty = false;
            foreach (var contentAreaItem in list.ToList())
            {
                IContent found;
                if (_contentRepository.TryGet<IContent>(contentAreaItem.ContentLink, out found))
                    continue;

                isPageDirty = true;
                isListDirty = true;
                list.RemoveAll(c => c.Equals(contentAreaItem));

            }
            if (isListDirty)
            {
                value.Items.Clear();
                foreach (ContentAreaItem contentAreaItem in list)
                    value.Items.Add(contentAreaItem);
                propertyInfo.SetValue(page, value);
            }
        }
        if (isPageDirty)
        {
            _contentRepository.Save(page, SaveAction.Publish, AccessLevel.NoAccess);
            _outputMessages.Add(page.Name + " - ");
        }
    }
4

1 回答 1

1

问题是您使用的是 .NET Reflection API:s 而不是 EPiServers API。有关如何在代码中使用 ContentArea 的示例,请参阅此问题接受的答案:

EpiServer - 以编程方式将块添加到内容区域

于 2015-11-12T19:34:54.990 回答