пятница, 30 марта 2012 г.

Redirect из EventReceiver’а

Как оказалось, это довольно частая задача. Но практически нигде не разрешённая.
Итак, у нас есть обработчик события создания элемента списка (ItemAdding); и нам необходимо сразу после создания перейти на другую страницу.

На первый взгляд задача простая: у нас есть и «Page.Response.Redirect(…)» и «SPUtility.Redirect(…)».
Но… Для первого случая у нас нет объекта Page! А второй метод требует указания HttpContext, который в обработчиках события пуст.

Решение!
Как всегда хак! :)

Как известно, создание элементов списка можно отменять (для этого обработчики событий видимо изначально и создавались). При этом, отменяя, мы можем указать адрес, на который нам следует перейти (чтобы посмотреть причину отмены) (доступно только в SharePoint 2010).
То есть, мы можем отменить создание элемента, и сделать искомый редирект на нужную страницу. Нам нужно только пересоздать отменённый элемент. Вот тут и кроется ограничение этого метода – у нас нет доступа к вложениям элемента при его создании.

Пример кода реализации данного метода:

public override void ItemAdding(SPItemEventProperties properties)
{
    base.ItemAdding(properties);

    //Отключаем сам обработчик, чтобы избежать зацикливания
    EventFiringEnabled = false;

    var list = properties.List;

    //Создаём элемент списка и заполняем его свойствами из только что созданного пользователем элемента
    var ni = list.Items.Add();

    //Выбираем все созданные пользователем свойства доступные для редактирования, а также свойство Title (Название)
    foreach (var ff in list.Fields.Cast<SPField>().Where(spf => !spf.ReadOnlyField && (spf.FromBaseType == false || spf.InternalName == "Title")))
        ni[ff.InternalName] = properties.AfterProperties[ff.InternalName];
    ni.SystemUpdate();

    //Включаем обработчик
    EventFiringEnabled = true;

    //Отменяем создание элемента созданного пользователем
    properties.Cancel = true;
    //Устанавливаем действие при отмене - переход на другую страницу
    properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
    //Устанавливаем адрес страницы, на которую делаем переход. В данном случае - страница редактирования только что созданного элемента
    properties.RedirectUrl = string.Format("/{0}?ID={1}", properties.List.Forms[PAGETYPE.PAGE_EDITFORM].Url, ni.ID);
}

Событие ItemAdded для этого метода не подходит, т.к. там элемент списка уже создан и отменить это действие уже нельзя.

пятница, 2 марта 2012 г.

Обзор средств разработки для SharePoint в Visual Studio 11 Beta


Visual Studio 11 Beta включает набор новых и улучшенных существующих средств SharePoint Developer Tools для разработки для SharePoint 2010, позволяющих увеличить вашу продуктивность.
Рассмотрим их по порядку.

SharePoint List Designer для списков SharePoint и типов содержимого
Теперь у вас есть возможность создавать ваши списки SharePoint и типы содержимого в визуальном редакторе.

Шаблон для создания Site Column
Создание столбцов сайта стало проще. Для этого создан специальный шаблон, который генерирует GUID для вашего столбца и позволяет вам установить для него наиболее используемые атрибуты.
(P.S. Я не знаю ни одного человека, который бы использовал столбцы сайта :))

Шаблон веб-части Silverlight
Новый шаблон веб-части Silverlight позволит вам сфокусироваться на дизайне и программировании Silverlight, не думая о самой веб-части. Он поможет вам добавить приложение Silverlight в ваше решение SharePoint и развернуть его на сайте в один шаг.

Поддержка визуальных веб-частей в изолированных (sandboxed) решениях
Больше нет ограничений, требующих использования визуальных веб-частей только в решениях уровня фермы.

Возможность публикации решений SharePoint на удалённые сервер SharePoint
Теперь вы можете публиковать решения на удалённые сервера SharePoint с помощью Visual Studio! Также у вас есть возможность выкачивать пакеты SharePoint из удалённой системы.

Утилиты профилирования для тестирования производительности решений SharePoint
Вам будет проще узнать узкие места в производительности ваших решений SharePoint.

Улучшенная поддержка IntelliSense в изолированных (sandboxed) решениях
Теперь вы сможете полностью доверять IntelliSense при разработке изолированных решений, т.к. IntelliSense отображает только подходящие для вашего проекта методы и свойства. К примеру, вам не нужно думать какие методы и свойства можно использовать в изолированных решениях.

Улучшенная поддержка отладки JavaScript и IntelliSense для JavaScript
Вы сможете писать код JavaScript в ваших решениях SharePoint с полной поддержкой IntelliSense, а также пользоваться отладкой JavaScript кода в Visual Studio. Вы даже сможете ссылаться на JavaScript-файлы, расположенные в базе данных содержимого SharePoint.

Реорганизация шаблонов проектов и элементов SharePoint
Last but not least (последнее по списку, но не по значению): шаблоны проектов и элементов SharePoint теперь организованы более логично, так что теперь вы сможете без труда найти то что вам нужно.

Шаблоны проектов для SharePoint 2007 (для рабочих процессов) теперь удалены из списка проектов Visual Studio 11. Если вы захотите продолжить использование данных проектов, то вам необходимо мигрировать их в SharePoint 2010.

Улучшенный диалог добавления ссылок
Свершилось! Наконец-то в диалоге добавления ссылок появился поиск. Из нововведений также стоит отметить группировку по категориям и указание библиотек, ссылки на которые уже присутствуют в проекте.



Ссылка на пошаговые руководства по описанным нововведениям Visual Studio 11.

Нововведения в Visual Studio 11 Beta.

Наслаждайтесь!

Предварительные сведения о SharePoint 15

Всех поздравляю с наступлением новой эры! Эры Office 15 и, в частности, SharePoint 15!
Готовимся и ждём (скрестив пальцы)...

Описание нововведений:
Что нового в SharePoint 15