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?

È stato utile?

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}
    //
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top