Ottenere la foto dell'utente da SPUser utilizzando il modello a oggetti WSS
-
09-06-2019 - |
Domanda
Sto cercando di recuperare un utente sulla foto dell'utente di Sharepoint tramite il modello a oggetti WSS 3.0.Ho cercato soluzioni sul web, ma finora non sono riuscito a trovare un modo per farlo.È possibile, e se sì, come?
Soluzione
Ecco uno snippet di codice che dovrebbe aiutarti a portare a termine il lavoro per te.Potrebbe essere necessario eseguire ulteriori convalide per evitare eccezioni (assicurarsi che il profilo esista effettivamente, assicurarsi che l'URL dell'immagine esista effettivamente, ecc...):
//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
Altri suggerimenti
Se stai parlando strettamente di WSS 3.0 (e non di MOSS), in realtà non hai profili utente globali di per sé, ma un elenco di informazioni utente nascosto in ogni raccolta siti.Ciò significa che nessuno degli elementi negli spazi dei nomi Microsoft.Office.Server è disponibile per te.
Tuttavia, è possibile aggiornare l'Elenco informazioni utente in modo programmatico purché si conosca l'URL dell'immagine di un utente.Finché corri con una sorta di privilegi elevati, dovresti essere in grado di farlo manipolare questo elenco proprio come puoi fare con qualsiasi altro elenco di SharePoint.Tieni presente che questo elenco è valido solo per l'ambito di una raccolta siti, quindi gli utenti dovrebbero effettuare lo stesso aggiornamento ovunque per avere effettivamente un URL di foto.Inoltre gli utenti non entrano nell'Elenco informazioni utente finché qualcuno non assegna loro un qualche tipo di autorizzazione, quindi non tutti gli utenti del tuo dominio saranno presenti.
Il modo pulito per gestire questo problema è sicuramente che il meccanismo del profilo utente è MOSS, ma se questa è un'opzione la domanda dovrebbe davvero essere aggiornata per chiedere informazioni su MOSS vs WSS.
Ah, devi usare la classe UserProfileManager.Maggiori informazioni qui: http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager.aspx
Esempio di utilizzo:
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}
//
}