我想为KeywordFieldDefinitionData类型字段获取类别的TCM。
我正在使用以下链接的代码来读取组件的元数据字段:
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); }
}即使上面也不起作用,请你们中的任何一个人分析一下并回复。
提前感谢!
发布于 2013-01-25 22:00:35
您需要读取每个类别定义数据,并检查类型是否为KeywordFieldDefinitionData,然后获取SchemaField信息。请看下面的示例代码片段。
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;
}
}发布于 2013-01-25 15:12:58
我希望下面的代码解决了你的问题
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对象获取所有关键字信息
https://stackoverflow.com/questions/14516488
复制相似问题