Получение фотографии пользователя из SPUser с использованием объектной модели WSS

StackOverflow https://stackoverflow.com/questions/61339

  •  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}
    //
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top