Reporting Services'da DLL Kullanımı - Yazgelistir.com
SQL Server / Reporting Services'da DLL Kullanımı
Bilindiği üzere Microsoft SQL Server Reporting Services projelerimiz aracılığı ile toplanan verilerin anlam ifade edebilmesi, karar alma mekanizmalarında rol oynayabilmesi için gerekli raporları kolay ve hızlı bir biçimde oluşturmak amacıyla Microsoft tarafından sunulan bir araçtır. Reporting Services ile raporlarımızı grafik,tablo veya matrix tablo formatlarında ister Web ister Windows uygulamalarımızda kullanabiliriz. Bu makalemde ise Reporting Services ile raporlarımıza kod ekleyerek veya derlenmiş kod kütüphanelerini referans göstererek raporlarımızı nasıl zenginleştirebileceğimizi anlatacağım. Bu tip bir işleme gitmemizi gerektirecek koşullar, veritabanı veya Reporting Services tarafından sunulan fonksiyonlar veya özellikler ile istediğimiz sonucu elde edemeyeceğimiz durumlardır. Örneklendirmek gerekirse karışık döngüler ve karar mekanizması içeren sonuçlar, veritabanında şifreli olarak duran verilerin kullanıcıya raporda sunulması gibi durumlar gösterilebilir.
Reporting Services'de raporlarımıza kod ekleyebileceğimiz iki yöntem mevcuttur. Bunlardan ilki custom code yazmak diğeri ise daha önceden derlenmiş bir kütüphaneyi referans göstermektir.
Visual Studio'da yeni bir report server project oluşturalım (New Project -> Business Intelligence Projects -> Report Server Project) ve Reports klasörüne yeni bir rapor ekleyelim.
Eklediğimiz raporda ilk olarak nasıl embedded kod kullanabileceğimize dair bir örnek yapalım.
Örnekte kendisine parametre olarak verilen string tipinde değişkeni ters olarak yazan bir fonksiyonu raporumuza dahil edelim. Bunun için Report Properties ekranındaki Code sekmesini seçerek aşağıdaki kodu ekrandaki textbox'ın içine yazıyoruz:
Public Function TersineCevir(yazi as String) as String
Dim c as Char() = yazi.ToCharArray()
Dim TersYazi as String = New String(c)
Bu ekrandaki textbox'a class veya fonksiyon yazılabilir fakat dikkat edilmesi gereken nokta kodun sadece VB.NET ile yazılmış olması gerektiğidir.Kodumuzu ekrana yazdıktan sonra OK tuşuna basarak pencereyi kapıyoruz.
Kodu ekleyip kaydettikten sonra sıra kullanımına geldi. Report Parameters ekranını kullanarak rapora bir tane parametre ekleyeceğim ve oluşturduğum parametreyi TersineCevir fonksiyonuna parametre olarak verip tersine çevrilmiş yazıyı textbox'da göstereceğiz.
İlk olarak rapor parametremizi oluşturalım:
Report Parameters ekranında string tipinde Yazi değişkenini raporumuza parametre olarak ekledik. Şimdi Layout ekranına bir textbox ekliyoruz ve Value property'sine aşağıdaki ifadeyi yazıyoruz (Textbox'a sağ tıkladığımızda açılan menüdeki Expression...'a tıklayarak Edit Expression ekranını kullanarak da textbox'a istediğimiz değeri atayabiliriz):
Raporun Preview ekranına geçtiğimizde göreceğimiz Yazı textbox'ına yazdığımız yazı View Report butonuna bastığımızda raporumuzda ters olarak yazılacaktır:
Görüldüğü üzere RS'te embedded kod kullanımı son derece basit bir şekilde yapılabilmektedir.
Şimdi ise bahsettiğimiz ikinci yöntemi kullanarak raporlarımızda bir kod kütüphanesini nasıl kullanabileceğimize bakalım.
Yapacağım örnekte SQL veritabanında şifreli şekilde tutulan verileri bir crypto dll'ini kullanarak raporumuzda decrypt edilmiş halde nasıl gösterebileceğimizden bahsedeceğim.
İlk olarak rapor projemizin Shared Data Sources klasörüne veritabanına bağlanabilmemiz için yeni bir data source ekliyorum:
Şifreler veritabanında aşağıda da görüldüğü gibi KisiId, KisiAdi ve Sifre alanlarını barındıran Kisiler adlı bir tablo bulunuyor. Sifre alanındaki veriler encrypt edilmiş halde veritabanında tutuluyor. Bizim yapacağımız şey ise bu verileri decrypt edilmiş halde raporumuzda sunmak olacak.
Raporumuzda kullanacağım Crypto.dll dosyası Encrypt ve decrypt adında string tipinde veri döndüren iki fonksiyondan oluşmakta. Öncelikle bu dll'i Vısual Studio'nun \Common7\IDE\PrivateAssemblies klasörü altına kopyalamamız gerek. (Örneğin C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies)
Ayrıca, raporumuzu uzaktaki bir makinaya deploy ederken kullandığımız dll'leri makinadaki SQL server'ın kurulduğu lokasyondaki MSSQL.3\Reporting Services\ReportServer\bin klasörü altına kopyalamamız gerekir. (Örneğin C:\Program Files\Microsoft SQL Server\MSSQL.*\Reporting Services\ReportServer\bin)
Ardından ise raporumuzun Report Properties ekranındaki References sekmesinde bu dll'i refererans olarak gösteriyoruz:
Bu noktada dikkat edilmesi gereken husus dll'i referans verirken mutlaka \Common7\IDE\PrivateAssemblies klasöründen referans verilmesi gerektiğidir. Ayrıca dll dosyasındaki her değişiklikten sonra dll bu klasör altından da güncellenmelidir.
Şimdi sırada aynı ekrandaki Classes alanına fully qualified şekilde dll dosyası içindeki class isimlerini ve class'ların alınacak olan instance'larının isimlerini yazmaya geldi. Bizim dll dosyamız içindeki class'ın adı cryptography ve instance adını da cryp olarak vererek classes alanına eklemeyi yapıyorum:
Artık raporumuzda dll'imizi kullanmaya hazırız. Raporumuzun Data sekmesinde Sifreler veritabanının Kisiler tablosundaki verileri getirecek olan dataset'i oluşturuyoruz:
Ardından da Layout sekmesine geçip raporumuza bir tablo ekliyoruz ve dataset'te çektiğimiz verileri tablonun field'larına atıyoruz:
Resimde görüldüğü gibi tabloda şifreleri göstereceğimiz alana aşağıdaki kodu yazarak eklediğimiz dll'deki decrypt fonksiyonunu çağırdık:
Raporumuzun Preview sekmesine geçip View Report butonuna bastığımızda veritabanındaki şifreler decrypt edilmiş şekilde görülecektir:
Bu makalemde RS ile raporlarımızda embedded code ve dll kullanımını anlattım.
Görüldüğü gibi son derece basit bir şekilde raporlarımıza daha fazla fonksiyonalite ve daha karmaşık işlemler yapabilme yetisini dll ve kod kullanarak kazandırabiliriz.