SDL Tridion GetListKeywords using Anquilla Framework



我正在编写一个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中获取它。 在安圭拉获得一个对象有点奇怪,这是代码:

  1. 在主代码区域中:

       var selectedKy = $models.getItem("TcmUriOfKeywordHere");
       if (selectedKy.isLoaded()) {
         p.selectedKy = selectedKy;
         this.onselectedKyLoaded();
       } else {
         $evt.addEventHandler(selectedKy, "load", this.onselectedKyLoaded);
         selectedKy.load();
       }
    

    值得注意的是,我如何将关键字存储在项目的属性中,因此我可以在onselectedKyLoaded函数中获取它

  2. 加载项后调用的函数

     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 - 干杯努诺:)

最新更新