如何在Kentico中设置'DocumentShowInSiteMap'属性的值?

时间:2017-06-26 01:37:08

标签: kentico

如何在Kentico中设置DocumentShowInSiteMap属性的值?

我试过了:

  1. 使用DocumentHelperTreeHelper apis但同时使用这两者,此属性不允许您访问setter。
  2. 尝试运行SQL查询,将dbo.CMS_Document.DocumentShowInSiteMap的值设置为10。这些查询运行正常,但是当我转到页面应用时,“在站点地图中显示”属性复选框中没有任何更改,即。将数据库字段设置为0不会“取消选中”此复选框。
  3. 我正在尝试运行计划任务,该任务将自动为指定位置的文档设置此属性。这样做的正确方法是什么?任何帮助赞赏。

3 个答案:

答案 0 :(得分:1)

你试过这个吗?

int TheDocumentToModify = 1221;
        var PageItem = DocumentHelper.GetDocument(TheDocumentToModify , new TreeProvider());

        foreach(var culturePage in PageItem.CultureVersions)
        {
            culturePage.SetValue("DocumentShowInSiteMap", true);
            // May need to apply Workflow check in / check out, see Kentico API examples based on your need.
            culturePage.Update();
        }

答案 1 :(得分:0)

在代码中,没有简单的方法。 Setter应该在特殊类DocumentCultureDataInfo中可用,并且应该使用SetObject保存。此类包含所有文化数据库字段,并由DocumentCultureDataInfoProvider操作。

此类是TreeNode的内部属性。但是我没有尝试在代码中执行任意操作,并且提到的类是内置API的一部分。

您的第二种方法应该有效,但文档及其属性会被缓存,您需要刷新缓存以便实际获取新的DB值。对于每个TreeNode,此属性的加载将通过LoadDefaultValues中的简单GetData进行。

答案 2 :(得分:0)

Trevor J Fayas的答案可能会奏效。我昨天想出了这个,只是为了以防万一我的解决方案:

TreeHelper
.GetDocuments(task.CurrentSiteName, aliaspath, null, false, "", "", "", -1, false, -1)
.Where(doc => doc.DocumentShowInSiteMap)
.ToList()
.ForEach(node =>
{
    node.SetValue("DocumentShowInSiteMap", false);
    node.Update();
});

显然将aliaspath替换为您需要的DocumentHelper.GetDocuments或使用Sub,其中包含不同的参数。