2017-06-26 17 views
0

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

我已经试过:

  1. 使用DocumentHelperTreeHelper API,但两者,酒店不给你访问的制定者。
  2. 尝试运行SQL查询,将dbo.CMS_Document.DocumentShowInSiteMap的值设置为10。这些查询运行良好,但当我转到页面应用程序时,“显示在站点地图”属性复选框中没有变化,即。将数据库字段设置为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(); 
     } 
0

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

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

您的第二种方法应该可以工作,但文档及其属性会被缓存,并且您将需要刷新缓存,以便实际拾取新的DB值。此属性的加载通过LoadDefaultValues中的每个TreeNode的简单GetData。

+0

这就是我的想法。我试着清除所有缓存值。来自Pages和System。试图重新启动应用程序,但它只是拿起那个价值。 –

+0

我强烈建议不要直接使用数据库查询@jeevan。这是因为版本控制和工作流程。您可以整天修改该表格,但当它保存在用户界面中时,由于版本控制和工作流程,它会覆盖该表格。 –

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这需要不同的参数。