понедельник, 17 ноября 2008 г.

Телефонный справочник. Синхронизация с AD

Составить телефонный справочник можно, как оказалось, многими способами.
1. Получать данные из скрытого списка User Information List.

SPList userlist = SPContext.Current.Web.SiteUserInfoList;
DataTable dt = userlist.Items.GetDataTable();

Однако есть одно неудобство - для того, чтоб сотрудник оказался в этом списке, его нужно добавить в пользователей сайта, что не всегда корректно.

2. Можно получать их из UserProfile. Это данные которые появляются после импорта профилей зи внешних источников (например, AD)
using (SPSite site = SPContext.Current.Site)
{
UserProfileManager mgr = new UserProfileManager(ServerContext.GetContext(site));
foreach (UserProfile profile in mgr)
{
Console.Writeline (
profile["PreferredName"].Value +
profile["WorkPhone"].Value +
profile["CellPhone"].Value)
}
}
Получить конечно можно, однако, просмотр профилей доступен только администраторам, поэтому как ни крути создавать свой список нужно (или воспользоваться стандартным справочником контактов)
3. Ручная синхронизация со справочником контактов базы импортированных профилей.
void btnSync_ServerClick(object sender, EventArgs e)
{
try
{
SPList list = SPContext.Current.Site.OpenWeb().Lists["Справочник контактов"];
SPListItemCollection listItems = list.Items;
SPListItem item;

while (listItems.Count != 0)

listItems.Delete(0);

using (SPSite site = SPContext.Current.Site)
{
UserProfileManager mgr = new UserProfileManager(ServerContext.GetContext(site));
foreach (UserProfile profile in mgr)
{
if (profile["LastName"].Value != null)
{
item = listItems.Add();

item["Title"] = profile["LastName"].Value;
item["FirstName"] = profile["FirstName"].Value;
item["Company"] = profile["Department"].Value;
item["JobTitle"] = profile["Title"].Value;
item["WorkPhone"] = profile["WorkPhone"].Value;
item["CellPhone"] = profile["CellPhone"].Value;
item["Email"] = profile["WorkEmail"].Value;

item.Update();
}
}
}
}
catch (Exception Exc)
{
throw new Exception("onbtnSyncClick ошибка: " + Exc.Message);
}
}

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