Как получить URI TCM категории для полей типа KeywordFieldDefinitionData?
Я хочу получить TCM URI категории для полей типа KeywordFieldDefinitionData.
Я использую код ссылки ниже, чтобы прочитать поля метаданных компонента: -
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
Я вижу свойства Category и CategoryFields в классе Reference.cs (автоматически генерируется при указании ссылки на основной сервис), но в классе 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 ответа
Вам нужно прочитать все данные определения SchemaField и проверить, является ли тип 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;
}
}
Я надеюсь, что приведенный ниже код решил вашу проблему
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 и всю информацию о ключевых словах из объекта keys