Link blog.vitalyzhukov.ru

Блог переехал вот сюда: Blog.VitalyZhukov.ru

17 окт. 2010 г.

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

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


Что понадобится
Для реализации нам понадобиться сам веб-парт. Условимся, что он уже у нас есть. Также создадим новый класс, который и будет нашим 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;
        }
    }
}

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


Комментариев нет:

Отправить комментарий