Получение фотографии пользователя из SPUser с использованием объектной модели WSS
-
09-06-2019 - |
Вопрос
Я пытаюсь получить пользователя на фотографии пользователя Sharepoint с помощью объектной модели WSS 3.0.Я просматривал веб-страницы в поисках решений, но пока мне не удалось найти способ сделать это.Возможно ли это, и если да, то как?
Решение
Вот фрагмент кода, который должен помочь выполнить эту работу за вас.Возможно, вам потребуется выполнить дополнительную проверку, чтобы избежать каких-либо исключений (убедиться, что профиль действительно существует, убедиться, что URL-адрес изображения действительно существует, и т.д.):
//get current profile manager
UserProfileManager objUserProfileManager = new UserProfileManager(PortalContext.Current);
//get current users profile
UserProfile profile = objUserProfileManager.GetUserProfile(true);
//get user image URL
string imageUrl = (string)profile[PropertyConstants.PictureUrl];
//do something here with imageUrl
Другие советы
Если вы строго говорите о WSS 3.0 (а не MOSS), то у вас действительно нет глобальных профилей пользователей как таковых, но есть список скрытых сведений о пользователях в каждом семействе сайтов.Это не означает ничего из того, что есть в Microsoft.Офис.Пространства имен сервера доступны для вас.
Однако вы можете обновить список сведений о пользователе программно, если вам известен URL-адрес изображения пользователя.Пока вы работаете с какими-то повышенными привилегиями, вы должны иметь возможность манипулируйте этим списком точно так же, как вы можете с любым другим списком SharePoint.Имейте в виду, что этот список хорош только для семейства веб-сайтов, поэтому пользователям придется выполнять одно и то же обновление повсеместно, чтобы действительно иметь URL-адрес фотографии.Кроме того, пользователи не попадают в список сведений о пользователе, пока кто-то не назначит им какое-либо разрешение, поэтому не каждый пользователь в вашем домене будет там.
Самый простой способ справиться с этим, безусловно, заключается в том, что механизмом профиля пользователя является MOSS, но если это вариант, вопрос действительно следует обновить, чтобы задать вопрос о MOSS vs WSS.
Ах, вы должны использовать класс UserProfileManager.Более подробная информация здесь: http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager.aspx
Пример использования:
public override void ItemAdded(SPItemEventProperties properties)
{
// Get list item on which the event occurred.
SPListItem item = properties.ListItem;
// Set the Author Image field to the user's PictureURL if it exists.
using (SPWeb web = properties.OpenWeb())
{
// Author: {C32DB804-FF2D-4656-A38A-B0394BA5C931}
SPFieldUserValue authorValue = new SPFieldUserValue(properties.OpenWeb(), item[new Guid("{C32DB804-FF2D-4656-A38A-B0394BA5C931}")].ToString());
UserProfileManager profileManager = new UserProfileManager(ServerContext.GetContext(web.Site));
UserProfile profile = profileManager.GetUserProfile(authorValue.LookupId);
UserProfileValueCollection values = profile[PropertyConstants.PictureUrl];
if (values.Count > 0)
{
// Author Image: {37A5CA4C-7621-44d7-BF3B-583F742CE52F}
SPFieldUrlValue urlValue = new SPFieldUrlValue(values.Value.ToString());
item[new Guid("{37A5CA4C-7621-44d7-BF3B-583F742CE52F}")] = urlValue.Url;
}
}
item.Update();
// News Text: {7F55A8F0-4555-46BC-B24C-222240B862AF}
//
// Author Image: {37A5CA4C-7621-44d7-BF3B-583F742CE52F}
//
// Publish Date: {45E84B8B-E161-46C6-AD51-27A42E4992B5}
//
}