« powrót

Operacja na użytkowniku w Sharepoint [Sharepoint / C#]

Opublikowano: 2011-09-24 , wyświetlono: 14521

Przedstawiam kilka funkcji obsługujących odczyt użytkownika z pola listy, aktualnie zalogowanego i z innego site'a. Wszystkie cztery metody zostały obudowane klasą.
Pierwsze dwie pozwalają na pobranie użytkownika lub użytkowników z pola listy sharepoint'a.
GetUser dotyczy pola typu: Osoba lub grupa, Zezwalaj na wiele znaczeń: nie.
GetListUsers odczytuje pole typu: Osoba lub grupa, Zezwalaj na wiele znaczeń: tak.

Przykład wywołania metod z własnego kodu


SPUser user = Chinasoft.Util.User.GetUser(item, "osoba");
List<SPUser> users = Chinasoft.Util.User.GetListUsers(item, "osoby");
SPUser user = Chinasoft.Util.User.GetCurrentUser();
SPUser user = Chinasoft.Util.User.GetUserSite("http://sharepoint/sites/name", "domain\jacek.murawski")

Właściwa klasa


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;

namespace Chinasoft.Util
{
    public class User
    {
        /// <summary>
        /// return value from User type field as single SPuser object
        /// </summary>
        /// <param name="item"></param>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public static SPUser GetUser(SPListItem item, string fieldName)
        {
            SPUser user = null;
            SPFieldUser field = item.Fields.GetField(fieldName) as SPFieldUser;

            try
            {
                if (field != null)
                {
                    SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldName].ToString()) as SPFieldUserValue;
                    if (fieldValue != null)
                        user = fieldValue.User;
                }
            }
            catch (Exception)
            {
                user = null;
            }

            return (user);
        }

        /// <summary>
        /// return value from User type field as list SPuser's object
        /// </summary>
        /// <param name="item"></param>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public static List<SPUser> GetListUsers(SPListItem item, string fieldName)
        {
            SPFieldUserValueCollection userVals;
            List<SPUser> users = new List<SPUser>();

            try
            {
                userVals = (SPFieldUserValueCollection)item[fieldName];
            }
            catch (Exception)
            {
                userVals = null;
            }

            if (userVals != null)
            {
                foreach (SPFieldUserValue userVal in userVals)
                    users.Add(userVal.User);
            }

            return (users);
        }

        /// <summary>
        /// read and return current user object
        /// </summary>
        /// <returns></returns>
        public static SPUser GetCurrentUser()
        {
            SPContext currentContext = SPContext.Current;
            SPUser user;

            if (currentContext != null)
            {
                SPWeb web = currentContext.Web;
                user = web.CurrentUser;
            }
            else
            {
                user = null;
            }
            return (user);
        }

        /// <summary>
        /// get user by login name for site (url as parameter)
        /// </summary>
        /// <param name="loginName"></param>
        /// <returns></returns>
        public static SPUser GetUserSite(string siteUrl, string loginName)
        {
            SPUser user = null;

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(siteUrl))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        user = web.SiteUsers[loginName];
                    }
                }
            });

            return (user);
        }        
    }
}



Komentarze: