Sharepoint’e sharepoint’in kurulu olmadığı bir makineden bağlanarak işlemler yapmak istiyorsanız , sharepoint webservisleri kullanmalısınız. Sharepoint webservisleri ile sharepoint arayüzünden yapabildiğiniz birçok özelliği kullanabilirsiniz. Server üzerinde olmayan uygulamalar ile örneğin listelere bağlanmak, veri kayıt, silme , güncelleme gibi işlemleri yapabilirsiniz.
Sharepoint webservis uygulamaları ile yapacağınız uygulamalar sayesinde kullanıcılara sharepoint portal sayfanızı göstermeden sharepoint üzerinde yapmasını istediğiniz tüm işlemleri yapmanız mümkündür. Ayrıca sharepoint’te oluşan durumların farklı makinelerden kontrolü sonrası kullanıcıların uyarılması ya da bilgilendirme maili atılması gibi daha aklıma gelmeyen birçok işlemi servisler sayesinde gerçekleyebiliriz.
Yapacağımız projede sharepoint sitecollection’a webservis yardımı ile bağlanacağız. Gerekli Web Referanslar’ını ekleyeceğiz. Sitecollection üzerindeki sayfaları listeleyeceğiz. Ardından kullanıcının seçmiş olduğu sayfadaki tüm listeleri kullanıcıya göstereceğiz. Son olarak kullanıcının seçmiş olduğu listedeki tüm item’ları çekeceğiz.
Projemiz 3 kısımdan oluşacak : Siteleri listelemek ; Seçilen sayfadaki üm listeleri çekmek ;Seçilen listedeki kayıtları çekmek
Visual studio ile yeni bir Windows Form Application oluşturalım.
1)Siteleri listelemek : Oluşturduğumz projede , sharepoint portal sayfasında bulunan siteleri listelemek için projeye sağ tıklayarak Add Sevice Reference diyoruz. Karşımıza çıkan ekran Advanced seçeneğine bastıktan sonra karşımıza çıkan ekranda sol alta köşede Add Web Reference çıkacaktır , bu seçeneğe tıklıyoruz. Add Web Reference ekranında URL kısmına listeler ile işlem yapacağımız için siteleri çekebileceğimiz http://sharepointsite/_vti_bin/webs.asmx adresini URL kısmına yazıyoruz. Web referansa istediğiniz bir isim verdikten sonra tamam’a basıyoruz.

Web Referansında dikkat edilmesi gereken web servis URL ‘dir. http://sharepointsite/vti_bin/webs.asmx Url’inde olduğu gibi hangi sitecollection üzerinden bağlantı kuracağımız /vti_bin/webs.asmx ekinden önceki sayfa Url’idir. Örneğin : projeyi geliştirdiğimiz makinede spoint:1000 ve spoint:1000/examplesitecollection Url’leri altında farklı iki sitecollection var. Web servis eklerken url’lerimiz şu şekilde olmalıdır.
http://spoint:1000/vti_bin/webs.asmx
http://spoint:1000/examplesitecollection/vti_bin/webs.asmx
Web referansı projeye ekledik. Şimdi proje Form’una bir Button ve hemen altına da bir Listbox ekliyoruz. Button tıkladığında bağlı olduğumuz sitecollection altındaki tüm listeleri web servis yardımı ile çekerek listbox’da listeleyeceğiz. Button_Click olayına şu kod parçasını ekliyoruz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Windows.Forms;
namespace SharepointWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
spointwebs.Webs webColl = new SharepointWebService.spointwebs.Webs();
webColl.UseDefaultCredentials = true;
listBox1.Items.Clear();
listBox1.Items.Add(webColl.Url.Remove(webColl.Url.IndexOf('_')));
XmlNode xNode = webColl.GetWebCollection();
foreach (XmlNode xchild in xNode.ChildNodes)
{
listBox1.Items.Add(xchild.Attributes["Url"].Value);
}
}
}
} |
Yukarıdaki kodda webColl.UseDefaultCredentials = true; satırı bağlanan kullanıcının yetkilerini kullan anlamına gelir. Eğer bu satırı kodda kullanmaz iseniz izinlere takılacak muhtemelen hata alacaksınız. Bu satır yerine yeni bir yetki tanımlaması yada sabit bir kullanıcı da verebilirsiniz.

2) Seçilen sayfadaki tüm listeleri çekmek : Siteleri çekip listeledikten sonra kullanıcın listelenen sitelerden herhangi birini seçmesi durumunda , seçilen sitenin listelerini, Form’a ekleyeceğimiz listbox’ta görüntüleyeceğiz. Bu işlem için projeye sağ tıklayarak Add Web Reference diyoruz URL kısmına http://sharepointsite/_vti_bin/lists.asmx yazıyoruz. Bu web servis ile listelere erişilebilir ve listeler üzerinde tüm işlemler yapılabilir. İlk aşamada siteleri listbox1′de listemiştik. Listbox1 seçim olayına liste çektiğimiz kodu ekliyoruz. Kod aşağıdaki şekilde oluşacaktır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| namespace SharepointWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
spointwebs.Webs webColl = new SharepointWebService.spointwebs.Webs();
webColl.UseDefaultCredentials = true;
listBox1.Items.Clear();
listBox1.Items.Add(webColl.Url.Remove(webColl.Url.IndexOf('_')));
XmlNode xNode = webColl.GetWebCollection();
foreach (XmlNode xchild in xNode.ChildNodes)
{
listBox1.Items.Add(xchild.Attributes["Url"].Value);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
spointlists.Lists listCol = new SharepointWebService.spointlists.Lists();
listCol.Url = listBox1.SelectedItem.ToString() + "/_vti_bin/lists.asmx";
listCol.UseDefaultCredentials = true;
listBox2.Items.Clear();
XmlNode xNode = listCol.GetListCollection();
foreach (XmlNode xchild in xNode.ChildNodes)
{
listBox2.Items.Add(xchild.Attributes["Title"].Value);
}
}
}
} |
Burada dikkat edilmesi gereken durum , listCol.Url = listBox1.SelectedItem.ToString() + “/_vti_bin/lists.asmx”; satırıdır. Bağlandığımız ilk servis spoint:1000 url’i altındaydı. Eklediğimiz liste web servisinin url’ini kullanıcının seçimine bağlı olarak değiştiriyoruz. Böylece kullanıcının seçmiş olduğu siteye göre web servis url’i değişecek dolayısıyla seçilen sitenin listeleri ekranda listelenecektir.

3)Seçilen listedeki kayıtları çekmek : Son adıma gelene kadar siteleri ve listeleri listeledik. Şimdi ise seçilen liste verilerini ekleyeceğimiz listbox’a ayraç kullanarak listeyeceğiz. Son eklediğimiz liste web servisi ile bu işlemi yapmak mümkün fakat yazımızda ne kadar farklı web servis kullanırsak o kadar iyi olur diye düşünüyorum.(Burada kullandıklarımız dışında sharepoint web servislerinin tüm listesini açıklamalarıyla birlikte http://msdn.microsoft.com/en-us/library/bb862916(office.12).aspx adresinden bulabilirsiniz.)
Liste verilerini çekmek için kullanacağımız web servisi ekliyoruz. Web servisimizin URL’i http://sharepointsite/_vti_bin/sitedata.asmx şeklinde olacaktır. Site listelerini gösterdiğimiz listbox2 ‘deki seçim değiştiğinde kullanıcının seçmiş olduğu listenin verilerini göstereceğiz. Kod aşağıdaki şekilde olacaktır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
| namespace SharepointWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
spointwebs.Webs webColl = new SharepointWebService.spointwebs.Webs();
webColl.UseDefaultCredentials = true;
listBox1.Items.Clear();
listBox1.Items.Add(webColl.Url.Remove(webColl.Url.IndexOf('_')));
XmlNode xNode = webColl.GetWebCollection();
foreach (XmlNode xchild in xNode.ChildNodes)
{
listBox1.Items.Add(xchild.Attributes["Url"].Value);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
spointlists.Lists listCol = new SharepointWebService.spointlists.Lists();
listCol.Url = listBox1.SelectedItem.ToString() + "/_vti_bin/lists.asmx";
listCol.UseDefaultCredentials = true;
listBox2.Items.Clear();
XmlNode xNode = listCol.GetListCollection();
foreach (XmlNode xchild in xNode.ChildNodes)
{
listBox2.Items.Add(xchild.Attributes["Title"].Value);
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
spointlists.Lists listCol = new SharepointWebService.spointlists.Lists();
listCol.Url = listBox1.SelectedItem.ToString() + "/_vti_bin/lists.asmx";
listCol.UseDefaultCredentials = true;
spointsitedata.SiteData sdata = new SharepointWebService.spointsitedata.SiteData();
sdata.Url = listBox1.SelectedItem.ToString() + "/_vti_bin/sitedata.asmx";
sdata.UseDefaultCredentials = true;
spointsitedata._sWebMetadata md;
spointsitedata._sWebWithTime[] wt;
spointsitedata._sListWithTime[] lwt;
spointsitedata._sFPUrl[] furl;
string role;
string[] roles;
string[] rolesg;
uint i = sdata.GetWeb(out md, out wt, out lwt, out furl, out role, out roles, out rolesg);
Guid g = new Guid(md.WebID);
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Document><Query /><ViewFields /><QueryOptions /></Document>");
XmlNode x = listCol.GetListItems(listBox2.SelectedItem.ToString(), string.Empty, doc.SelectSingleNode("//Query"), doc.SelectSingleNode("//ViewFields")
, string.Empty, doc.SelectSingleNode("//QueryOptions"), g.ToString());
listBox3.Items.Clear();
foreach (XmlNode xchild in x.ChildNodes)
{
foreach (XmlNode xchild2 in xchild.ChildNodes)
{
if (xchild2.Attributes != null)
{
try
{
string item = string.Empty;
foreach (XmlAttribute att in xchild2.Attributes)
{
item = item + " @ " + att.Value;
}
listBox3.Items.Add(item);
}
catch (Exception )
{
listBox3.Items.Add("Liste \"Title\" kolonu içermiyor...");
}
}
}
}
}
}
} |

Umarım bu örnek sizler için yararlı olmuştur. Herkese iyi çalışmalar.