SharePoint: программно получить категории каталога сайта
Я ищу способ получить категории, определенные в каталоге сайта портала программно. Насколько я мог видеть, категории представлены в виде полей типа "выбор" с несколькими значениями, которые пользователь может выбрать в форме.
Моя проблема в том, как я могу отличить поля категории от обычных полей, таких как "заголовок" или "автор". На самом деле я не хочу жестко кодировать имена категорий, но хочу загружать их динамически. Я думаю, что должны быть некоторые критерии, поскольку стандартная веб-часть на странице каталога сайта также загружает категории динамически.
К сожалению, я не смог найти много информации об этой проблеме.
Пока Фло
2 ответа
Хорошо, я выразил себя не ясно. Я знаю, как получить поле формы поля схемы. Но я думаю, что после вашего поста я сам получил ответ на свой вопрос.
Что я хотел знать, так это то, что я мог предположить, что каждое поле типа "выбор" в списке "веб-сайтов" каталога сайта представляет категорию, которой может быть присвоен сайт? Таким образом, каждое поле категории должно иметь тип "выбор"?
Чтобы получить все доступные категории, я должен пройтись по полям списка и искать поля, основанные на типе "выбор", верно?
ОБНОВИТЬ
Между тем, я думаю, что нашел ответ на свой вопрос. Столбец в списке веб-сайтов обрабатывается как категория каталога веб-сайта, если он является частью представления "категории". В общем случае столбцы категории не обязательно должны быть типа "выбор", хотя другие типы не имеют смысла в этом контексте.
Получить ссылку на SPWeb. Используйте SharePoint Manager (не обязательно, но приложение полезно), чтобы получить подробную информацию о нужном поле.
Этот код может получить список из полей xmlSchema. Примечание: закомментированный xml - это то, как выглядит мой собственный SchemaXml поля Category.
public static ArrayList GetCategory(SPWeb web)
{
ArrayList result = new ArrayList();
/* <?xml version="1.0" encoding="utf-16"?>
<Field ID="{6DF9BD52-550E-4a30-BC31-A4366832A87D}" Type="Choice" Group="_Hidden" Name="Category" DisplayName="Category" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Category">
<CHOICES>
<CHOICE>(1) Category1</CHOICE>
<CHOICE>(2) Category2</CHOICE>
<CHOICE>(3) Category3</CHOICE>
</CHOICES>
<Default>(2) Category2</Default>
</Field>*/
try
{
SPField catField = web.Fields[new Guid("6DF9BD52-550E-4a30-BC31-A4366832A87D")];
XmlDocument Doc = new XmlDocument();
Doc.LoadXml(catField.SchemaXml);
XmlNodeList Choices = Doc.SelectNodes("Field/CHOICES/CHOICE");
foreach (XmlNode Choice in Choices)
{
result.Add(Choice.InnerText);
}
}
catch (Exception ex)
{
result.Add("Failed: " + ex.Message);
}
return result;
}