19 Mart 2009 Perşembe

anonymous user ile kullanıcı profil bilgilerini okuma


Bir önceki yazımda "web partları anonim erişime uygun şekilde geliştirmeliyiz" demiştim.
Böyle dememin nedeni: Geliştirdiğimiz web partlardaki login olmamış kullanıcıların görmemesi gereken alanları göstermemektir ki
bunu da Context.User.Identity.IsAuthenticated ile kontrol edebiliriz.

Ayrıca eğer WebPartınızda kullanıcı profil sayfasına erişim varsa anonim kullanıcı ile erişmeye çalıştığınızda hata ile karşılacaksınız.

Hata ile karşılaşmayarak kullanıcı profilinden veri okumak
istediğimizde object model ve Sharepoint WebServiceleri karşımıza çıkmakta.

Burada hangisini kullanacağınız size kalmış bir durumdur.Altı çizilmesi gereken bir durum var ki o da web servislerinin daha hızlı olduğu ve tavsiye edildiğidir.

Object Model ile kullanıcı bilgilerine erişmek



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
HttpContext currentContext = HttpContext.Current;
string FieldValue = null;

try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = site.OpenWeb("/"))
{
ServerContext context = ServerContext.GetContext(site);
HttpContext.Current = null;
UserProfileManager profileManager = new UserProfileManager(context);
string[] n = pName.Split(';');
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}
HttpContext.Current = currentContext;
return FieldValue;
}


Yukarıdaki kod bölümü ile anonim kullanıcı ile profil bilgilerine ulaşabilmekteyiz.
Gelin satır satır kodumuzu inceleyelim.



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
// o anki current context'i tanımladığımız context'e atıyoruz.
HttpContext currentContext = HttpContext.Current;

// geri donecek değerin tutulacağı değişkenimiz.
string FieldValue = null;

try
{
// Full Control sağlamak içib RunWithElevatedPrivileges kullandık.
// Bakınız
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// current sitemızı Id ile kullanıma alıyoruz.
using (SPSite site = new SPSite(SPContext.Current.Site.ID))// Microsoft.Sharepoint.dll
{
// root webe erişiyoruz.
using (SPWeb web = site.OpenWeb("/"))
{
// kullanıcı profilinden veri okuyabilmemiz için gerekmekte.
// Microsoft.Office.Server.dll referans edilmelidir.
// C:\Program Files\Common Files\microsoft shared\web server extensions\12\ISAPI klasöründe bulabilirsiniz.
ServerContext context = ServerContext.GetContext(site);

// contextimizi null'a çekiyoruz.
HttpContext.Current = null;

// sitemize ait olan kullanıcı profiline erişim sağlıyoruz.
UserProfileManager profileManager = new UserProfileManager(context);

// Sharepoint'den SPListItem tipinden değer aldığınız takdirde kullanıcı bilgileri
// 1;#Adil ERKAN şeklinde kullanıcı Id'si ve adı ile birlikte size değer gelecektir.
// Burada Id'ye göre değer okuyacağımız için split ile ayırıyoruz.
string[] n = pName.Split(';');

// AllUser's altındaki parametre ile gelen kullanıcının id'sine göre bilgilerini alıyoruz.
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
// GetUserProfile ile kullanıcının LoginName'ile bilgilerini UserProfile tipindeki değişkenimize atıyoruz.
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);

// kullanıcı profili varsa parametre ile gelen alanın değerini geri dönen değişkemize atıyoruz.
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}

// methodumuzun başında atadığımız context'i iade ediyoruz.
HttpContext.Current = currentContext;

// değeri döndürüyoruz
return FieldValue;
}



referans : SharePoint User Profile Access Issues

Bir sonraki yazımda Sharepoint Web Service yardımı ile kullanıcı profil erişimini nasıl yapacağımızı yazacağım.

Hiç yorum yok: