2008-09-14 7 views

Antwort

5

Hier ist ein Codeausschnitt, den Job zu erledigen für Sie helfen soll. Sie müssen möglicherweise einige zusätzliche Validierung tun, alle Ausnahmen zu vermeiden (um sicherzustellen, das Profil tatsächlich vorhanden ist, um sicherzustellen, das Bild URL tatsächlich vorhanden ist, etc ...):

//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 
+1

Profil [PropertyContants.PictureURL] gibt eine Sammlung zurück, daher müssen Sie den Wert daraus abrufen, da Sie sie nicht direkt in eine Zeichenfolge umwandeln können. –

+1

Dies funktioniert nur für MOSS - WSS allein enthält nicht den Profilmanager-Dienst oder die Klasse. –

2

Ah, Sie müssen die UserProfileManager-Klasse verwenden. Weitere Informationen hier: http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager.aspx

Beispiel für die Verwendung:

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} 
    // 
} 
3

Wenn Sie streng über WSS 3.0 zu sprechen (und nicht MOSS), dann haben Sie wirklich keine globalen Benutzerprofile per se, sondern eine Hiddenh User Information List in jeder Websitesammlung. Das bedeutet, dass Ihnen nichts in den Microsoft.Office.Server-Namespaces zur Verfügung steht.

Sie können jedoch die Benutzerinformationsliste programmatisch aktualisieren, solange Sie die URL zu einem Benutzerbild kennen. Solange Sie mit einigen erhöhten Rechten arbeiten, sollten Sie manipulate this list genauso wie mit jeder anderen SharePoint-Liste ausführen können. Beachten Sie, dass diese Liste nur für den Umfang einer Websitesammlung geeignet ist. Daher müssten Nutzer das gleiche Update überall durchführen, um eine Foto-URL zu erstellen. Plus-Benutzer gelangen nicht in die Benutzerinformationsliste, bis ihnen jemand eine Art von Berechtigung erteilt, so dass nicht jeder Benutzer in Ihrer Domäne dort ist.

Der saubere Weg, um dies zu handhaben ist definitiv der User Profile Mechanismus ist MOSS, aber wenn das eine Option ist, sollte die Frage wirklich aktualisiert werden, um über MOSS vs WSS zu fragen.