Показаны сообщения с ярлыком sharepoint. Показать все сообщения
Показаны сообщения с ярлыком sharepoint. Показать все сообщения

вторник, 1 июня 2010 г.

Контакты в Sharepoint

Многим известен такой неплохой продукт, как Microsoft Sharepoint Service (он же WSS). Внешне вполне привлекательный и удобный инструмент становится крайне несговорчивым, когда знакомишься с ним поближе и пытаешь выдавить из него хоть чуточку полезного функционала. Вот и я столкнулся с тем, что надо бы как-то удобно организовать доступ к информации о пользователях ЗАО "Тюменьнефтегазпроект" посредством WSS, но как?

Как обычно в таком случае поступают все айтишники, сперва изучил встроенные возможности. Поплевался в сторону и начал искать альтернативные решения в google'е. Опять холостой выхлоп. Найденные решения или скупы на функционал или платные, а за такую фишку я сам платить не согласен и руководство убеждать в необходимости ее купить также не намерен. В итоге, как всегда, взял в руки скальпель и начал ваять новую веб-часть.

Пример отображения веб-части с результатом поиска по фамилии:

Требования к веб-части у меня были достаточно простые или скорее, очевидные, а именно:
  • получение списка пользователей из Active Directory;
  • отображение списка в виде дерева;
  • отображение списка в виде списка (простите за такой оборот);
  • поиск по фамилии, имени, отчеству;
  • отображение максимально полной информации о пользователе.
Дополнительными требованиями выдвинул:
  • возможность отображать информацию о пользователе выборочно, например, в зависимости от прав доступа;
  • возможность интегрироваться в внешними приложениями посредством xml/xsl.

Как это работает
Прежде всего, веб-часть проверят все входные параметры, пути к XSL файлам, параметры LDAP запроса к серверу и т.п. При удачной проверке обращается к домену и запрашивает у него информацию о пользователях. Сохраняет все в XML файле, а потом натравливает на него XSL файлы для преобразования в удобоваримый вид.

Что для этого нужно
Веб-часть просит большое количество входных параметров, большая часть которых прописана изначально и половина из них нарочно неверно. Начнем по-порядку, исходными параметрами для веб-части являются:
  • Атрибуты
  • Фильтр
  • Ключи
  • Домен
  • Имя пользователя
  • Пароль пользователя
  • Период обновления
  • Ориентация
  • Высота дерева
  • Ссылка на XML файл
  • Ссылка на XSL файл для дерева
  • Ссылка на XSL файл для контакта
  • Ссылка на XSL файл для списка
  • Ссылка на CSS файл
Отдельно остановлюсь на каждом параметре.
Атрибуты - это атрибуты объекта User, которые будут запрошены LDAP запросом.
Фильтр - это фильтр LDAP запроса, чтобы не выбрать лишние объекты.
Ключи - это ключевые атрибуты, по которым будет построено дерево пользователей (они передаются в XSL файл).
Домен - это адрес домена, можно указать и порт по которому надо обращаться к домену.
Имя пользователя - имя пользователя от имени которого будет выполнен запрос к домену (чтобы не давать лишние права системным пользователям).
Пароль пользователя - пароль пользователя от имени которого будет выполнен запрос к домену.
Период обновления - это период обновления XML файла в часах, т.е. если с момента последнего обновления XML файла не прошло указанное количество часов, то он не будет обновляться, а просто возьмет те данные, которые в нем уже есть.
Ориентация - это возможность спланировать размещение элементов веб-части, обычно Left2Right.
Высота дерева - это высота дерева в пикселях, по сути, от нее зависит и высота веб-части.
Ссылка на XML файл - это относительный путь к XML файлу в котором будет храниться результат LDAP запроса. К файлу надо дать соответствующие права доступа всем пользователям, которые заходят на сайт (в архиве файл AlxdDirectory.xml).
Ссылка на XSL файл для дерева - это относительный путь к XSL файлу, который преобразует XML файл в подходящий для формирования дерева формат (в архиве файл AlxdTreeView.xsl).
Ссылка на XSL файл для контакта - это относительный путь к XSL файлу, который преобразует XML файл в карточку контакта (визитку). В нем можно фантазировать без ограничений, например я разместил в нем даже ссылку на фотографию сотрудника (в архиве файл AlxdContact.xsl).
Ссылка на XSL файл для списка - это относительный путь к XSL файлу, который преобразует XML файл в выпадающий список (в архиве файл AlxdSelect.xsl).
Ссылка на CSS файл - это относительный путь к CSS файлу, который позволяет оформить веб-часть по своему усмотрению (в архиве файл AlxdContactNavigator.css).
Все XML, XSL и CSS, а также JPG файлы (все есть в архиве) лучше разместить на сервере IIS в одной папке, например, мне было удобно разместить по адресу:
Указанные выше адреса соответствуют путям:
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\AlxdContactNavigator\AlxdDirectory.xml
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\AlxdContactNavigator\AlxdTreeView.xsl
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\AlxdContactNavigator\AlxdContact.xsl
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\AlxdContactNavigator\AlxdSelect.xsl
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\AlxdContactNavigator\AlxdContactNavigator.css
В эту же папку разумно разместить дополнительные файлы, которые могут быть востребованы XSL преобразованиями, например, картинки.

Преимущества веб-части:
1. Бесплатно.
2. Позволяет настроить запрос и отображение как угодно сложно посредством XSL.
3. Позволяет интегрироваться во внешние системы, например, использовать данные из базы данных автоматического турникета на проходной.

Недостатки веб-части:
1. Пока что не умеет соединяться с другими веб-частями.
2. Нет механизма оповещения о приходе/уходе сотрудника.
3. Может медленно работать, если поставить маленький период обновления (только зачем?) или база пользователей весьма большая.

Установка веб-части AlxdContactNavigator осуществляется с помощью bat'ника setup.bat с ключом -i. Удаление - ключ -u.

Настройка веб-части сводится к указанию правильных входных параметров. Например, есть домен dmn.local из которого надо извлечь информацию о пользователях.
Во-первых: в параметрах веб-части атрибуты, фильтр, ключи можно изначально не трогать, сразу вписать домен: LDAP://dmn.local.
Во-вторых: обязательно указать имя пользователя от имени которого будет стучаться в домен, иначе ничего не получим, например, userlist и пароль пользователя - 123.
В-третьих: по умолчанию все пути к XML, XSL и CSS ложные, скажем, c:\AlxdDirectory.xml, поэтому их сразу надо поменять, например, на /AlxdContactNavigator/AlxdDirectory.xml и т.д.

Пример заполнения параметров веб-части:

В итоге получил страничку WSS на которой отражается веб-часть с деревом контактов, выбирая который, получаю подробную визитку выбранного пользователя с фотографией.


У нас, помимо простого отражения дерева контактов, возникла еще одна потребность, отразить присутствие или отсутствие сотрудника на работе. Данные об этом хранятся в базе автоматического турникета. Мой коллега написал сервис, который из базы турникета перегоняет данные в базу MS SQL. А потом уже из этой базы формирует XML файл PassThrough.xml на текущий день. Мне осталось только дописать в XSL код, который извлекает данные из доп. XML файла и консолидирует их. В итоге, все пользователи изначально отображаются синими иконками, если пришел на работу - зелеными, если ушел - красными. Наглядно. Удобно. Просто.
Пример XSL консолидирующего данные из двух XML файлов также вложен в архив.

Upd: Исходник AlxdContactNavigator.source.zip 

вторник, 18 мая 2010 г.

Сводная таблица в Sharepoint

Неделю или две назад столкнулся с необходимостью построить сводную таблицу на основании данных хранящихся в списке (SPList) Sharepoint. Погуглил, но ничего не нашел. В основном все сводится к теме: купите себе MOSS, поднимите Excel Service и публикуйте сводные таблицы посредством Microsoft Excel. При этом честно предупреждают, что есть свои нюансы и баги и т.п.

Пример исходного списка:



Короче говоря, опять пришел к выводу, что без хирургического вмешательства, ну никак. Закатал рукава и начал писать свою веб-часть (WebPart). Принцип работы веб-части простой: обратиться к списку указанного сайта, взять из него данные с помощью представления, обработать посредством XSLT и вывести результат в окно браузера.

Исходными данными для веб-части являются:

  • сайт
  • список
  • вид
  • имя поля, значения которого будут первой колонкой (fixed column)
  • имя поля, значения которого будут в шапке таблицы (header)
  • путь к XSL файлу
  • путь к CSS файлу
  • отображать нулевые значения (да/нет)
  • отображать абсолютные значения (да/нет)
  • отображать значения в % (да/нет)
Отдельно остановлюсь на каждом параметре.
Сайт - это сайт Sharepoint'а на котором следует искать список, например, http://server/oit.
Список - это имя списка на соответствующем сайте Sharepoint'а, например, Задачи.
Вид - это имя вида списка, чтобы можно было фильтровать и сортировать данные списка перед формированием сводной таблицы, например, Завершенные.
Имя поля для первой колонки - это имя поля списка, значения которого проецируются в первую колонку, например, Состояние.
Имя поля для первого ряда - это имя поля списка, значения которого проецируются в первый ряд, например, Кому назначено.
Путь к XSL файлу - это путь к файлу data.xsl, который находится в архиве.
Путь к CSS файлу - это путь к файлу data.css, который находится в архиве.
Файлы data.xsl и data.css должны быть размещены на сервере IIS в папке, к которой можно обратиться по URL, например, мне было удобно разместить по адресам:
http://server/_layouts/1049/styles/AlxdPivoteOne/data.xsl
http://server/_layouts/1049/styles/AlxdPivoteOne/data.css
Указанные выше адреса соответствуют путям:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1049\STYLES\AlxdPivoteOne\data.xsl
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1049\STYLES\AlxdPivoteOne\data.css
Отображать нулевые значения - это флаг отвечающий за отображение нулевых значений в сводной таблице, если он не установлен, то ноль не отображается.
Отображать абсолютные значения - это флаг отвечающий за отображение количественных значений по каждой колонке или ряду.
Отображать значения в % - это флаг отвечающий за отображение относительных значений по каждой колонке или ряду.
Если установлены флаги для отображения абсолютных и относительных значений, то значения отображаются в виде 10[12%].

Пример полученной сводной таблицы:


Преимущества веб-части:
1. Формирование сводной опирается на XSLT преобразование описанное в XSL файле, а следовательно любой администратор или программист средней руки может его дописать или поправить.
2. Работает с полями в которых разрешены множественные значения, т.е. если в поле хранятся несколько значений, то веб-часть раскладывает их на отдельные записи и обрабатывают каждую в отдельности. Например, если задача назначена двум сотрудникам, то при обработке она будет восприниматься как две задачи - одна на каждого.
3. Поддержка Lookup полей и отображение ссылок на значения Lookup полей.

Недостатки веб-части:
1. Отсутствует разбивка на листы.
2. Отсутствует группировка по значениям.

Установка веб-части AlxdPivotOne осуществляется с помощью bat'ника setup.bat с ключом -i. Удаление - ключ -u.

P.S. Подменил файл с веб-частью, т.к. забыл в него вложить data.css и data.xsl.
P.S. Подменил файл с веб-частью, т.к. исправил ошибку при работе с большими списками, в частности, если представление списка возвращало ограниченное количество записей (обычно 100), то сводная таблица использовала тоже только 100 записей, а остальные отбрасывала. Теперь при формировании сводной таблицы используются все записи не зависимо от того, сколько их возвращает представление (спасибо Void за найденную ошибку).