Dinamik Rapor Oluşturma
Bu yazımızda dinamik rapor oluşturma anlatılacaktır. Bildiğiniz gibi Control Panelinde belli kalıplar ile raporlar oluşturulabiliyor. Tabii ki sizlerde kendi kalıplarınızı oluşturup kullanabiliyorsunuz. Dinamik olarak ifade ettiğimiz ise rapor sonucunda elde ettiğimiz bilgilerin farklı kalıplarda oluşudur. Örneğin raporun kolonlarında ki değişikliktir. Tag_1 bir kolon olarak raporda olabilir. Veya onun yerine Tag_2 olabilir. Hatta aynı rapor farklı aritmetik işlemler ile oluşturulabilir. Kısacası birbirinden tamamen farklı raporlar dinamik olarak oluşturulabilir.
1.Yöntem:
Rapor sorgusu içinde köşeli parantez ve tırnak ile işaretlenen tagların değeri rapor sorgusu olarak kullanılır. Sorgumuz: “SELECT [‘Tag_Query’] FROM Table1” Bu sorguda sistem köşeli parantez ve tırnak ile ayrılmış Tag_Query ifadesinin bir Tag olduğunu anlar ve bu ifade yerine tagın değerini getirerek sorguyu ayarlar. Ayarlanmış sorgu: “SELECT [Tag_3] FROM Table1” Gördüğünüz gibi Tag_Query yerine Tag_3 yazılmıştır. Çünkü Tag_Query Tag’ı string tipinde olup değeri Tag_3’dür.
2.Yöntem
Versiyon 5.3.2 ile eklenmiştir. Rapor sorgusu Control panelinde oluşturulmayıp sorgu yerine tek bir tag tanımlaması ile yapılır. Sorgunun tamamı string tipindeki bu Tag’ın değeri olacaktır. Böylece bu Tag değeri runtime zamanında manuel veya script ile ayarlanabilir. Tabii ki operatörlerin sql sorgusu yazması hem güç hemde tehlikelidir. Bu nedenle bu işlem yarı otomatik olamalıdır. Operatör bazı seçimler yapmalı ve sonucunda sorgu script ile oluşturulmalıdır. Bu konunun daha iyi anlaşılması için hazırladığımız örneği buradan indirebilirsiniz.
Resimde gördüğünü gibi rapor sorgusu yerine string tipindeki Tag_Query Tag’ı yazılmıştır. Calculate Query butonuna basıldığında SQL Query string ise tam bir sql sorgusu olarak düzenlenir. Çünkü Tag_Query tag’ının değeri bu sorgunun ta kendisidir. Bu sorgu runtime zamanında textbox’a manuel giriş ile hazırlanacağı gibi script ile’de hazırlanabilir. Bu amaçla hazırladımız projede kullandığımız script aşağıdadır.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public Tag_1_Yes As Boolean
Public Tag_2_Yes As Boolean
Public Tag_3_Yes As Boolean
Public Tag_Query As String
Public StartTime As DateTime
Public EndTime As DateTime
Public Sub Load
if Tag_1_Yes = False And Tag_2_Yes = False And Tag_3_Yes = False then
MsgBox(“Tag not selected!”)
Exit Sub
End If
Tag_Query = “SELECT [DateTime],”
if Tag_1_Yes Then Tag_Query &= “[Tag_1]”
if Tag_1_Yes And (Tag_2_Yes Or Tag_3_Yes) Then Tag_Query &= “,”
if Tag_2_Yes Then Tag_Query &= “[Tag_2]”
if Tag_2_Yes And Tag_3_Yes Then Tag_Query &= “,”
if Tag_3_Yes Then Tag_Query &= “[Tag_3]”
Tag_Query &= ” FROM Table1 WHERE [DateTime] >= “
Tag_Query &= “‘” & StartTime.ToString(“G” , System.Globalization.CultureInfo.CreateSpecificCulture(“en-US”)) & “‘”
Tag_Query &= ” And [DateTime] <= ‘” & EndTime.ToString(“G” , System.Globalization.CultureInfo.CreateSpecificCulture(“en-US”)) & “‘”
End Sub
End Class
End Namespace
Not: Bu tip rapor oluştururken ilk aşamada rapor sorgusu Tag değeri içerisinde olmayabilir. Aşağıdaki resimde görebilirsiniz.
Tag_Query Tag’ının değeri henüz SQL sorgusu içermiyor. Database’e gönderilen sıfır sorgusunun cevabı da bu hata mesajı olur. Bu aşamayı atlatmak gerekli. Atlatmak için çok basit bir sorgu kullanabiliriz. Örneğin: “Select Max(LastValue) From Table1” sorgusunu kullanabiliriz. SQL Query String bölümüne yazdığımız bu sql sorgusunun önemi yoktur.
Örnek projeyi biraz geliştirdik. Yeni projeyi buradan indirebilirsiniz.
Sayfa içerisindeki checkbox’lara tag olmaksızın script ile direk erişiliyor. Ve sorgu böylece hazırlanıyor. Ayrıca sayfa ilk açıldığında bir kere çalışan(Screen properties\Function\Screen Loading Script olarak tanımlanmış) bir script daha yazdım. Bu script ile checkbox’ların arka plan renkleri ayarlanıyor.
Kendi projenize adapte etmek için yapılması gerekenler.
1. Sayfa dizaynı örnke projedeki gibi yapın.
2. CreateQuery scriptindeki aşağıdaki satırı bulun ve çoğaltın. Tag ve Checkbox isminide ayarlayın.
if CheckBoxStatu(“CheckBox_2”) Then Str &= “[Tag_3],”
3. Handler scripti içerisindeki aşağıdaki satırı bulun ve çoğaltın. Checkbox isimlerini ayarlayın.
HandlerEkle(“CheckBox_2”)
Was this answer helpful?
LikeDislike