【问题标题】:How to get TCM URI of a category for KeywordFieldDefinitionData type fields?如何获取 KeywordFieldDefinitionData 类型字段的类别的 TCM URI?
【发布时间】:2013-01-09 02:28:17
【问题描述】:

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

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

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

我可以在 Reference.cs 类中看到 Category 和 CategoryFields 属性(在给出对核心服务的引用时自动生成)但是 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); }
    }

以上都行不通,请各位大侠分析一下再回复。

提前致谢!

【问题讨论】:

  • 我是否正确理解您想要获取关键字所在类别的 ID(从组件中的关键字字段中读取关键字)?
  • 有趣的问题,我们是否有兴趣提交Area 51 Tridion specific proposal。如果有时间,请使用同一个 SO 帐户注册。

标签: tridion tridion-core-services


【解决方案1】:

您需要读取每个SchemaField定义数据并检查Type是否为KeywordFieldDefinitionData,然后获取Category信息。请参阅下面的示例 sn-p。

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;
   }
}

【讨论】:

    【解决方案2】:

    希望下面的代码解决了你的问题

     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 信息,并从 keys 对象中获取所有关键字信息

    【讨论】:

    • 我认为问题是关于核心服务而不是 TOM.NET。他们还想从关键字中获取类别 URI。此代码显示使用其 URI 获取类别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多