我正在编写一个GUI扩展并使用Anquilla框架来获取Category
中的Keywords
列表。 我正在获取关键字列表的 XML 文档,然后在我的扩展中使用该文档。
我的问题是返回的XML不包含关键字的" Description
"值。 我有标题和钥匙等。
我的原始代码如下所示:
var category = $models.getItem("CATEGORYTCMID:);
var list = category.getListKeywords();
list.getXml();
返回的典型节点如下:
<tcm:Item ID="tcm:4-1749-1024"
Type="1024" Title="rate_one" Lock="0" IsRoot="true"
Modified="2012-12-17T23:01:59" FromPub="010 Schema"
Key="rate_one_value" IsAbstract="false"
CategoryTitle="TagSelector"
CategoryID="tcm:4-469-512" Icon="T1024L0P0"
Allow="268560384" Deny="96" IsNew="false"
Managed="1024"/></tcm:ListKeywords>
所以我尝试使用过滤器为我提供额外的列信息:
var filter = new Tridion.ContentManager.ListFilter();
filter.columns = Tridion.Constants.ColumnFilter.EXTENDED;
var list = category.getListKeywords(filter);
不幸的是,这只提供了额外的 XML 属性:
IsShared="true" IsLocalized="false"
我真的希望描述值成为此 XML 的一部分,而不必从 XML 创建关键字对象。 这样的事情可能吗?
咳咳有什么想法吗?咳嗽
恐怕你必须加载关键字本身才能获得描述。它未在任何列表中使用,因此不会在 XML 中返回。
您始终可以创建一个列表扩展器以将此信息添加到列表中,但请尝试对此保持聪明,因为每次调用 GetList 时都会执行此扩展器。
不会让您不必打开列表中的每个关键字,但您将在服务器端执行此操作(例如使用Core Service/NetTcp),这可能比使用Anguilla打开每个关键字更容易,更快。
在这种情况下,我只需要一个关键字,所以我只需从CMS中获取它。 在安圭拉获得一个对象有点奇怪,这是代码:
-
在主代码区域中:
var selectedKy = $models.getItem("TcmUriOfKeywordHere"); if (selectedKy.isLoaded()) { p.selectedKy = selectedKy; this.onselectedKyLoaded(); } else { $evt.addEventHandler(selectedKy, "load", this.onselectedKyLoaded); selectedKy.load(); }
值得注意的是,我如何将关键字存储在项目的属性中,因此我可以在
onselectedKyLoaded
函数中获取它 -
加载项后调用的函数
ContentBloom.ExampleGuiExtension.prototype.onselectedKyLoaded = function (event) { var p = this.properties; var selectedDescription = p.selectedKy.getDescription(); // do what you need to do with the description :) };
我解决了这个问题,感谢这里的答案:https://stackoverflow.com/a/12805939/1221032 - 干杯努诺:)