Makale Özeti

SharePoint 2010 ortamında, webpartlar arası iletişimin nasıl sağlandığına dair bir örnek uygulama.

Makale

Bu makalede SharePoint in önemli parçalarından olan WebPart ların birbiri ile nasıl konuşabileceğine dair bir örnek geliştireceğiz.

Öncelikle örneğimizde kullanmak için bir custom SPList oluşturalım. Site Actions > More Options > List > Custom List. Custom Listemize ben “Dersler” dedim. Siz istediğiniz gibi isimlendirebilirsiniz. Bu listeye elemanlar ekleyeceğim.(Matematik, Fizik, Geometri, Kimya...)

Listemi oluşturduktan sonra Visual Studio 2010 da yeni bir Empty SharePoint projesi oluşturuyorum ve proje ismini de “ConnectedWP” olarak belirliyorum.

Projeme bir Interface ekliyorum. IDers.cs (Add > New Item, Visual C# altından Code sekmesinden Interface seçiyorum)

namespace ConnectedWP { public interface IDers { int Id { get; } string Name { get; } } }

Daha sonra projemize, Provider WebPart ımızı ekliyoruz. (Add > New Item > WebPart), ismini ProviderWebPart olarak belirliyorum.

public class ProviderWebPart : WebPart kısmını, yeni interface imi kullanacak şekilde değiştiriyorum, yani şöyle oluyor : public class ProviderWebPart : Microsoft.SharePoint.WebPartPages.WebPart, IDers

Daha sonra, sınıfımızın içerisini şu şekilde dolduruyoruz :
DropDownList _projectPicker = null; int IDers.Id { get { return int.Parse(_projectPicker.SelectedValue); } } string IDers.Name { get { return _projectPicker.SelectedItem.ToString(); } }

Ardından da CreateChildControls metodunun içini şu şekilde değiştiriyoruz.

base.CreateChildControls(); try { _projectPicker = new DropDownList(); using (SPSite spSite = new SPSite(SPContext.Current.Web.Url)) using (SPWeb spWeb = spSite.OpenWeb()) { SPList projectsList = spWeb.Lists["Dersler"]; foreach (SPListItem project in projectsList.Items) { _projectPicker.Items.Add(new ListItem(project.Name, project.ID.ToString())); } } _projectPicker.AutoPostBack = true; this.Controls.Add(_projectPicker); } catch (Exception ex) { this.Controls.Clear(); this.Controls.Add(new LiteralControl(ex.Message)); }

Son olarak da WebPartlarımız arası bağlantı noktasını oluşturacak kodumuzu ekliyoruz,
[ConnectionProvider("Ders Adi ve ID")] public IDers HerhangiBisey() { return this; }

Sıra şimdi Consumer WebPartımıza geldi, ilk WebPartımızı eklediğimiz gibi bunu da aynı şekilde ekliyor ve adını “ConsumerWebPart” koyuyorum. WebPart ın kod kısmına geçip class tanımının hemen altına şunları ekliyorum (Dikkat ederseniz burada, WebPartımızın türediği kısma dokunmadık)

IDers _provider = null; Label _lbl = null;

Yine CreateChildControls metoduna gidip şu şekilde değiştiriyoruz :

base.CreateChildControls(); try { _lbl = new Label(); if (_provider != null) { if (_provider.Id > 0) { _lbl.Text = _provider.Name + " seçildi."; } else { _lbl.Text = "Henüz hiçbirşey seçilmedi."; } } else { _lbl.Text = "Provider WebPart bağlantısı yok."; } this.Controls.Add(_lbl); } catch (Exception ex) { this.Controls.Clear(); this.Controls.Add(new LiteralControl(ex.Message)); }

Ve yine son olarak WebPart lar arası bağlantıyı kuracak kod bloğumuzu da ekliyoruz :
[ConnectionConsumer("Ders Adi ve ID")] public void BurasininIsmıFarkEtmez(IDers providerInterface) { _provider = providerInterface; }

Artık WebPartlarımızı deploy edebiliriz. Deploy ettikten sonra bir WebPartPage oluşturup (SiteActions > More Options > Page > WebPartPage), bu sayfada , deploy ettiğimiz WebPartları kullanıp test edebiliriz. Ben sayfama “ConnectedWPTest” adını verdim ve SitePages in altına koydum. Daha sonra WebPart larımı bu sayfaya eklemek için herhangi bir yerden “Add a Web Part” seçtim ve Custom kategorisi altında bulunan ConsumerWebPartımı sayfaya yerleştirdim.

Aynı şekilde Provider WebPartımı da ekliyorum. En son adım olarak da, WebPartları birbirine bağlama işlemi için, ProviderWebPart ın “Connections” kısmına gidip, “Send Ders Adi ve ID to Consumer Web Part” ı seçiyorum.

İşlem tamam, sayfama gidip test ediyorum, DropDownList de bulunan dersler (ilk adımda yarattığımız SP Custom List den doluyor) den birini seçtiğimde, ConsumerWebPart ımda bulunan Label değişiyor.


Umarım işinize yarar bir makale olmuştur.