Выложил шаблон проекта по разработке на C# рабочего процесса для Шарепойнта. Включены средства работы с файлом конфигурации, с почтой (в т.ч. внешней типа gmail.com), средства установки, обновления и др.
среда, марта 24, 2010
пятница, мая 22, 2009
Горе от ума
Неплохой набор средств для изготовления РП в Sharepoint Designer содержит, в частности, средства для манипуляций разрешениями на элементы списков (библиотек). Эти средства вполне успешно были применены в проекте год назад, однако при попытке использовать их на сервере комьюнити выяснилось, что назначение разрешений работает только в случае Windows-пользователей. Для пользователей с LiveID-аутентификацией назначение разрешений заканчивается ошибкой .
Причина обнаружилась в фрагменте кода, выполняющем поиск пользователя по имени.
if (SPUtility.IsLoginValid(site, userOrGroup)) {
myUser = site.RootWeb.EnsureUser(userOrGroup);
}
Понятно, что авторы при помощи метода IsLoginValid пытались избавиться от обработки исключений , но в Шарепойнте так много действий построено на обработке исключений, что эта попытка выглядит ловлей мелких насекомых. Хуже того, IsLoginValid, похоже, не находит LiveID-пользователей вовсе
. Выяснилось, что вполне можно было обойтись и без этого метода:
try {
myUser = site.RootWeb.EnsureUser(userOrGroup);
} catch {}
В этом случае оба типа пользователей благополучно находятся и весь процесс назначения разрешений работает как ожидалось.
суббота, марта 22, 2008
Custom Workflow Activities
На Codeplex нашёлся довольно симпатичный проект, в котором привлек внимание компонент "Copy List Item Extended Activity" для копирования элементов списков (потребовалось нечто похожее для организации интеграции данных с разных узлов). При внимательном рассмотрении выяснилось, что основная "фича" - перезапись (OverWrite) скопированных данных после редактирования оригинала - не работает. Авторы не поскупились приложить исходники, из которых выяснилось, что соответствующего кода вовсе нет (спешили, наверное ).
Пришлось вникать и доделывать/переделывать - заодно пришлось переделывать все xml-описания (изобретатели забыли положить свой ключ шифрования ) и установщик (приложенный сборщик пакетов почему-то не пожелал работать как задумано
). Кое-что перевёл на русский.
В итоге стало работать как надо, правда, обнаружился сюрприз, который больше от Microsoft, нежели от авторов проекта.
Доработанный вариант можно взять здесь.
Сюрприз от Sharepoint
На одном из подшефных серверов перестали работать workflows (РП), сделанные при помощи Sharepoint Designer'а - не запускаются и всё тут... Новые РП при сохранении вызывают ошибки компиляции с отказом их принять (Errors were found when compiling the workflow.The workflow files were saved but cannot be run.Unexpected error on server associating the workflow). Много чего проделал - переустановил .NET'ы (попутно мусору вычистил немало), на виртуальном сервере попытался получить похожее поведение, перечитал все найденные материалы с описанием таких симптомов (их оказалось не так и много) - всё тщетно .
Рецепт нашёлся здесь. Спасибо, Jason Nadrowski
. Механизм сюрприза такой: в систему раньше устанавливал пакет "возможностей", который нужно активировать для каждого приложения (на сервере делалось для трёх). Во время активации в файлы web.config всех приложений добавляется без проверки её там наличия запись в секцию <System.Workflow.ComponentModel.WorkflowCompiler>, где описаны сборки, которые должны загружаться при компиляции SPD-workflows. При деактивации и/или удалении feature запись удаляется, но одна из каждого конфига. В итоге в файлах web.config может остаться (а может и не остаться) любое количество записей о сборках, которых может в системе уже не быть. Поэтому компилятор и ругается.
Неясно, правда, почему не работают ранее скомпилированные процессы, не имеющие отношения к отсутствующей сборке, ведь процессы, скомпилированные в Visual Studio, вполне себе работают. В общем, очередной привет от благодетелей .
понедельник, октября 01, 2007
WorkFlow на WSS 2007
Произвёл НИР по переносу алгоритма поиска страниц с заданными типами веб-частей, имеющих заданную информацию в параметрах. Для WSS 2003 алгоритм был реализован в виде консольной утилиты hseDigger, запускаемой системным планировщиком. С появлением WorkFlow такая реализация прямо таки просится в переделку.
В итоге (при использовании Visual Studio 2005/2008, после тщательного изучения достаточно хорошего руководства), в общем-то, реализовать алгоритм в технике WorkFlow получилось. Получилось даже соорудить установщик в виде .wsp-файла. Но эмоции-то никуда не денешь
Что получилось не так (или вовсе не получилось):
- Конфигурирование параметров работы процесса (WF) (для утилиты делалось через файл конфигурации) делать неизвестно как. Точнее, известно - через ASP.NET association-форму, вызываемую при редактировании параметров WF и указанную в атрибуте AssociationUrl="_layouts/formName.aspx". Но как эту форму делать и как эти параметры сохранить в WF - неведомо, найти полезной информации по этому поводу не удалось, а имеющаяся информация по изготовлению похожих initialization-страниц оказывается малополезной). В итоге получилась "некрашенная" страница (ХЗ, как в Студии подцепить и попользоваться Шарепойнтовскими стилями), содержащая код прямо в теле (указания типа CodeBehind и Inherits как-то вовсе не воспринимаются
) и сохраняющая данные в Properies узла, на котором размещён список, обслуживаемый РП. Соответственно, в WF в процедуре onActivated_Invoked производится считывание данных из этих "свойств".
- "Отложенное" выполнение тяжёлой процедуры обшаривания деревьев Шарепойнта реализовать не удалось. Ввёл параметры начала и окончания рабочего дня и пытался использовать DelayActivity, но в итоге выяснилось, что больше нескольких минут задержки никому получить не удалось (такая уж вот конструкция у этой activity
). В итоге при попадании на "рабочее время" сделал запуск рабочей actyvity с пониженным приоритетом:
Thread.CurrentThread.Priority = ThreadPriority.Lowest; - Удалённая отладка (когда Студия с отладчиком на одном компьютере, а Шарепойнт с WF - на другом, физическом или виртуальном) не работает совсем - кто-то (что-то?) перекрывает доступ (access denied). Хотя все прочие типы объектов (утилиты, веб-части, веб-сервисы) отлажиаются нормально.
- Отладка получившейся association-страницы с кодом в теле страницы - вообще тёмный лес. Хорошо хоть, что отлаживать там особо нечего.
- Так и не нашёл, как в установщик запихнуть процедуру генерации нужного списка (может, искал не сильно упорно...).
В общем, работать, конечно, с WorkFlow можно, но сыровато... Становится уже фирменным стилем MS: первая версия - эксперимент на пользователях.