Bu bölümde raporlar üzerinde yönetimimizi, yönlendirmemizi nasıl artıracağımızı, rapor ifadelerini(expression), rapor içerisinde özel kod yazımı ve dışarıdan bir kütüphaneyi, dll dosyasını nasıl kullanacağımızı örneklendireceğiz.
Expression’lar rapor içerisindeki alanlarda gösterilecek değerleri özelleştirmek için kullanılan ifadelerdir. Bu ifadeler bir formül olduğu gibi Dataset içerisindeki bir kolona da işaret ediyor olabilir. Expression’lar aracılığıyla rapor içerisinde kısa kodlar yazarak farklı yönlendirmeler yapılabilir. Herhangi bir alana değer bastırmak için Properties penceresindeki Value özelliğinde Expressions seçeneği seçilir. Bu seçim bize kodlarımızı yazabileceğimiz ekranı sunar. Bu ekranda kullanabileceğimiz ifadeler sol tarafta Constants, Globals, Parameters, Fields, Datasets, Operators, Common Functions şeklinde gruplanmıştır. Dataset içerisindeki kolonlar, sorguya gönderilecek parametreler, raporda kullandığımız kontroller, raporlar ilgili global değerler gibi koleksiyonların elamanlarına erişmek için KoleksiyonAdı!NesneAdı ifadesi kullanılır. Örneğin kayıt kümesindeki herhangi bir kolona erişmek için Fields!KolonAdı.Value ifadesi kullanılır. Bu ifade variant türünde değer döndürür. Fakat Common Functions altındaki Conversion bölümünden Convert fonksiyonları kullanılarak farklı veri tiplerine dönüştürme yapılabilir. Biraz önceki örneğimize geri dönecek olursak özetleme satırında Aidat kolonun altıda aidatların toplamını vermesi için grupsal fonksiyonlar kullanılır. =Sum(Fields!Aidat.Value) ifadesi gruplanmış değere göre Aidatları toplar. Aşağıdaki toplam satırına =”Toplam : “+ CStr(Sum(Fields!Aidat.Value)) ifadesi yazıldı.
Bunun sonucunda aşağıdaki gibi bir ara satır oluşur.
Bu şekilde Sum, Avg, Count, Min, First, Last gibi fonksiyonlar kullanılabilir.
Expressions penceresindeki Globals sekmesindeki değerler raporla ilgili genel değişkenleri belirtir. Örneğin raporun çalıştırılma zamanını yazdırmak için Toolbox’tan tasarım alanında Textbox kontrolü eklenir kontrolü Value özelliği =Globals!ExecutionTime olarak düzenlenir. Aynı şekilde mevcut sayfanın sayfa numarası için PageNumber değeri, raporun sunucudaki URL adresi için ReportServerUrl değeri kullanılır.
Kodları yazdığımız ekranın IntelliSense özelliğini desteklemesi de önemli bir kolaylık sağlamaktadır. Örneğimizi biraz geliştirip Aidat değeri 12.00 üzerindeyse o değeri kırmızı yazdıralım. Bunun için Aidat kolonun Properties bölümünden Color özelliğini seçip aşağıdaki ifadeyi yazalım.
=IIF(Fields!Aidat.Value > 12, “Red”, “Black”)
Rapor içerisinde genel bir fonksiyon yazmak için Layout bölümünde üst menüdeki Report altındaki “Report Properties” bölümüne girilir. Oradaki Code sekmesinde ilgili kodlar VB.NET formatında yazılır.
Public Function GetMesaj(ByVal deger as integer) as String IF deger > 12 Then Return "12'den büyük" ELSE Return "12'den düşük" End IF End Function
Bu fonksiyonu herhangi bir yerden çağırmak için code.GetMesaj ifadesi kullanılır.
Layout içerisinde Aidat kolonun sağ tıklayıp “Insert Column to the Right” menüsünü tıklayıp kolonun sağına yeni bir kolon ekleyelim. Ve bu kolonun Value değerine aşağıdaki ifadeyi yazalım.
=code.GetMesaj(Fields!Aidat.Value)
SQL Server Reporting Services aracı bu şekilde bazı kodları rapor içerisine gömmemize imkan verdiği gibi dışarından bir kütüphaneyi kullanmamıza da olanak tanır. Örneğin .NET’te yazdığımız harici bir Assembly’i kolayca rapor içerisinde referans olarak kullanabiliriz. Bunun için yapmamız ilk adım bu dll dosyasını raporun referanslarına eklemektir. Bu işlemi önceki örnekte kullandığımız üst menüdeki Report altındaki “Report Properties” bölümünde yapacağız. Bu penceredeki References sekmesinde “.” düğmesini tıklayıp listeye dışarıdan bir dll dosyasını ekleyelim.
VS.NET 2005 içerisinde C# dilinde bir Class Library projesi oluşturup aşağıdaki gibi basit bir örnek oluşturalım.
using System; namespace ClassLibrary1 { public class Muhasebe { public double KdvHesapla(double Fiyat, int Kdv) { //Gönderilen rakama kdv'yi ekleyelim. return Fiyat * ((100 + Kdv) / 100); } } }
Bu projeyi derleyip dll dosyasını (ClassLibrary1.dll) üzerinde çalışılan VS.NET sürümüne ait klasörün içerisine kopyalamak gerekiyor. Benim makinde VS.NET 2005’e ait kütüphanelerin bulunduğu klasör şu şekildedir.
C:\Program Files\Microsoft Visual Studio 8\Common7\ide\PrivateAssemblies
Kopyalama işleminden sonra rapor tasarımı tarafına geçip Layout ekranın da “Report » Report Properties” menüsündeki References sekmesinde bu dll dosyasını listeye ekleyelim. Listeye ekledikten sonra rapor içerisinde bu kütüphane içerisindeki sınıflara erişmek için bir nesne adı tanımlıyoruz. Sınıfların adı yazılırken tam adının (fully qualified) yazılması gerekir. Burada nesne adı olarak oMuhasebe ismini kullandım.
Bu işlemlerden sonra RDL dosyasına aşağıdaki etiketler eklenir.
Artık bu sınıfı oMuhasebe nesnesini işaret ederek rapor içerisinde herhangi bir alanda kullanabiliriz. Raporda aidatların hemen sağ tarafına “KDVli Aidat” isminde yeni bir kolon ekledim. Ve o kolonun Value değerine aşağıdaki ifadeyi yazdım.
=Round(code.oMuhasebe.KdvHesapla(Fields!Aidat.Value,18),2)
Böylece KdvHesapla yordamına mevcut satırdaki Aidat bilgisi ve 18 değeri parametre olarak gönderilir.
Burada dikkat edilmesi gereken konu raporu başka bir sunucuya deploy ettiğimizde raporda kullandığımız dll dosyalarını da sunucuda SQL Server Reporting’in çalıştığı yere kopyalamamız gerekir. Bu adres muhtemel aşağıdaki gibi olacaktır.
C:\Program Files\Microsoft SQL Server\MSSQL.*\Reporting Services\ReportServer\Bin