通过代码删除Sitefinity中所有页面的最佳方法是什么?

时间:2017-08-01 07:57:19

标签: c# sitefinity

我想知道删除Sitefinity中所有页面的最佳方法是什么? 我想出了两个解决方案,但我不确定最佳实践是什么。 我还阅读了documentation前删除页面。 目标是删除分层页面。

流利

 var fluent = App.WorkWith().Pages(); 
 fluent.LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend).Delete().SaveChanges();

本地

var pageManager = PageManager.GetManager();
var pageNodes = pageManager.GetPageNodes().ToList();
foreach (var node in pageNodes)
{
   pageManager.DeleteItem(node);
}

pageManager.SaveChanges();

P.S。我正在使用 Fluent 方法,但过了一会儿,一个错误开始弹出。我切换到 PageManager 方法,但我得到了同样的错误。我删除了后端和回收站中的所有页面,但仍无法解决。

  

Telerik.Sitefinity.Pages.Model.PageNode(' sf_page_node')没有行   GenericOID @ 4f0f7ba8 PageNode id = 6bd454ba-6971-4289-822d-36fbd9f5a844   NOTRES

编辑:尽管出现错误,页面仍会被删除。

2 个答案:

答案 0 :(得分:0)

你走哪条路(Fluent vs Native)并不重要 - 最终结果应该是一样的。这只是编码风格和可读性的问题。

我更喜欢Native,因为我觉得我有更多的控制权。)

至于错误 - 使用PageManager时 - 你试过吗

pageManager.Delete(节点)而不是pageManager.DeleteItem(节点)?

它们似乎略有不同。

您要删除多少页?

如果它们是数千个,您可以添加一个计数器并在每100次删除时调用pageManager.SaveChanges(),以便将事务提交给DB。

答案 1 :(得分:0)

删除页面时应该非常具体,因为您使用的本机版本将拉取包括BackendPages在内的所有页面。我之前在Sitefinity网站上删除了 ALL 页面。

根据文档,他们使用稍微不同的方法来删除页面。

https://docs.sitefinity.com/for-developers-delete-pages#delete-a-page-using-native-api

按标题删除,但可以轻松修改以适合您。文档还建议在删除之前取消发布页面。

public void DeletePageNativeAPI(string pageTitleToDelete)
        {
            PageManager pageManager = PageManager.GetManager();
            PageData page = pageManager.GetPageDataList().Where(pD => (pD.NavigationNode.Title == pageTitleToDelete && pD.Status == ContentLifecycleStatus.Live)).FirstOrDefault();

            if (page != null)
            {
                pageManager.Delete(page);
                pageManager.SaveChanges();
            }
        }

页面由模板>组成。 PageNode> PageData https://docs.sitefinity.com/for-developers-crud-operations-with-pages#page-components

由于添加了Personalization等,因此您使用Sitefinity页面的版本会有所不同。