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

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

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

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

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

В примере я добавил в коллекцию ToolPart'ов два одинаковых класса. Сами классы, их количество и порядок роли не играют.
Теперь создадим сам класс ToolPart'а, унаследовав его от Microsoft.SharePoint.WebPartPages.ToolPart:

  1. namespace ZhukPoint.Portal2007.WebControls.ToolParts
  2. {
  3.   public sealed class ZhukPointToolPart : ToolPart
  4.   {
  5.     public ZhukPointToolPart()
  6.       : this("Custom ToolPart")
  7.     {
  8.  
  9.     }
  10.  
  11.     public ZhukPointToolPart(string titleText)
  12.     {
  13.       Title = titleText;
  14.     }
  15.  
  16.     /// <summary>
  17.     /// Наша веб-часть, к которой будет "привязан" ToolPart
  18.     /// </summary>
  19.     private ZhukPointCustomWebPart WebPart
  20.     {
  21.       get
  22.       {
  23.         return WebPartToEdit as ZhukPointCustomWebPart;
  24.       }
  25.     }
  26.  
  27.     /// <summary>
  28.     /// Контрол, который мы будем добавлять в ToolPart
  29.     /// </summary>
  30.     private DropDownList listSelector;
  31.  
  32.     protected override void CreateChildControls()
  33.     {
  34.       base.CreateChildControls();
  35.       if (WebPart == null) return;
  36.       listSelector = new DropDownList();
  37.       // Здесь ваша логика
  38.       Controls.Add(listSelector);
  39.     }
  40.  
  41.     /// <summary>
  42.     /// Метод, используемый для сохранения изменений в веб-части
  43.     /// </summary>
  44.     public override void ApplyChanges()
  45.     {
  46.       base.ApplyChanges();
  47.       if (WebPart == null) return;
  48.       // Здесь ваша логика
  49.       WebPart.SelectedValue = listSelector.SelectedValue;
  50.     }
  51.   }
  52. }

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


Поделиться

Коментарии