如何在Kentico中设置DocumentShowInSiteMap
属性的值?
我试过了:
DocumentHelper
和TreeHelper
apis但同时使用这两者,此属性不允许您访问setter。dbo.CMS_Document.DocumentShowInSiteMap
的值设置为1
和0
。这些查询运行正常,但是当我转到页面应用时,“在站点地图中显示”属性复选框中没有任何更改,即。将数据库字段设置为0不会“取消选中”此复选框。我正在尝试运行计划任务,该任务将自动为指定位置的文档设置此属性。这样做的正确方法是什么?任何帮助赞赏。
答案 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
,其中包含不同的参数。