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.

Runtime Görüntüsü

Runtime Görüntüsü

Dinamik Rapor

Dinamik Rapor

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.

Dinamik Rapor Hata

Dinamik Rapor Hata

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.