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;
}
Другие вопросы по тегам