Ich versuche, einen Benutzer auf Sharepoints Benutzerfoto über das WSS 3.0-Objektmodell abzurufen. Ich habe im Internet nach Lösungen gesucht, aber bis jetzt konnte ich keinen Weg finden, es zu tun. Ist es möglich, und wenn ja, wie?Benutzerfoto von SPUser mithilfe des WSS-Objektmodells abrufen
Antwort
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
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}
//
}
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.
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. –
Dies funktioniert nur für MOSS - WSS allein enthält nicht den Profilmanager-Dienst oder die Klasse. –