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

Я пытаюсь найти пользователя на фотографии пользователя Sharepoint через объектную модель WSS 3.0. Я просматривал в Интернете решения, но до сих пор не смог найти способ сделать это. Возможно ли это, и если да, то как?

Ответы [ 3 ]

5 голосов
/ 14 сентября 2008

Вот фрагмент кода, который должен помочь вам выполнить работу за вас. Вам может потребоваться выполнить дополнительную проверку, чтобы избежать каких-либо исключений (убедитесь, что профиль действительно существует, 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
3 голосов
/ 17 сентября 2008

Если вы строго говорите о WSS 3.0 (а не MOSS), то у вас действительно нет глобальных профилей пользователей как таковых, но есть скрытый список информации о пользователях в каждом семействе сайтов. Это означает, что вам не доступен ни один материал в пространствах имен Microsoft.Office.Server.

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

Чистый способ справиться с этим, безусловно, является механизмом профиля пользователя - MOSS, но если это вариант, вопрос следует обновить, чтобы задать вопрос о MOSS против WSS.

2 голосов
/ 14 сентября 2008

Ах, вы должны использовать класс 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}
    //
}
...