SharePoint 2013 – External Olarak C# ile Listelerine Erişim ve Yazdırma.

 

Form Tasarımına Hazırlık

Kurumsal mimari yazılımlarının başında gelen Sharepoint mimarisinde web servisleri üzerinden Sharepoint içerisinde yapmış olduğumuz uygulamalara erişebileceğimizi görmüştük. Şimdi ise mevcut bilgisayarımızdan C# vasıtası ile Sharepoint web sitemize bağlanarak içeride bulunan listeler üzerinden veri çekip, bunları bir rapor formatında nasıl gösterebileceğimizi ve yazdırabileceğimizi göreceğiz.

Başlamadan önce yazıda Devexpress Reporting Tool kullanacağımızdan eğer elinizde mevcut bir sürüm yok ise Demo sürümünü https://www.devexpress.com/ adresinden indirerek bilgisayarımıza kurmamız gerekmektedir.

Visual Stüdyo programımızı açarak yeni bir proje oluşturuyoruz. Proje türümüz Windows Forms Application olacak şekilde ayarlıyoruz ve proje lokasyonumuz ile ismini vererek kayıt ediyoruz.

Hemen ardından ikinci aşama olarak bize Sharepoint sistemimize erişebilmemiz için iki adet DLL lazım olacak bunlardan birincisi Microsfot.SharePoint.Client.dll ikincisi ise Microsoft.SharePoint.Client.Runtime.dll. Bu iki dll dosyasını projemize referans olarak ekliyoruz.

Form Tasarımı ve Kodlamaya Giriş

Buraya kadar projemizi az da olsa kod yazmak için hazırladık. Birazda form tasarımımıza el atacağız ve sonrasında biraz kod yazmaya geçeceğiz.

Öncelikli olarak sharepoint listelerinin listeleneceği bir treeview ya da listview ekrana koyuyoruz. Tercihen sol kısım uygun olacaktır. Ama GUI yerleşim tercihleriniz tabi ki size bağlıdır. Yazının başında da belirttiğimiz gibi ben Devexpress kullanacağımdan devexpress treeview kullanıyorum.

Sağ kısma ise bir DataGrid atarak formumuz tamamlıyoruz. Bu grid seçilen listedeki elemanları listelemek için kullanacağımız grid’dir. Ortalama olarak formumuz aşağıdaki şekilde görünmesi gerekiyor.

Sıra geldi biraz kodlamaya. Solda bulunan TreeView kontrolümüzü dolduralım öncelikle. Bunun için aşağıdaki kod bloğundan faydalanıyoruz. Önce kodu görelim ve ne işe yaradıklarını az da olsa açıklamaya çalışalım.

Çift tıklama yaparak Form Load kodumuza erişiyoruz. Yukarıdaki kodları yazıyoruz. Using satırları arasında mevcut olan sharepoint sitemize context bağlantısı gerçekleştiriyoruz. Bu aşamada Url adresimizi yazıyoruz.

  1. Web … Contexte bulunan current web’i burada alıyoruz ve hemen altındaki satır ile bu Web’e bağlı listelerin tümünü bir ListCollectiona atıyoruz. Daha Sonra Load ve Execute ederek işlemimizi tamamlıyoruz.
  2. TreeList için sadece liste isimlerini alacağımızdan yeni bir string list oluşturuyoruz.
  3. Foreach döngüsü yardımı ile ikinci madde de oluşturmuş olduğumuz listeye öğelerimizi ekliyoruz.

Şimdi bu kısımda bir programımızı test edelim. Ara ara bu aşamayı uygularsak daha net olarak hatalarımızı da çok geç olmadan kontrol etmiş olacağız.

Görüldüğü üzere sadece rakamlar geldi. “ Biz Title elementini map ettimiştik “ sorusuna cevap hemen aşağıda. TreeList özelliğine Run Designer vasıtası ile Column eklemediğimizden kendisi otomatik olarak bize liste adlarının uzunluklarını verdi. Hemen aşağıdaki şekilde Designer vasıtası ile column eklemek için konfigure ediyoruz.

Hemen akla gelen ilk soruya da bu noktada cevap vermek lazım. Bizim listemiz string tipinde eleman içeriyordu Title’ı nasıl okuyacak diye. Bu noktada kodumuzu tekrar revize ediyoruz.

Yeni bir class oluşturarak , List<string> olarak atamış olduğumuz listemizi ve foreach içerisindeki atamalarımızı revize ediyoruz.

Bu işlem sonrasında artık çalışan kodumuz aşağıdaki şekilde liste adlarımız TreeView içerisinde gözüküyor olması gerekecektir.

SharePoint Listelerin deki Öğelere Erişim

Listelerimiz hazır ve artık bu listelerin içindeki öğelere erişmeye geldi sıra. Senaryomuz gereği sol kısımda bulunan listenin içindeki öğeleri sağ kısımdaki Grid’e listeleyerek devam edeceğiz.

TreeList için click eventine kodlamaya yapmaya başlayalım. Seçim olduğu anda öğenin ismini alıp grid içerisine Sharepointden o listeye ait öğeleri döndürecek methodumuzu da yazalım.

Yukarıda oluşturmuş olduğumuz metodumuzun içini de aşağıdaki şekilde dolduruyoruz. Kod tamamen demo odaklı olup sadece gridden Rapor ekranına data sağlamak amacı ile yapılmıştır. Siz kendi istediğiniz doğrultusunda şekillendirerek kullanabilirsiniz.

Context’imize erişim sağladıktan sonra listemizi ismi ile beraber çağırıyoruz. Burada eğer liste isimlerinde boşluk var ise bunları replace ediyoruz. HtmlEncode da kullanılabilir. Yeni bir DataTable oluşturarak liste içerisindeki FieldValue’larda bir döngüye giriyoruz. Burada amaç gridimiz için dinamik olarak kolon tanımlamaktır.

Daha sonra bir döngüye daha girerek tanımlamış olduğumuz kolonlarımıza data atamasını yapıyoruz.

Hatasız bir build ardından kodumuzu çalıştırarak test ediyoruz. Sol tree listemizden mevcut sharepoint listelerinden birini seçerek, grid içine data geldiğinden emin oluyoruz.

Rapor Tasarımı İçin Form Oluşturmak

Örnek Uygulamamızda bu ana kadar Formumuzu hazırladık, Formumuza kod yazdık ve gerekli referansları ekleyerek build edilebilir ve çalışabilir hale getirerek sharepont listemizde bulunan öğeleri eklemiş olduğumuz grid’e yerleştirdik.

Şimdi yapmamız gereken bir rapor oluşturmak ve bu rapora data binding’i yapmak. Öncelikli olarak projemize sağ tıklayarak Add > New Item yolu ile yeni bir Devexpress Rapor ekliyoruz.

Raporumuzu ekledikten sonra direk olarak rapor ekranına düşeceğiz. Şu anda bir şey yapmadan rapor ekranımızı kapatıp formumuza geri dönüyoruz.

Rapor İçin Data Gönderimi

Raporumuzu tanımladık ve artık tekrardan formumuza geri döndük. Burada List öğelerimizin listelendiği grid’imize row click eventinde raporumuza seçili olan Row’u datasource olarak gönderimi için ufak kod yazmamız gerekmekte.

gridView1 imiz için Row Click eventine kodumuzu oluşturuyoruz.

Click eventimize aşağıdaki kodu yazarak datamızı set ediyoruz ve formumuzu açmak için hazır hale getiriyoruz. r.DataRow Property’si rapor ekranında tanımlamış olduğumuz bir public dynamic değişkendir.

Rapor İçin Formdan Data Alımı ve Son Ayarlar

Neredeyse sonuna geldik birkaç ufak dokunuşun ardından raporumuz gösterilmeye hazır. Devexpress de rapor yerleşimleri üzerinde fazla zaman kaybetmeyeceğiz. Bunun için direk olarak aşağıdaki gibi basit bir rapor ekranı ile gelen datanın bir adet içeriğini rapor ekranı içinde gösterebileceğimiz şekilde tasarımı tamamlıyoruz.

Kod penceresine geçerek bir önceki adımda oluşturmuş olduğumuz r.DataRow değişkeni için propertymizi oluşturuyoruz.

Ve hemen ardından Rapor tasarımı ekranına geçerek BeforePrint metodunu formumuza ekliyoruz.

BeforePrint metodumuzu da rapor ekranımıza eklediğimize göre artık gelen datamızın ekrandaki xrLabel3 alanında göstermek için data erişimini yazabiliriz. Hemen aşağıda da bu kodu yazarak uygulamamızı tamamlıyoruz.

Uygulamamızı başarı ile tamamladık. Ve artık programımızı test etme zamanı. Build ve çalıştır komutları ardından listemizden bir öğe seçerek raporun açılmasını bekliyoruz. Fazla sürmeyecektir. Eğer her şey yolunda ise aşağıdaki rapor görüntüsü bizi karşılayacaktır.

Yazmış olduğumuz uygulamanın tamamen örnek amaçlı olduğunu hatırlatmakta fayda görmekteyim. Kod yalnızca domaine ait bilgisayarlar üzerinde yetkilendirme istemeden çalışabilir. Eğer mevcut sharepoint yetkiniz yok ise bu kodu çalıştırmak için sharepoint yöneticinizden yetki talebinde bulunmalısınız.

Kısaca bir örnek uygulama ile sharepoint üzerinden external bir uygulamaya kayıt çekmeyi ve bu kayıtların Devexpress Reporting üzerinde gösterimini anlatmaya çalıştım.

Örnek kodlara

https://gallery.technet.microsoft.com/SharePoint-2013-External-06f66b0c veya https://github.com/eravse/SharePointDataPrinting Adreslerinden erişebilirsiniz.

Faydalı olması dileği ile.

Form Tasarımına Hazırlık

Kurumsal mimari yazılımlarının başında gelen Sharepoint mimarisinde web servisleri üzerinden Sharepoint içerisinde yapmış olduğumuz uygulamalara erişebileceğimizi görmüştük. Şimdi ise mevcut bilgisayarımızdan C# vasıtası ile Sharepoint web sitemize bağlanarak içeride bulunan listeler üzerinden veri çekip, bunları bir rapor formatında nasıl gösterebileceğimizi ve yazdırabileceğimizi göreceğiz.

Başlamadan önce yazıda Devexpress Reporting Tool kullanacağımızdan eğer elinizde mevcut bir sürüm yok ise Demo sürümünü https://www.devexpress.com/ adresinden indirerek bilgisayarımıza kurmamız gerekmektedir.

Visual Stüdyo programımızı açarak yeni bir proje oluşturuyoruz. Proje türümüz Windows Forms Application olacak şekilde ayarlıyoruz ve proje lokasyonumuz ile ismini vererek kayıt ediyoruz.

Hemen ardından ikinci aşama olarak bize Sharepoint sistemimize erişebilmemiz için iki adet DLL lazım olacak bunlardan birincisi Microsfot.SharePoint.Client.dll ikincisi ise Microsoft.SharePoint.Client.Runtime.dll. Bu iki dll dosyasını projemize referans olarak ekliyoruz.

Form Tasarımı ve Kodlamaya Giriş

Buraya kadar projemizi az da olsa kod yazmak için hazırladık. Birazda form tasarımımıza el atacağız ve sonrasında biraz kod yazmaya geçeceğiz.

Öncelikli olarak sharepoint listelerinin listeleneceği bir treeview ya da listview ekrana koyuyoruz. Tercihen sol kısım uygun olacaktır. Ama GUI yerleşim tercihleriniz tabi ki size bağlıdır. Yazının başında da belirttiğimiz gibi ben Devexpress kullanacağımdan devexpress treeview kullanıyorum.

Sağ kısma ise bir DataGrid atarak formumuz tamamlıyoruz. Bu grid seçilen listedeki elemanları listelemek için kullanacağımız grid’dir. Ortalama olarak formumuz aşağıdaki şekilde görünmesi gerekiyor.

Sıra geldi biraz kodlamaya. Solda bulunan TreeView kontrolümüzü dolduralım öncelikle. Bunun için aşağıdaki kod bloğundan faydalanıyoruz. Önce kodu görelim ve ne işe yaradıklarını az da olsa açıklamaya çalışalım.

Çift tıklama yaparak Form Load kodumuza erişiyoruz. Yukarıdaki kodları yazıyoruz. Using satırları arasında mevcut olan sharepoint sitemize context bağlantısı gerçekleştiriyoruz. Bu aşamada Url adresimizi yazıyoruz.

  1. Web … Contexte bulunan current web’i burada alıyoruz ve hemen altındaki satır ile bu Web’e bağlı listelerin tümünü bir ListCollectiona atıyoruz. Daha Sonra Load ve Execute ederek işlemimizi tamamlıyoruz.
  2. TreeList için sadece liste isimlerini alacağımızdan yeni bir string list oluşturuyoruz.
  3. Foreach döngüsü yardımı ile ikinci madde de oluşturmuş olduğumuz listeye öğelerimizi ekliyoruz.

Şimdi bu kısımda bir programımızı test edelim. Ara ara bu aşamayı uygularsak daha net olarak hatalarımızı da çok geç olmadan kontrol etmiş olacağız.

Görüldüğü üzere sadece rakamlar geldi. “ Biz Title elementini map ettimiştik “ sorusuna cevap hemen aşağıda. TreeList özelliğine Run Designer vasıtası ile Column eklemediğimizden kendisi otomatik olarak bize liste adlarının uzunluklarını verdi. Hemen aşağıdaki şekilde Designer vasıtası ile column eklemek için konfigure ediyoruz.

Hemen akla gelen ilk soruya da bu noktada cevap vermek lazım. Bizim listemiz string tipinde eleman içeriyordu Title’ı nasıl okuyacak diye. Bu noktada kodumuzu tekrar revize ediyoruz.

Yeni bir class oluşturarak , List<string> olarak atamış olduğumuz listemizi ve foreach içerisindeki atamalarımızı revize ediyoruz.

Bu işlem sonrasında artık çalışan kodumuz aşağıdaki şekilde liste adlarımız TreeView içerisinde gözüküyor olması gerekecektir.

SharePoint Listelerin deki Öğelere Erişim

Listelerimiz hazır ve artık bu listelerin içindeki öğelere erişmeye geldi sıra. Senaryomuz gereği sol kısımda bulunan listenin içindeki öğeleri sağ kısımdaki Grid’e listeleyerek devam edeceğiz.

TreeList için click eventine kodlamaya yapmaya başlayalım. Seçim olduğu anda öğenin ismini alıp grid içerisine Sharepointden o listeye ait öğeleri döndürecek methodumuzu da yazalım.

Yukarıda oluşturmuş olduğumuz metodumuzun içini de aşağıdaki şekilde dolduruyoruz. Kod tamamen demo odaklı olup sadece gridden Rapor ekranına data sağlamak amacı ile yapılmıştır. Siz kendi istediğiniz doğrultusunda şekillendirerek kullanabilirsiniz.

Context’imize erişim sağladıktan sonra listemizi ismi ile beraber çağırıyoruz. Burada eğer liste isimlerinde boşluk var ise bunları replace ediyoruz. HtmlEncode da kullanılabilir. Yeni bir DataTable oluşturarak liste içerisindeki FieldValue’larda bir döngüye giriyoruz. Burada amaç gridimiz için dinamik olarak kolon tanımlamaktır.

Daha sonra bir döngüye daha girerek tanımlamış olduğumuz kolonlarımıza data atamasını yapıyoruz.

Hatasız bir build ardından kodumuzu çalıştırarak test ediyoruz. Sol tree listemizden mevcut sharepoint listelerinden birini seçerek, grid içine data geldiğinden emin oluyoruz.

Rapor Tasarımı İçin Form Oluşturmak

Örnek Uygulamamızda bu ana kadar Formumuzu hazırladık, Formumuza kod yazdık ve gerekli referansları ekleyerek build edilebilir ve çalışabilir hale getirerek sharepont listemizde bulunan öğeleri eklemiş olduğumuz grid’e yerleştirdik.

Şimdi yapmamız gereken bir rapor oluşturmak ve bu rapora data binding’i yapmak. Öncelikli olarak projemize sağ tıklayarak Add > New Item yolu ile yeni bir Devexpress Rapor ekliyoruz.

Raporumuzu ekledikten sonra direk olarak rapor ekranına düşeceğiz. Şu anda bir şey yapmadan rapor ekranımızı kapatıp formumuza geri dönüyoruz.

Rapor İçin Data Gönderimi

Raporumuzu tanımladık ve artık tekrardan formumuza geri döndük. Burada List öğelerimizin listelendiği grid’imize row click eventinde raporumuza seçili olan Row’u datasource olarak gönderimi için ufak kod yazmamız gerekmekte.

gridView1 imiz için Row Click eventine kodumuzu oluşturuyoruz.

Click eventimize aşağıdaki kodu yazarak datamızı set ediyoruz ve formumuzu açmak için hazır hale getiriyoruz. r.DataRow Property’si rapor ekranında tanımlamış olduğumuz bir public dynamic değişkendir.

Rapor İçin Formdan Data Alımı ve Son Ayarlar

Neredeyse sonuna geldik birkaç ufak dokunuşun ardından raporumuz gösterilmeye hazır. Devexpress de rapor yerleşimleri üzerinde fazla zaman kaybetmeyeceğiz. Bunun için direk olarak aşağıdaki gibi basit bir rapor ekranı ile gelen datanın bir adet içeriğini rapor ekranı içinde gösterebileceğimiz şekilde tasarımı tamamlıyoruz.

Kod penceresine geçerek bir önceki adımda oluşturmuş olduğumuz r.DataRow değişkeni için propertymizi oluşturuyoruz.

Ve hemen ardından Rapor tasarımı ekranına geçerek BeforePrint metodunu formumuza ekliyoruz.

BeforePrint metodumuzu da rapor ekranımıza eklediğimize göre artık gelen datamızın ekrandaki xrLabel3 alanında göstermek için data erişimini yazabiliriz. Hemen aşağıda da bu kodu yazarak uygulamamızı tamamlıyoruz.

Uygulamamızı başarı ile tamamladık. Ve artık programımızı test etme zamanı. Build ve çalıştır komutları ardından listemizden bir öğe seçerek raporun açılmasını bekliyoruz. Fazla sürmeyecektir. Eğer her şey yolunda ise aşağıdaki rapor görüntüsü bizi karşılayacaktır.

Yazmış olduğumuz uygulamanın tamamen örnek amaçlı olduğunu hatırlatmakta fayda görmekteyim. Kod yalnızca domaine ait bilgisayarlar üzerinde yetkilendirme istemeden çalışabilir. Eğer mevcut sharepoint yetkiniz yok ise bu kodu çalıştırmak için sharepoint yöneticinizden yetki talebinde bulunmalısınız.

Kısaca bir örnek uygulama ile sharepoint üzerinden external bir uygulamaya kayıt çekmeyi ve bu kayıtların Devexpress Reporting üzerinde gösterimini anlatmaya çalıştım.

Örnek kodlara

https://gallery.technet.microsoft.com/SharePoint-2013-External-06f66b0c veya https://github.com/eravse/SharePointDataPrinting Adreslerinden erişebilirsiniz.

Faydalı olması dileği ile.

Yanıt Yaz