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.
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.
Yeni menüsünden Yeni Grup bağlantısnı seçelim.
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.
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.
Açılan sayfadan Özel Liste'yi seçelim
İ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
Açıklama
Durum
Hesap
Gruplar
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.
İleri deyip servisin hangi Fonksiyonunu kullanacağımızı seçelim. Bizim için lazım olan GetUserProfileByName fonksiyonu.
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.
Ş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.
İleri deyip Web Servisinin sunduğu fonksiyonlar listenden GetGroupCollectionFromUser fonksiyonunu seçip ileri diyoruz.
İ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.
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.
Bu işlemleri tamamladıktan sonra InfoPath formumuzda sağ tarafta Alanlar kısmımız şu şekilde gözükecektir.
Ve formumuz ise şu şekilde gözükecektir.
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.
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.
Alanlar kısmı şu şekilde gözükmesi lazım
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.
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.
Çıkan dosyalar şu şekilde olmalı:
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.
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.
İkinci bir değişiklik için kodumuzda aşağıdaki satırları
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.
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:
Ş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.
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.
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ı.
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.
Ş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.
Ş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.
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.
İ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.
Açılan sayfada listemizi seçerek orada gözüken WebPartPages yazan kısmı tıklayarak tüm listemizi seçelim.
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.
Bu işlemlerden sonra değişiklikleri kaydedelim.
Denemek için bir kayıt girelim. Kayıt girildikten sonraki hali bu şekilde olmalı.
Birazdan yapacağımız Filtrelemeyi görebilmek için başka bir kullanıcı ile başka bir kayıt girelim.
Ş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.
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.
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.
Sonuç olarak tarayıcımızda ilgili listeyi standart bir kullanıcı ile açtığımızda aşağıdaki görüntüyü
Arıza Sorumluları Grubuna üye bir kullanıcı ile açtığımızda aşağıdaki görüntüyü alacağız.
Bir sonraki makalemizde görüşmek üzere.