如何获取KeywordFieldDefinitionData类型字段的类别的TCM URI?

时间:2013-01-25 06:24:38

标签: tridion tridion-core-services

我想获取KeywordFieldDefinitionData类型字段的类别的TCM URI。

我使用下面链接的代码来读取组件的元数据字段: -

https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata

我可以在Reference.cs类中看到Category和CategoryFields属性(在给予核心服务的refence时自动生成)但是在Field类(在上面的code.google链接中定义)中没有定义属性来访问Category和CategoryFields属性。我尝试按以下方式定义属性: -

     public System.Reflection.PropertyInfo Category
    {
        get { return definition.GetType().GetProperty("Category", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); }
    }

即使上面没有工作,你们中的任何人都请分析一下并回复。

提前致谢!

2 个答案:

答案 0 :(得分:4)

您需要读取每个SchemaField定义数据并检查Type是否为KeywordFieldDefinitionData,然后获取类别信息。请参阅以下示例代码段。

SchemaFieldsData schemaFields = (SchemaFieldsData)_client.ReadSchemaFields(
               "tcmuriofschema", true, readOptions);
foreach (ItemFieldDefinitionData schemaField in schemaFields.Fields) {
   switch (schemaField.GetType().Name) {
      // handle other fields..
      // CategoryLink Fields
      case "KeywordFieldDefinitionData":
               KeywordFieldDefinitionData keywordTextSchemaField = (KeywordFieldDefinitionData)schemaField;
               string LinkedCategoryTitle =  keywordTextSchemaField.Category.Title;
               string LinkedCategoryId = keywordTextSchemaField.Category.IdRef;
               break;
      default:
               break;
   }
}

答案 1 :(得分:0)

我希望以下代码解决了您的问题

 Publication publication = GetPublication();

            TcmUri uri = new TcmUri(int.Parse(_itemId), ItemType.Category, publication.Id.ItemId);
            _session = engine.GetSession();
            Category cat = new Category(uri, _session);

            Log.Debug("the uri is " + uri);
            Log.Debug("the cat is " + cat);

            Filter filter = new Filter();
            //filter.Conditions["IsRoot"] = true; // This works with Tridion 2011 only!

            List<Keyword> keys = cat.GetKeywords(filter) as List<Keyword>;

在上面的代码中,您可以从Cat对象获取Category信息,从key对象

获取所有关键字信息