SharePoint 2007. Свой контрол на панели свойств веб-парта

При разработке своих веб-частей для SharePoint'а, зачастую необходимо использовать свои свойства для гибкой и доступной обычным пользователям конфигурации поведения этих веб-частей. Можно конечно использовать стандартный функционал (просто пометить атрибутами свойства веб-части), но результат больно скуден (TextBox для чисел и строк и DropDown для Enum'ов). И здесь на помощь нам приходит следующая хитрость.

Создаем ToolPart для веб-части

Для реализации нам понадобиться сам веб-часть. Условимся, что он уже у нас есть. Также создадим новый класс, который и будет нашим ToolPart'ом. Итак поехали:

В классе веб-части, унаследованного от Microsoft.SharePoint.WebPartPages.WebPart добавляем метод GetToolParts:

public override ToolPart[] GetToolParts()
{
  // Создаем коллекция ToolPart'ов и заполняем её необходимыми классами
  var toolParts = new List<ToolPart>
            {
              new ZhukPointToolPart(),
              new ZhukPointToolPart("Custom Toolpart 2")
            };
  // Берем стандартный набор ToolPart'ов
  // Если они не нужны - просто убираем строку из метода
  var tp = base.GetToolParts();
  // К нашим ToolPart'ам добавляем стандартные
  // Что к чему добавлять зависит от требования к порядку отрисовки
  // Делаем так, чтобы наши ToolPart'ы были вверху
  toolParts.AddRange(tp);
  // Возвращаем массив классов
  return toolParts.ToArray();
}

В примере я добавил в коллекцию ToolPart'ов два одинаковых класса. Сами классы, их количество и порядок роли не играют.

Теперь создадим сам класс ToolPart'а, унаследовав его от Microsoft.SharePoint.WebPartPages.ToolPart:

namespace ZhukPoint.Portal2007.WebControls.ToolParts
{
  public sealed class ZhukPointToolPart : ToolPart
  {
    public ZhukPointToolPart()
      : this("Custom ToolPart")
    {
 
    }
 
    public ZhukPointToolPart(string titleText)
    {
      Title = titleText;
    }
 
    /// <summary>
    /// Наша веб-часть, к которой будет "привязан" ToolPart
    /// </summary>
    private ZhukPointCustomWebPart WebPart
    {
      get
      {
        return WebPartToEdit as ZhukPointCustomWebPart;
      }
    }
 
    /// <summary>
    /// Контрол, который мы будем добавлять в ToolPart
    /// </summary>
    private DropDownList listSelector;
 
    protected override void CreateChildControls()
    {
      base.CreateChildControls();
      if (WebPart == null) return;
      listSelector = new DropDownList();
      // Здесь ваша логика
      Controls.Add(listSelector);
    }
 
    /// <summary>
    /// Метод, используемый для сохранения изменений в веб-части
    /// </summary>
    public override void ApplyChanges()
    {
      base.ApplyChanges();
      if (WebPart == null) return;
      // Здесь ваша логика
      WebPart.SelectedValue = listSelector.SelectedValue;
    }
  }
}

Вот и все. Осталось только "прикрутить" вашу логику. Результат будет примерно таким:

Кастомный ToolPart для веб-части SharePoint

Кастомный ToolPart для веб-части SharePoint
Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2010. Локализация SiteDefinition

SharePoint 2010. Локализация SiteDefinition