Bu makalemizde Sharepoint 2010 Projelerimizde çok sık kullanılan, Liste oluşturmak, InfoPath üzerinde form tasarlamak, Sharepoint 2010 ile beraber gelen Web Servisleri ile bağlantı kurup, veri alıp göndermek, Sharepoint Designer kullanarak oluşturduğumuz listeleri filtrelemek, InfoPath üzerinde belli alanları belli kullanıcılardan gizlemek veya belli kullanıcılara göstermek gibi konulara değineceğiz.
Konuları listelemek gerekir ise:
· Sharepoint Listesi Oluşturmak
· Sharepoint Grubu Oluşturmak
· InfoPath 2010'da oluşturacağımız formda, belli bir alanın, belli Sharepoint Grubu tarafından görülebilmesini sağlamak
· InfoPath üzerinde Veri Bağlantısı oluşturarak Sharepoint Web Servislerinden yararlanmak
· Sharepoint Designer'da Listeleri belli kriterlere göre filtrelemek
· Sayfamıza hali hazırda olan bir listeyi web part olarak eklemek
· Sayfalar üzerinde web bölümlerinin Sharepoint üzerindeki belli gruplar tarafından görünmesini sağlamak
· Yapacağımız işlemin sürecinden bahsetmek gerekirse
· Şirket içerisinde görülen bazı aksaklıkların ilgili kişiye iletilerek, ilgili kişinin (Arıza Sorumlusu diye tabir edeceğim), arıza veya sorunu ilgili birime yönlendirerek sorun veya arızanın giderilmesini sağlamak
Adımlar
· Şirket personeli gördüğü arızayı Sharepoint Portalına kaydedecek
· Oluşturulan kayıt Arıza Sorumlusunun önüne düşecek
· Arıza Sorumlusu ilgili kaydı inceleyip, konunun muhatabı olan birime yönlendirecek
· Sorun giderildiğinde Arıza sorunlusu ilgili kaydı Sorun giderildi şeklinde güncelleyecek
· Şirket personeli sadece kendi oluşturduğu kayıtları görebilecek
· Arıza Sorumlusu her kaydı görebilecek
Sharepoint Sitemizde Grup Oluşturmak
Sitemizi açıp, Site Eylemleri kısmından Site Ayarlarını seçelim.
![image001 image001]()
Açılan sayfadan Kullanıcı ve İzinler başlığı altında yer alan Kişiler ve gruplar bağlantısını açalım. Ardından sol üstte yer alan Gruplar bağlantısını açalım.
![image002 image002]()
![image003 image003]()
Yeni menüsünden Yeni Grup bağlantısnı seçelim.
![image004 image004]()
Açılan formda Ad olarak Arıza Sorumluları yazalım. Burada dikkat edeceğimiz husus Grup üyeliğini kimler görüntüleyebilir? Kısmını Herkes olarak seçili olmasıdır.
![image005 image005]()
Bu gruba üyeliği olanlar Tüm kayıtları görebilecek ve Arıza Kaydı oluştururken kullanılacak formda kullanıcılardan saklanan bazı alanları görebilecek.
Sharepoint Listesi Oluşturmak
Sharepoint Portalımız üzerinde Site Eylemleri'ni açıp Diğer Seçenekler kısmını seçelim.
![image006 image006]()
Açılan sayfadan Özel Liste'yi seçelim
![image007 image007]()
İsim olarak ta Arıza / Sorun Bildirimi olarak belirleyelim.
Listemiz oluşturulduktan sonra Liste Araçları'ndan / Liste / Formu özelleştir seçeneğini seçelim.
InfoPath 2010 Üzerinde Form ve Sharepoint Web Servisleri ile Veri Bağlantısı Oluşturmak
Formumuzda gerekli olan alanlar şunlardır:
Başlık (Metin Kutusu, Boş olamaz, Varsayılan olarak zaten geliyor)
Ek (Ek, Boş olabilir, Varsayılan olarak zaten geliyor)
Açıklama (Zengin Metin Kutusu, Boş olamaz, isteğe bağlı olarak zengin metin özelliği kaldırılabilir.)
Durum (Açılan Liste Kutusu, Boş olamaz. Varsayılan Değer olarak "Arıza Sorumlusuna İletildi" yazın. Seçimleri ise aşağıdaki resimdeki bilgilere benzer bilgiler girebilirsiniz.)
Hesap (Metin Kutusu, hesap bilgilerini alırken gerekli)
Gruplar (Açılan Liste Kutusu, Sharepoint üzerindeki grup bilgilerini alırken kullanılacak. Sadece bilgilerin gelip gelmediğini görmek amaçlı ihtiyaten oluşturulmuş bir denetim.)
Bu alanlardan Durum Açılan Liste Kutusu standart kullanıcılardan gizlenecek, sadece Arıza Sorumluları grubuna üye kullanıcılar tarafından değiştirilebilecek ve görüntülenebilecek.
Başlık
![image008 image008]()
Açıklama
![image009 image009]()
![image010 image010]()
Durum
![image011 image011]()
![image012 image012]()
![image013 image013]()
Hesap
![image014 image014]()
![image015 image015]()
Gruplar
![image016 image016]()
InfoPath üzerinden Sharepoint Web Servisleri ile Veri Bağlantısı Oluşturup Bilgi Almak
Daha öncede bahsettiğim üzere hazırladığımız bu formda Durum kısmını sadece Arıza Sorumluları Grubu üyeleri erişebilir ve değiştirilebilir hale getireceğiz.
İlk olarak InfoPath üzerindeki Ribbon Menüde yer alan Veri sekmesinden Web Hizmetinden kısmında yer alan SOAP Web Hizmetinden kısmını seçeceğiz.
Karşımıza çıkan pencereye ilk olarak http://sharepoint_adresi/_vti_bin/UserProfileService.asmx adresini yazacağız. Bu servis ile Sharepoint içerisinde hazırladığımız bu formu açan kişinin hesap bilgilerine ulaşabileceğiz.
![image017 image017]()
İleri deyip servisin hangi Fonksiyonunu kullanacağımızı seçelim. Bizim için lazım olan GetUserProfileByName fonksiyonu.
![image018 image018]()
Tekrar ileri deyip açılan sayfada Form açıldığında verileri otomatik olarak al seçeneğinin seçili olduğuna dikkat edip işlemimizi tamamlayalım.
![image019 image019]()
Şimdi ise formu açan kullanıcımızın hangi Sharepoint gruplarına üye olduğu bilgilerine ulaşmak için başka bir Web Servisini formumuzun Veri Bağlantılarına ekleyeceğiz.
Tekrar aynı adımları tekrarlayarak web servisini yazacağımız kısmı gelelim. Bu sefer adres olarak http://sharepoint_adresi/_vti_bin/UserGroup.asmx gireceğiz.
![image020 image020]()
İleri deyip Web Servisinin sunduğu fonksiyonlar listenden GetGroupCollectionFromUser fonksiyonunu seçip ileri diyoruz.
![image021 image021]()
İleri deyip bir sonraki ekrana geçelim. Bu ekranda bizden fonksiyonun çalışması için örnek bir parametre değeri istiyor. Parametremiz görebileceğiniz üzere string türünde bilgi içeren bir değişken olan userLoginName. Buraya örnek olarak bir değer yazın.
![image022 image022]()
Ben örnek olarak contoso\hasan yazdım (domain\kullanıcı adı).
Sonra ileri deyip bir sonraki ekrana geçiyoruz. Bu ekranda bir önceki ekrandaki aynı bilgilere benzer bilgiler soracak. Bu ekran bir şey yapmadan ileri diyelim. Form şablonunda verilerin bir kopyasını depola kısmını boş bırakıyoruz. Tekrar ileri diyelim. Bu sefer Form açıldığında verileri otomatik olarak al seçeneğini boş bırakıyoruz.
![image023 image023]()
![image024 image024]()
![image025 image025]()
Bu işlemleri tamamladıktan sonra InfoPath formumuzda sağ tarafta Alanlar kısmımız şu şekilde gözükecektir.
![image026 image026]()
Ve formumuz ise şu şekilde gözükecektir.
![image027 image027]()
Bu kısma kadar geldikten sonra sol üst taraftan Hızlı Yayımla düğmesine basalım ve formumuzu bu hali ile portalımızda yayınlayalım.
![image028 image028]()
Normal şartlarda GetGroupCollectionFromUser fonksiyonu bizim işimize yaramıyor. Çünkü geri döndürdüğü sonuçlara bakar isek istediğimiz bilgileri içermiyor. Bunu görmek için sağ tarafta yer alan Alanlar kısmının altında yer alan Gelişmiş görünümü göster i tıklayalım.
![image029 image029]()
Alanlar kısmı şu şekilde gözükmesi lazım
![image030 image030]()
Orada Ana yazan yeri değiştirip GetGroupCollectionFromUser (İkincil) ı seçelim
Aşağıdaki alanlardan dataFields kısmını sonuna kadar genişletince son olarak geri dönen değer olan userLoginName i görebiliriz.
![image031 image031]()
Dediğim gibi bu bilgi işimize yaramıyor. Bu sorunu halledebilmek için farklı bir yol deneyeceğiz.
Formumuzun bu halini portalımıza yayınladığımızı farzediyorum. Sonra InfoPath'ten sırasıyla Dosya / Yayımla / Kaynak Dosyalarını Ver i seçip, dosyaları çıkartacağı bir klasör belirtelim.
![image032 image032]()
Çıkan dosyalar şu şekilde olmalı:
![image033 image033]()
Burada bizim değişiklik yapacağımız dosya GetGroupCollectionFromUser1.xsd . Aşağıdaki işlemleri yapmadan önce mutlaka, açık ise eğer InfoPath programını kapatın. Bu dosyayı bir Metin Editörü ile açalım.
![image034 image034]()
Açılan dosyamızda 3. satırda yer alan <s:import ile başlayan kısmın hemen altına aşağıdaki kodu yapıştıralım.
<s:complexType name="GetGroupCollectionFromUserType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userLoginName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Groups">
<s:complexType>
<s:sequence>
<s:element maxOccurs="unbounded" name="Group" >
<s:complexType>
<s:attribute name="ID" type="s:unsignedShort"></s:attribute>
<s:attribute name="Name" type="s:string"></s:attribute>
<s:attribute name="Description" type="s:string"></s:attribute>
<s:attribute name="OwnerID" type="s:unsignedByte"></s:attribute>
<s:attribute name="OwnerIsUser" type="s:string"></s:attribute>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
Kodumuz aşağıdaki gibi gözükecektir.
![image035 image035]()
İkinci bir değişiklik için kodumuzda aşağıdaki satırları
![image036 image036]()
bu kod ile değiştirin
<s:element name="GetGroupCollectionFromUser" type="tns:GetGroupCollectionFromUserType" />
Bu işlemlerden sonra dosyamızı kaydedip kapatalım.
Sonra dosyalarımızdan manifest.xsf dosyamıza sağ tıklayıp Tasarla seçeneğini seçelim.
![image037 image037]()
InfoPath formumuz tekrar açıldığında yaptığımız değişikliklerin sonuçlarını görmek için Alanlar kısmından GetGroupCollectionFromUser (İkincil) kısmını seçip, dataFields kısmını sonuna kadar genişletelim. Sonuç olarak aşağıdaki görüntüyü görmeniz gerekiyor:
![image038 image038]()
Şimdi formumuzda bulunan Hesap alanını sağ tıklayıp özelliklerini açalım. Orada bulunan Varsayılan değer kısmının yanında yer alan fx düğmesini tıklayalım ve Formul Ekle penceresini açalım. Oradan Alan veya Grup Ekle düğmesine tıklayalım, açılan pencereden GetUserProfileByName (İkincil) alanını seçelim.
![image039 image039]()
![image040 image040]()
![image041 image041]()
Açılan pencereden dataFields kısmını sonuna kadar açıp Value değerini seçelim ve Verilere Filtre Uygula düğmesine basalım. Açılan Verilere Filtre Uygula penceresinden Ekle düğmesine basalım. Açılan pencereden Value yazan yeri açıpAlan veya Grup Seç i seçelim. Veri Kaynağı olarak GetUserProfileByName 'i seçip PropertyData kısmından Name 'i seçip Tamam diyelim. Sonra ortadaki alanı eşittir olarak belirleyelim. 3. yani en son alandan ise "Metin Yazın" kısmını seçip oraya AccountName yazın ve Tamam deyin.
![image042 image042]()
![image043 image043]()
![image044 image044]()
![image045 image045]()
![image046 image046]()
![image047 image047]()
![image048 image048]()
Tamam deyip pencereleri kapatalım. Bu sayede form açıldığında, formu açan kullanıcının hesap bilgilerinden hesap adı Hesap alanında belirecek. Formu tarayıcıda açtığınız zaman ekran görüntüsü aşağıdaki benzer olmalı.
![image049 image049]()
Sıra kullanıcıdan elde ettiğimiz bu hesap bilgisini parametre olarak GetGroupCollectionFromUser fonksiyonuna parametre olarak yollamaya geldi.
InfoPath üzerinden Kuralları Yönet butonu seçilir. Sağ tarafta Kurallar kısmı açılır. Alanlar kısmından GetUserProfileByName seçilir. Aşağıdan dataFields kısmından PropertyData seçilir. Bu kısım seçilince sağ tarafta yer alan Kurallar kısmı aktif hale gelir. Oradan Yeni düğmesine tıklanır ve ardından Eylem Seçilir. Koşul kısmında Yok - Kural, alan değiştiğinde çalışır tıklanır ve açılan Koşul penceresinde daha önce yaptığımız gibi ilk kutuda Name seçilir, ikinci kutuda eşittir ve üçüncü kutuya ise AccountName yazılır ve Tamam'a basılır. Bu eylemleri çalıştır kısmında ise Ekle diyerek ilk olarak Alanın değerini ayarla seçilir ve açılan pencerede Alan kısmına GetGroupCollectionFromUser kısmının altında yer alan queryFields altındaki userLoginName seçilir. Değer kısmı içinse formumuzda yer alan Hesap alanı seçilir. Bu işlemden sonra yine aynı kural içerisinden Ekle diyerek Verileri Sorgula seçeneği seçilir. Açılan pencereden GetGroupCollectionFromUser seçilerek Tamam düğmesine basılır.
![image050 image050]()
![image051 image051]()
![image052 image052]()
![image053 image053]()
![image054 image054]()
![image055 image055]()
![image056 image056]()
![image057 image057]()
![image058 image058]()
![image059 image059]()
![image060 image060]()
![image061 image061]()
Şimdi buraya kadar ne yaptığımızı özetlemek gerekirse:
1. Formumuza, formu açan kullanıcının hesap bilgilerini almak için Sharepoint UserProfileService web servisini formumuzun Veri Bağlantılarına ekleyerek bu web servsininin fonksiyonlarından GetUserProfileByName fonksiyonunu çağırdık.
2. Bu fonksiyonun form açılır açılmaz otomatik çalıştırılmasını seçtik.
3. Web servisinden gelen bilgilerden bize lazım olan AccountName bilgisini filtreleyerek form alanlarımızdan Hesap alanının varsayılan değeri olarak ayarladık.
4. Formu açan kullanıcının sharepoint grup bilgilerini almak içinse başka bir web servisi olan UserGroup web servisini formumuzun Veri Bağlantılarına ekledik ve bu web servsinin fonksiyonlarından GetGroupCollectionFromUser fonksiyonunu çağırdık.
5. Hatırlayacağınız üzere GetGroupCollectionFromUser fonksiyonu için bir userLoginName parametresinin örnek değerini ayarladık ve form açılınca otomatik olarak çalıştırılmaması konusunda ayarlama yaptık.
6. GetGroupCollectionFromUser fonksiyonunun çalışması için gerekli olan parametre değerini ayarladık ve Verileri Sorgula diyerek fonksiyonu çalıştırdık ve bizlere değer döndürmesini sağladık.
Şimdi ne gibi veriler geri dönmüş görebilmek için geri dönen verilerle daha önceden oluşturduğumuz Grup alanı (Açılan Liste Kutusu) içerisini dolduracağız. Grup alanını seçip sağ tıklayarak özelliklerinin bulunduğu pencereyi açalım. Orada Liste kutusu seçenekleri altında yer alan seçeneklerden Seçimleri dış veri kaynağından al seçeneğini seçelim. Veri Kaynağı olarak GetGroupCollectionFromUser ı seçip Girdiler kısmında ise dataFields altında yer alan Group 'u seçelim. Değer ve Görünen Ad otomatik olarak dolacaktır. Değer kısmını @ID ve Görünen Ad kısmını da @Name olarak ayarlayalım. Formumuzu tarayıcı üzerinde açtığımızda Grup alanının içerisinin dolduğunu göreceksiniz. Formu açan kullanıcı herhangi bir grupta üyeliği bulunmuyorsa liste kutusu boş gelecektir.
![image062 image062]()
![image063 image063]()
![image064 image064]()
![image065 image065]()
![image066 image066]()
![image067 image067]()
Şimdi sıra Durum alanını standart kullanıcılardan saklamaya geldi. Kurallar Penceresi kapalı ise orayı açalım. Alanlar penceresinden Durum alanını seçelim. Kurallar kısmından Yeni diyerek Biçimlendirme'yi seçelim. Koşul olarak ilk bölümdenAlan veya Grup seçin diyerek açılan pencereden Veri Kaynağı olarak GetGroupCollectionFromUser 'ı seçip aşağıdan dataFields kısmından Name'i seçelim. Aynı pencerede alt kısımda yer alan Seç yazan yerden Tüm Name Oluşumları nı seçip tamam diyelim. İkinci bölümü içermez olarak seçelim. Üçüncü bölüme ise Metin Yaz diyerek, daha önce oluşturduğumuz bir grup olan Arıza Sorumluları yazalım. Sağ tarafta yer alan Ve ibaresini Veya olarak değiştirelim. Altta açılan ikinci koşul için yine Name i seçelim ama Seç kısmından Name oluşumu sayısı olarak belirleyelim. ikinci alan için eşittir diyelim. Üçüncü alan için (sayı ile) 0 yazalım. Tamam diyerek açık pencereleri kapatalım. Son olarak en altta yer alan Bu denetimi gizle seçeneğini seçelim. İsteğe bağlı olarak Bu denetimi devre dışı bırak olarak ta seçebilirsiniz. Sonra form alanımızdan Hesap ve Gruplar alanımızı kaldıralım. Dikkat edin form alanından kaldırın, Alanlarım kısmından kaldırmayın. Formumuzu standart ve ilgili gruba üye bir kullanıcı ile açarak sonuçlarını görebiliriz. Burada şunu sorabilirsiniz. Seç kısmında Herhangi bir name oluşumu seçeneğini niye seçmedik. Normal şartlarda Herhangi bir name oluşumu eşit değildir "Arıza Sorumluları" yapmamız gerekirken hâlen nedenini bilmediğim bir sebepten ötürü bu koşulu çalıştıramadım.
![image068 image068]()
![image069 image069]()
![image070 image070]()
![image071 image071]()
![image072 image072]()
![image073 image073]()
![image074 image074]()
![image075 image075]()
![image076 image076]()
Sharepoint Designer 2010 İle Varolan Listeyi Filtrelemek
Yapacağımız işlem, portalımızda oluşturduğumuz listeyi tarayıcıdan listeyi açan kullanıcımızın sadece kendi oluşturduğu kayıtları ve sadece gerekli olan alanları görebilmesini sağlamak.
Şu an için liste aşağıdaki gibi bir görünüme sahip olması lazım.
![image077 image077]()
İlk olarak Sharepoint Designer 2010 programımızdan Arıza / Sorun Bildirim Listemizi açalım. Listemizden sağ üst tarafta olan Görünümler bölümünden Tüm Öğeler görünümünü seçelim.
![image078 image078]()
Açılan sayfada listemizi seçerek orada gözüken WebPartPages yazan kısmı tıklayarak tüm listemizi seçelim.
![image079 image079]()
Yukarı menüde Sütun Ekle / Kaldır 'ı tıklayarak Görüntülenen Alanlar kutusunu açalım. Bize lazım olan sütunları ekleyelim (Oluşturan, Oluşturma Tarihi) ve gerekli olmayan sütunları kaldıralım (Hesap, Gruplar). Bu hali ile aşağıdaki görüntüyü elde etmiş olmalısınız.
![image080 image080]()
![image081 image081]()
![image082 image082]()
![image083 image083]()
Bu işlemlerden sonra değişiklikleri kaydedelim.
Denemek için bir kayıt girelim. Kayıt girildikten sonraki hali bu şekilde olmalı.
![image084 image084]()
Birazdan yapacağımız Filtrelemeyi görebilmek için başka bir kullanıcı ile başka bir kayıt girelim.
![image085 image085]()
Şimdi Listemizin olduğu sayfaya ikinci bir liste eklemek için Site Eylemlerinden Sayfa Düzenle'yi tıklayalım. Bu sayede sayfayı düzenleyebilir hale getirelim. Orada çıkan Web Bölümü Ekle bağlantısını tıklayarak yukarıda açılan menüden Listeler ve Kitaplıklar bölümünden Arıza ve Sorun Bildirme listesini seçerek Ekle diyelim. Sonuç olarak sayfamızda aynı listeden iki tane olacaktır. Bu listelerden bir tanesini kendi kayıtlarımız için, diğerini sadece Arıza Sorumluları grubuna üyelikleri bulunan kullanıcıların tüm kayıtları görebilmesi için kullanacağız.
![image086 image086]()
![image087 image087]()
Listelerden üstte olanı seçip, listenin sağ üst tarafında yer alan Tik kutusunu işaretleyip, yan tarafındaki aşağı yön okunu seçerek oradan Web Bölümünü Düzenle bağlantısını tıklayarak ekranın sağ tarafında Web Bölümü ile ilgili ayarların yer aldığı kutuyu açalım. Oradan Başlık kısmında Arıza / Sorun Kayıtlarım yazalım. Krom Türü olarak ise görselliği ön plana çıkarmak için Başlık ve Kenarlık seçeneğini seçelim ve Tamam diyerek kutuyu kapatalım. Alttaki listeyi de seçerek, listenin Web Bölümü Özelliklerinin olduğu kutuyu açalım. Başlık kısmına Tüm Kayıtlar yazalım. Krom Türü olarak yine Başlık ve Kenarlıklar diyelim. Gelişmiş kısmını genişletelim ve orada yer alan Hedef İzleyiciler kısmının yanında yer alan adres defteri ikonunu tıklayalım. Açılan İzleyicileri Seç penceresinden Sharepoint Gruplarında, arıza şeklinde arama yaparak Arıza Sorumluları grubumuzu bulup aşağıda yer alan kutuya ekleyelim. Tamam diyerek Web Bölümü özellikleri kutusunu kapatalım. Bu sayede Aynı sayfayı standart kullanıcılar sadece kendi kayıtlarını görebilecekken, Arıza Sorumluları grubuna üye kullanıcılar Tüm kayıtların listelendiği ikinci bir liste daha görebilecek. Düzenlemeyi Durdur diyerek işlemimizi tamamlayalım.
![image088 image088]()
![image089 image089]()
![image090 image090]()
Standart kullanıcılar şu an için tüm kayıtları görebiliyor. Sadece kendi kayıtlarını görmesini sağlamak için Sharepoint Designer'dan listemizi ve sonra Tüm Öğeler görünümünü açalım. Sayfada yapmış olduğumuz gibi iki liste gözükecektir. Biz üstteki listeyi Arıza / Sorun Kayıtlarım olarak isimlendirmiştik. O listenin üzerine tıklayıp, WebPartPages kısmını seçerek ilgili listeyi seçelim. Ardından Menü'nün sol üst tarafında yer alan Filtre düğmesini tıklayarak Filtre Ölçütleri kutusunu açalım. Açılan pencereden İlk kısımda Oluşturan'ı seçelim, ikinci kısımda Eşittir'i seçelim ve üçüncü kısımda ise Geçerli Kullanıcı'yı seçip Tamam diyelim. Böylece ne yapmış olduk, listemizdeki Oluşturan kısmındaki bilgi, Formu açan kullanıcıya eşit olduğu kayıtları listeletmiş olduk. Sol üst kısımdan kaydet diyerek yaptığımız değişikliği kaydedelim.
![image091 image091]()
![image092 image092]()
![image093 image093]()
Sonuç olarak tarayıcımızda ilgili listeyi standart bir kullanıcı ile açtığımızda aşağıdaki görüntüyü
![image094 image094]()
Arıza Sorumluları Grubuna üye bir kullanıcı ile açtığımızda aşağıdaki görüntüyü alacağız.
![image095 image095]()
Bir sonraki makalemizde görüşmek üzere.