Ana içeriğe atla

Arama Yap
Ana Sayfa
Bloglar
Etkinlikler
Hakkımızda
Sharepoint TV
  
Sharepoint Nedir? | Moss 2007 Hakkında Herşey... > Bloglar

Bloglar

LINQ to SharePoint

Merhabalar,

Bir süredir yeni bir projenin Analiz - Design fazında olduğumuz için yazı ekleyemedim. Bugün bir LINQ sorgusu ile SharePoint listelerinden veri getirecek örnek yapacağız. LINQ sayesinde bütün sorgulama ve foreach loop'lar, çok daha performanslı ve kod okunabilirliği açısından daha iyi duruma gelmiştir. Uygulamamıza gelince;

Visual Studio 2008 ile yeni bir Project oluşturup, Proje Şablonlarından SharePoint -> WebPart Project seçip adını LINQtoSharePoint verelim. Uygulamada LINQ sorgu yazabilmek için

using System.Linq;

satırını eklememiz lazım. Bu Namespace System.Core.dll içinde bulunduğu için proje referanslarına bunu eklememiz gerekiyor. Artık kodumuzu yazabilir, derleyebilir, SharePoint'e Deploy edebiliriz.

using System;

using System.Linq;

using System.Runtime.InteropServices;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Serialization;

 

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.WebPartPages;

 

namespace LINQtoSharePoint

{

[Guid("4cec78c8-c4a5-4ae0-9b71-cd3217dc653d")]

public class LINQtoSharePointWebPart : WebPart

{

public LINQtoSharePointWebPart()

{

}

 

protected override void Render(HtmlTextWriter writer)

{

base.Render(writer);

SPList taskList = SPContext.Current.Web.Lists["Tasks"];

 

var taskListItems = from SPListItem tItem in taskList.Items

orderby tItem.Title

ascending

select tItem;

 

foreach (SPListItem taskItem in taskListItems)

writer.WriteLine(taskItem.Title + "<br/>\n");

}

 

}

}

Sharepoint versiyonları arasındaki farklar(WSS 3.0 - MOSS 2007 vs)
Sharepoint Nedir? isimli blog yazısına bir arkadaşımız yorum yapmış "sharepoint versiyonları arasındaki farkları görebileceğimiz bir döküman var mı?" şeklinde aşağıdaki linkten bu dökümana ulaşabilirsiniz.
 
SharePoint’te Yüksek Yetki ile Kod Çalıştırma ve Impersonation

Herkese merhabalar,

SharePoint'te çalışmak üzere kod yazdığımızda, bazen yüksek yetkilere (örnek: Site Yöneticisi yetkilerine) ihtiyacımız olmaktadır. Site yetkilerini düzenleme, site gruplarına kullanıcı ekleme, kullanıcı profillerine erişim yüksek yetki gerektiren işlemler arasında sayılabilir. Gelen kullanıcı her kim olursa olsun, kodun düzgün çalışması için SharePoint'te bu kodu aşağıdaki şekilde yazmamız gerekmektedir.

SPSecurity.RunWithElevatedPrivileges(delegate()

{

using(SPSite site =new SPSite(SPContext.Current.Site.ID))

{

ServerContext serverContext = ServerContext.GetContext(site);

UserProfileManager userProfileManager =

    new UserProfileManager(serverContext);

userProfile = userProfileManager.GetUserProfile(userName);

 }

});

 İkinci yöntem ise aşağıdaki gibi yüksek yetkiyle çalışacak kodu bir metod'a alıp, metodu "elevated" çağırmakla yapılmaktadır.

SPSecurity.CodeToRunElevated elevatedmyMethod =

new SPSecurity.CodeToRunElevated(myMethod);

SPSecurity.RunWithElevatedPrivileges(elevatedmyMethod);

SharePoint Impersonation :

Impersonation (şahıslandırma, taklit etme) işlemlerin başka bir kullanıcı hesabıyla yapılması demektir. Genellikle yüksek yetkiyle çalışacak kodlar için Impersonation yapılır. Başka bir örnek vermek gerekirse, bir kullanıcının oluşturduğu içerik sayfasını sildiniz, sonrasında onun kullanıcı hesabıyla aynı sayfayı Impersonation ile oluşturmak mümkün. SharePoint'te SPUser nesnesinin UserToken özelliği ile oluşturulan SPSite nesnesi ve bu nesne üzerinden eriştiğimiz SPWeb, SPList nesneleri hep ilgili SPUser ile çalışır.

SPSite site = new SPSite("http://mySite");

SPWeb web = site.OpenWeb();

SPUser user = web.AllUsers["userName"];

SPUserToken token = user.UserToken;

SPSite impersonatedSite = new SPSite("http://mySite", token);

SharePoint - Tips and Tricks

Bugün SharePoint projemizde kullandığımız birkaç faydalı fonksiyonu sizlerle paylaşmak istiyorum. Bunlardan ilki, SharePoint'e "X" isimli  listenin bulunup bulunmadığını soran bir fonksiyon. SharePoint OM'de (object model) SPWeb.Exists( ) fonksiyonu bulunmakta ama, SPList.Exists( ) fonksiyonu bulunmamaktadır. Bu işlemi aşağıdaki kod ile gerçekleştirebilirsiniz.

public static bool ListExists(SPWeb web, string listName)

{

return web.Lists.Cast<SPList>().Any(list => string.Equals(list.Title, listName));

}

Bir diğer fonksiyon ise log'lama hakkında. Uygulamanızda SharePoint Log'ları (Default olarak C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\LOGS dizinindedir.) arasına log kaydını aşağıdaki fonksiyon ile atabilirsiniz.

public static void PortalLog(string exceptionMessage, string exceptionStackTrace)

{

Microsoft.Office.Server.Diagnostics.PortalLog.LogString("Exception Occurred:

{0} , {1}", exceptionMessage, exceptionStackTrace);

}

Bugünkü son fonksiyon, SharePoint sitemizin Url bilgisini almaya yönelik. SharePoint'te aynı Web Application birden fazla Zone için Extend edilebilir. Bu sayede aynı siteye intranet'te http://myCompany diye Windows account'lar ile ulaşırken, internet üzerinden http://intranet.myCompany.com şeklinde ve Form Based olarak ulaşabilirsiniz.

Burda sorun şu, uygulamada bir yere link vereceksiniz, ama kullanıcının hangi Url ile geldiğini öğrenmek istiyorsunuz. Relatif link (root'tan itibaren) verebilirsiniz, yada mevcut Context Url bilgisini almak için Microsoft.SharePoint.Administration.SPAlternateUrl.ContextUri özelliğini kullanabilirsiniz.

Bununla ilgili aşağıdaki fonksiyonu da örnek vererek yazımı sonlandırıyorum. Bu fonksiyon ile bir Web Application'ın herhangi bir Zone'una ait (bu örnekte Internet Zone) Url bilgisini alabiliriz.

public static string GetInternetZoneUrl(SPSite site)

{

SPAlternateUrlCollection altUrls = site.WebApplication.AlternateUrls;

foreach (SPAlternateUrl altUrl in altUrls)

if (altUrl.UrlZone == SPUrlZone.Internet)

return altUrl.Uri.ToString();

 

return string.Empty;

}

SharePoint Anket - Progress Bar

 Merhabalar, bir süredir SharePoint anketleri ile ilgili bir modül üzerinde çalışmaktayım. Anket sürecine daha "user friendly" bir arayüz sağlamak için anketin neresinde bulunduğumuzu gösterecek bir Progress Bar isteği gelmişti. Bu yazımda bunu nasıl gerçekleştirdiğimizi, gerekli kodu ve kodun açıklamalarını bulabilirsiniz.

SharePoint'te Anket(Survey) bir çeşit özel listedir. Ankette her soru listeye bir Sütun(Field) olarak eklenmektedir. Diğer bir deyişle, sorularımız, anketin Author, Editor, Created, Modified vs. alanlarının yanına yeni alanlar olarak eklenmektedir. Herbir anket cevabı için Author; anketi cevaplayan, Created; cevap zamanı bilgilerini tutarken Soru Sütunu da bu soruya kişinin verdiği cevap bilgisini tutar.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using Microsoft.SharePoint;

 

namespace SharePointNedir.UserControls.Anket

{

public partial class AnketProgressBar : System.Web.UI.UserControl

{

protected void Page_Load(object sender, EventArgs e)

{

SPWeb curWeb = SPContext.Current.Web;

SPList anketList = curWeb.GetListFromUrl(Request.Url.AbsolutePath);

 

int pageSeperatorFieldCount = GetPageSeperatorFieldCount(anketList);

 

int totalSoru = anketList.Fields.Count - 42 - pageSeperatorFieldCount;

 

int mevcutSoruIndex = 1;

if (Request.QueryString["FirstField"] != null &&

Request.QueryString["FirstField"].ToString() != string.Empty)

{

string strFirstField = Request.QueryString["FirstField"].ToString();

SPField field = anketList.Fields.GetFieldByInternalName(strFirstField);

 

if (!strFirstField.Equals("ID") || !strFirstField.Equals("ContentTypeId"))

{

foreach (SPField field in anketList.Fields)

{

if (IsQuestion(field))

{

if (field.FieldTypeDefinition.BaseRenderingTypeName != "PageSeparator")

{

if (field.InternalName.Equals(firstField))

break;

mevcutSoruIndex++;

}

}

}

}

}

double percentage = Convert.ToInt32(((double)100 / totalSoru) * mevcutSoruIndex);

Response.Write(percentage.ToString());

}

 

private static int GetPageSeperatorFieldCount(SPList anketList)

{

int pageSeperatorFieldCount = 0;

foreach (SPField field in anketList.Fields)

{

if (field.FieldTypeDefinition.BaseRenderingTypeName == "PageSeparator")

pageSeperatorFieldCount++;

}

return pageSeperatorFieldCount;

}

 

private bool IsQuestion(SPField field)

{

SPFieldLookup related = field as SPFieldLookup;

bool countRelated = related != null && related.CountRelated;

return (Enum.IsDefined(typeof(SPFieldType), field.TypeAsString) &&

field.Type != SPFieldType.Lookup &&

field.Type != SPFieldType.User &&

!field.ReadOnlyField &&

!countRelated &&

field.Type != SPFieldType.Computed &&

field.Type != SPFieldType.File &&

field.Type != SPFieldType.Integer &&

field.Type != SPFieldType.Recurrence &&

field.Type != SPFieldType.CrossProjectLink &&

field.Type != SPFieldType.AllDayEvent &&

field.ShowInListSettings != false &&

field.Reorderable);

}

}

}

 

İlk olarak içinde bulunduğumuz site ve URL bilgisi kullanarak anket listemizi alıyoruz. Anket sorularını sayfalama yapmak için "Sayfa Ayırıcı" (PageSeperatorField) kullanmış isek bunun sayısını buluyoruz, çünkü toplam soru sayısı bulurken bu alanları saymamamız lazım. Toplam soru sayısını bulurken Magic bir sayımız var, 42. SharePoint Anket tipinde default 42 adet alan bulunmaktadır. Eklediğimiz soru sayısını bulabilmek için toplam alan sayısından 42 ve Sayfa Ayırıcıları çıkarmamız gerekiyor. Kodda sonraki adım, şu an kaçıncı soruda bulunduğumuzu bulmamızı sağlıyor.

   

SharePoint anket cevaplarken ilk soru için NewForm açar, kişinin cevap kaydını oluşturur, sonraki sorular ise EditForm'da FirstField QueryString parametresi ile açılır ve  bu kaydın soru alanlarını güncelleyerek çalışır. NewForm'da anket yeni başlıyor, yani mevcutSoruIndex 1. Sonraki sorularda ise FirstField parametresinden soru alınarak, kaçıncı soruda olduğumuzu bulmaya çalışıyoruz. Burada bir IsQuestion metodumuz var, bu metod sütunun SharePoint temel alanı mı, yoksa bizim eklediğimiz soru alanı mı olduğunu anlamamızı sağlıyor. Bu metod için aşağıdaki linke bakabilirsiniz.

   

Son olarak örnekte anket tamamlama oranını Response.Write ile yazdırdım, ama siz bu yüzde değeri kullanarak güzel bir progress bar oluşturabilirsiniz. Herkese iyi günler..

Sharepoint Üzerinde Versiyonlama

Merhaba,

Bu yazımızda sizlerle Sharepoint' in kullanıcılarına sağladığı önemli özeliklerden biri olan versiyonlama üzerine bahsediyor olacağız. Normalde bir web uygulaması geliştirdiğimizde, kullanıcılarımızın yaptığı güncelleme hareketlerini saklamak isteriz. Yeri geldiğinde bu güncellemeleri geri almak, güncellemenin kim tarafından yapıldığını görmek, incelediğimiz versiyondan daha sonra hangi değişiklikler yapılmış bunların içeriğini görüntülemek isteyebiliriz. Bu durumda, custom web uygulamalarımız için uygulama seviyesinde yapacağımız çeşitli versiyonlama ya da loglama katmanları geliştirebileceğimiz gibi, veritabanı seviyesinde tetikleyiciler vs. Kullanarak ta bu işlemleri gerçekleştirebiliriz. Ancak bahsettiğimiz web uygulaması bir Sharepoint uygulaması ise ve biz Sharepoint uygulamalarımızda listeleri birer tablo gibi kullandığımız için listeler üzerinde yapılan değişikliklerin analiz edilmesinde versiyonlama özelliğini kullanabiliriz. Aynı şekilde çeşitli ofis dökümanlarımızı sakladığımız bir döküman kütüphanesi üzerinde de Sharepoint'in versiyonlama yeteneklerini kullanabilir, bu dökümanlar üzerinde yapılan değişiklikleri izleme, geri alma özelliklerine hiç kod yazmadan sahip olabiliriz.

Sharepoint üzerinde versiyonlama işlemleri için mekanizmanın işleyişinin doğru anlaşılması gerekmektedir. Diğer taraftan özelleştirilmiş bir Sharepoint uygulaması için versiyonlar arasındaki hareketleri incelemek üzere kendi raporlama ekranlarımızı, raporlama hizmeti veren kullanıcı kontrolleri ya da web bölümlerimizi geliştirebiliriz. Sharepoint Document Object Model' ini kullanarak item lar üzerinde ilerleyebilir, bu versiyonlama hizmetlerini programatik olarak yönetebiliriz.

Versiyonlama hizmeti ile birlikte büyük(major) değişikliklerin başkaları tarafından kontrol edilmesini istediğimiz durumlarda ise onaylama mekanizmasını da devreye sokabiliriz. Böyle durumlarda bir kişi başkasının yaptığını iddaa ettiği büyük çaplı değişiklikleri inceleyebilir, inceleme sonucu onay veya red hakkını kullanabilir. Bu da yaygın olarak dökümanlar üzerinde çalışan firmaların içerik takibinde kontrolü kaybetmesini engellemek üzere bir iş akışını devreye almış olur.

Versiyonlama mekanizmasında kullanılan rakamların anlamları vardır. Büyük değişiklikler için versiyon numarasındaki nokta(.) 'dan önceki major(büyük) numaralar büyük değişiklikleri, noktadan sonraki rakamlar ise minor(küçük) değişiklikleri simgeler. Yani bir döküman üzerinde büyük çaplı değişiklikler yaptıysanız bunun major versiyon olarak yayına alınmasını sağlayabilirsiniz. Böylece gerekli onay mekanizması devreye girebilir ve yetki sahibi kullanıcılar sizin dökümanınızı inceleyerek yapılan değişikliklerin major bir versiyon için uygun olup olmadığına karar verebilirler.

Bir liste ya da doküman kütüphanesi için farklı versiyonlama mekanizmaları mevcuttur. Örneğin listeler sadece major değişiklikleri saklarken, doküman kütüphaneleri şirketinizin dokümanlar üzerinde yapacağı değişikliklerin sıklığına göre kendi vereceğiniz karar doğrultusunda, minor ve major değişiklikleri bir arada saklayabilirler. Örneğin bir doküman isminin değişmesini major bir değişiklik olarak yansıtabileceğiniz gibi minor değişim olarak ta yansıtabilmek elinizdedir.

Bir liste ya da döküman kütüphanesi için versiyonlama özelliği varsayılan olarak kapalıdır. Bunu aktif hale getirmek için listenin ya da döküman kütüphanesinin settings (ayarlar) kısmından list ya da library settings kısmına girmeniz, burada yer alan general settings (genel ayarlar) altındaki versioning settings (versiyonlama ayarları) sayfasına ulaşmanız gerekmektedir.

Örneğin bir liste için aşağıdaki gibi bir ayar ekranı ile karşılaşıyor olacaksınız.

Eğer yapılan değişikliklerin bir onay mekanizmasından geçmesini istiyorsanız, gerekli ayarı buradan yapabilirsiniz. Her bir güncellemede versiyonların saklanmasını isteyip istemediğinizi de buradan belirleyebiliyorsunuz. Geriye dönük olarak saklanacak versiyon sayısını da buradan belirlediğinizde, otomatik olarak bu sayıdan fazla versiyon adedine ulaşıldığında eski versiyonlardan itibaren bir silme işlemi gerçekleşecektir. Bu silme işlemi direkt olarak gerçekleştiğinden silinen versiyonların çöp kutusuna gönderilmesi söz konusu değildir.

Döküman kütüphaneleri daha öncede bahsettiğimiz gibi versiyonlama konusunda daha fazla özellik içermektedirler.

Yukarıdaki şekilden de görebileceğiniz üzere sadece major değişiklikleri mi yoksa minor-major değişikliklerin her ikisini de bir arada mı saklamak gerektiğini belirleyebiliyorsunuz. Ayrıca kimlerin draft (taslak) halindeki içerikleri görebileceğine ve dokümanlar üzerinde çalışılırken check out edilip edilmemesi gerekliliğine karar verebilirsiniz.

Listeler ve doküman kütüphaneleri üzerinde çalışırken eski versiyonlara ulaşabilirsiniz. Bunu yapmak için bir item üzerinde durduğunuzda açılan aşağı ok sembolünü kullanarak ulaşacağınız context menü size yardımcı olacaktır. Örneğin products ismindeki bir liste üzerinde tüm versiyonları görelim.

 

Görüldüğü gibi değişikliğin kimler tarafından yapıldığını ve değişimin 1.0 dan 2.0 a geçerken price kolon değerinin 10 dan 20 ye güncellendiği kaydedilmiş durumdadır. İsterseniz versiyon 1.0 ı yeniden aktif versiyon haline dönüştürebilir böylece fiyat bilgisinin yeniden eski haline dönmesini ve saklanan 2.0 versiyon bilgisinin silinmesini sağlayabilirsiniz.

Kısacası Sharepoint bizler için hiç kod yazmadan uygulamalarımız içerisinde geriye yönelik olarak içerik takibi yapmak adına hazır çözümler sunmaktadır. Bir başka yazıda programatik olarak bu özellikleri nasıl kullanabileceğimize değiniyor olacağız. Herkese mutlu günler dilerim.

Sharepoint Nedir?

Daha önce sharepoint ile karşılaşmamış arkadaşlar bu soruyu kendilerine soruyorlardır. SharepointNedir.Org sharepoint alt yapısını kullanarak hazırlanmış bir sitedir. Eğer bu siteye girdiyseniz ve bu yazıyı okuyorsanız sharepoint ile karşılaştınız anlamına geliyor. Sharepoint temelde şirketlerin ihtiyaç duyduğu her türlü portal özelliklerini kapsayan ve ek geliştirmelere izin veren bir sistemdir.

Peki "Portal" nedir? İnternetten bulduğum güzel bir tanım;

"Portal: Bütün bilgi ve servislere tek ara yüzden, tek noktadan ulaşılabilen web sayfalarına portal denir. Kurumsal Portal ise şirketlere özgü elektronik ortamlarındaki tüm kaynakları bir araya getiren ve herkesin mümkün olduğunca kolay kullanmasını sağlayan iş masaüstleri diye tanımlanır. Herşeyin bir portal olarak adlandırıldığı günümüzde, gerçek bir portal ancak farklı uygulamalardaki bilgileri toplayarak tek bir ortamda kullanıcılara toplam iş bakışını verebiliyorsa 'intranet' ya da 'kurumsal portal' olarak adlandırılabilir. Portalın kurulumu kolay olmalıdır ve portal, maksimum şekilde fayda sağlamak üzere kuruluşun özel ihtiyaçlarına göre ayarlanabilmelidir."

İşte Sharepoint şirketlerin bu portal ihtiyaçlarını giderebilecek en başarılı sistemdir. Sharepoint; doküman yönetimi, yayınlama yapısı, güvenlik ve yetkilendirme, iş akışları ve formlar, arama ve iş zekası özellikleriyle şirketlerin tüm ihtiyaçlarını karşılamaktadır. Bunun yanında Sharepoint'in en önemli özelliklerinden birisi tüm ofis uygulamaları ile birlikte entegre bir şekilde çalışmasıdır.

Sharepoint ile birlikte yapabileceklerinizin sadece bir kaçı;

1)Haberler, duyurular veya anketler oluşturabilir bunları herhangi bir kod yazmadan çalışanlarınızla paylaşabilirsiniz.

2)Custom listeler oluşturarak şirket çalışanlarınıza her türlü bilgiyi sunabilirsiniz. (Örn: Telefon Listesi, sözlük vs...)

3)Doküman yönetimi özellikleriyle yetkilendirme seviyelerine göre her türlü belgeyi saklayabilir izin seviyesine göre kullanıcılarınıza açabilirsiniz. Versiyon kontrolü sayesinde Sharepoint üzerinde belge düzenleme, belgenin herhangi bir versiyonuna geri çevirme gibi belge yönetimi ve takibi özelliklerinden yararlanarak belge üzerinde daha önceden yapılan değişiklikleri izleyebilirsiniz.

4) Excel de oluşturduğunuz verileri portalınızda gösterebilirsiniz.

5) Infopath kullanarak formlar düzenleyebilir(masraf, yıllık izin, toplantı odası rezervasyonu, mazeret izni vs.) bu formları, Sharepoint Designer ile oluşturmuş olduğunuz iş akışlarına bağlayabilir ve her türlü izni portal üzerinden gerçekleştirebilirsiniz.( Not: Türkçe gördüğüm bir tanımda Infopath'in bir BI çözümü olduğu belirtilmiş ancak bu tamamiyle yanlıştır. Infopath sadece formların hazırlanmasında bize yardımcı olur. Herhangi bir data mining ya da verinin modellenmesi özelliği yoktur.)

6)Şirket hedeflerini analiz ederek KPI lar üzerinden performans raporları oluşturabilir. Şirketin her türlü raporlarını çalışanlarınıza sunabilirsiniz.

7)BDC aracılığıyla her türlü üçüncü parti sistemlerden verileri çekip portalınızda gösterebilirsiniz.(Örn. SAP )

8) Sharepointin etkin arama sistemi sayesinde her türlü veriyi kolayca arayabilirsiniz. Bunun yanında herhangi bir dosya sistemini ya da herhangi bir web sitesini indexleyerek Sharepoint üzerinden aranmasını sağlayabilirsiniz.

9) En önemlisi her türlü custom uygulama geliştirmeye izin veren kendi usercontrol ve webpartlarınızı yazabildiğiniz gibi kendi html tasarımlarınızı giydirebileceğiniz bir sistemdir Sharepoint.

Yukarıda saymış olduğum özellikler Sharepoint ile birlikte yapabileceklerinizin sadece bir kaçı. SharepointNedir.Org olarak elimizden geldiğince sizi Sharepoint Services 3.0 ve Microsoft Office Sharepoint Server 2007 hakkında yazılarımızla bilgilendirmeye çalışacağız.

Sharepoint Search/Query Web Servisi

Yazacağım CustomSearchResults webpart öncesinde bir test uygulaması yapmak istedim ve bu araştırmamda edindiğim bilgileri, karşılaştığım problemleri bu yazımda sizlere anlatacağım. 

SharePoint Web Servisleri arasında Search hizmetine bağlanıp veri çekmemizi sağlayan 2 Search Web Servisi (yada asıl adıyla Query Web Service) bulunmaktadır. http://mossSite/_vti_bin/spsearch.asmx (Windows SharePoint Search Web Servisi) http://mossSite/_vti_bin/search.asmx (Office Server Search Web Servisi)

Her iki servisde de önemli metodlar Query( ) ve QueryEx( ) metodlarıdır. Query( ) metodu sorgu sonuçlarını XML string olarak getirirken, QueryEx( ) metodu sonuçları DataSet olarak döner. Her iki metod da belli bir Schema’sı olan XML string parametresi bekler. (XML Schema hakkında detaylı bilgiye aşağıdaki Linkler kısmından ulaşabilirsiniz.) <QueryPacket><Query> vs. şeklinde giden bu XML’de önemli kısım <QueryText> tag’idir. Bu tag’de biz sorgumuzu belirtiriz ve tag’e geçeceğimiz type attribute ile sorgumuzu KeywordQuery yada SqlFullTextQuery olarak gönderebiliriz.

KeywordQuery kelime kelime arama yapmamızı sağlarken, SqlFullTextQuery kelimelere wildcard (“*”) ekleme, CONTAINS( ), FREETEXT( ) gibi fonksiyonlarla gelişmiş aramalar yapma imkanı sunar. Örneğimizde her 2 türde de sorgu göreceksiniz. Schema XML’de sorgu kısmını ayrı tanımlayarak sabit kısmı ayrı tutmaya çalıştım.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using SearchWS;

using System.Data;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

QueryService queryService = new QueryService();

queryService.Credentials = System.Net.CredentialCache.DefaultCredentials;

string keywordQueryTextSample = @"<QueryText type='STRING' language='en-us'>sharepoint</QueryText>";

string sqlFullTextQuerySample = @"<QueryText language='en-US' type='MSSQLFT'>" +

"SELECT Title, Path, Description, Write, Rank, Size FROM Scope() WHERE CONTAINS(Description,'SharePoint')" +

"</QueryText>";

string searchQueryXML = @"

<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>

<Query domain='QDomain'>

<SupportedFormats>

<Format>urn:Microsoft.Search.Response.Document.Document</Format>

</SupportedFormats>

<Context>" +

keywordQueryTextSample + @"

</Context>

</Query>

</QueryPacket>";

//string returnXML = queryService.Query(searchQueryXML);

//Response.Write(returnXML);

DataSet ds = queryService.QueryEx(searchQueryXML);

GridView1.DataSource = ds;

GridView1.DataBind();

}

}

 

Önemli noktalar:

·    SqlFullTextQuey yapacaksanız, SELECT  ifadenizde Title, Path, Description, Write, Rank, and Size alanlarını bulundurmanız gerekmektedir.

·    Search servisine bağlanmak için kullandığımız site (bu örnekte http://mossSite) Windows Authentication olmalı ve anonim erişime kapalı olmalıdır. (Kodda DefaultCredentials kullanıyoruz çünkü.) Anonim erişimin açık olması durumunda Attempted to perform an unauthorized operation gibi bir hata alırsınız.

·    Search Web servisine bağlanıp Query’lerinizi test etmenizi sağlayan çok güzel bir Windows uygulaması var. Bu çok faydalı uygulamayı kesinlikle indirmenizi tavsiye ederim. SharePointSearchWebServiceApp.exe

Linkler:

Microsoft.Search.Query Schema for Windows SharePoint Services Search

Windows SharePoint Services Query Web Service

How to: Query Search using the Web Service

MOSS 2007 Kullanıcı Profilinden Veri Okumak

Sharepoint nesne modelini kullanarak kullanıcıların profil bilgilerine ulaşabilir, veri okuyup yazabiliriz.

Öncelikle projemize c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI altındaki Microsoft.Office.Server.dll'ni referans olarak ekliyoruz.

 

 

SPSite site = SPContext.Current.Site

//SPContextten site collection bilgisini alıyoruz. Eğer bu uygulamayı lokalde çalıştıracaksak SPContext.Current.Site yerine new SPSite("Site Adresiniz") şeklinde değiştiriniz.

 

ServerContext context = ServerContext.GetContext(site);

//Sitenin bulunduğu server contextine site bilgisini veriyoruz

UserProfileManager profileManager = new UserProfileManager(context);

//userprofile manager nesnesiyle bu contexteki kullanıcı bilgilerini alıyoruz.

UserProfile user = profileManager.GetUserProfile(HttpContext.Current.User.Identity.Name); ;

//Profile manager nesnesine kullanıcının adını geçiyoruz ve bilgileri alıyoruz. Burada HttpContext yerine SPContextte kullanabiliriz.

City = user["City"].Value.ToString();

//Listelerdeki aynı mantıkla user nesnesinin item "property"lerini geçerek gerekli bilgileri labelin textine atıyoruz.

Office = user["BuildingOffice"].Value.ToString();

Label1.Text = City + ";" + Office;

 

 

Bir sonraki yazımda veri yazmayı anlatacağım.

MOSS 2007 Kontrolleri Yetki Bazlı Göstermek - SPSecurityTrimmedControl

SPSecurityTrimmedControl sayesinde sharepoint içerisinde herhangi bir kontrolü,resmi ya da metni hiç kod yazmadan yetkilendirebiliyoruz.

Bu kontrolün bize sağladığı en büyük avantaj içerisindeki herhangi bir kontrolü (buton ,label vs) Permissions özelliğine yazdığımız yetki seviyesine göre göstermesi. Şimdi bu kontrolü nasıl kullanıyoruz onu görelim;

Öncelikle  

referansını usercontrolümüze ya da sayfamıza ekliyoruz. 

<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls" TagPrefix="SPControls" %>

SPSecurityTrimmed kontrolünü aşağıdaki gibi kullanıyoruz.

 

<SPControls:SPSecurityTrimmedControl ID="SPSecurityTrimmedControl1″ runat="server" Permissions="EditListItems">

//Kontrolleri bu taglarin arasına koyuyoruz

<asp:Panel ID="panel" runat="server">

<asp:LinkButton ID="lbtnApprove" CssClass="buttonM3″ runat="server" OnClientClick="return confirm('Onaylamak istediğinize emin misiniz?')" onclick="lbtnApprove_Click"><span>Onayla</span></asp:LinkButton><asp:LinkButton

ID="lbtnReject" runat="server" CssClass="button" OnClientClick="return confirm('Reddetmek istediğinize emin misiniz?')" onclick="lbtnReject_Click"><span>Reddet</span></asp:LinkButton>

</asp:Panel>

//Kontrolleri bu taglarin arasına koyuyoruz

</SPControls:SPSecurityTrimmedControl>

Permissions kısmında kullanılabilecek propertyler:

AddAndCustomizePages
AddDelPrivateWebParts
AddListItems
ApplyStyleSheets
ApplyThemeAndBorder
ApproveItems
BrowseDirectories
BrowseUserInfo
CancelCheckout
CreateAlerts
CreateGroups
CreateSSCSite
DeleteListItems
DeleteVersions
EditListItems
EditMyUserInfo
EmptyMask
EnumeratePermissions
FullMask
ManageAlerts
ManageLists
ManagePermissions
ManagePersonalViews
ManageSubwebs
ManageWeb
Open
OpenItems
UpdatePersonalWebParts
UseClientIntegration
UseRemoteAPIs
ViewFormPages
ViewListItems
ViewPages
ViewUsageData
ViewVersions

Ayrıca PermissionsString propertysini kullanarak birden fazla property ekleyebilmekteyiz.

1 - 10 Sonraki

 ‭(Gizli)‬ Yönetim Bağlantıları

Copyright©, 2009 SharepointNedir?Org