How to report custom data from a simple App
The following post describes the steps involved for creating a simple App which collects user data and uses it to produce a custom report embedded in the app project.
The project contains 3 modules: the app itself, a code module containing global data and the report.
The main purpose of the Globals module is to expose a DataTable object that will be used to communicate user input to the report engine.
The project contains 3 modules: the app itself, a code module containing global data and the report.
The main purpose of the Globals module is to expose a DataTable object that will be used to communicate user input to the report engine.
Private _dataTable As System.Data.DataTable ' The data table used in the report is created on demand. Public ReadOnly Property DataTable As System.Data.DataTable Get If _dataTable Is Nothing Then _dataTable = New System.Data.DataTable _dataTable.Columns.Add("User",GetType(String))This same table is then used in the code behind the report when processing the RefreshSchema event. Note that this event is used both when designing the report template and when creating a report, so that custom fields are visible when editing the template.
_dataTable.Columns.Add("Batch",GetType(String)) _dataTable.Columns.Add("Sample",GetType(String)) End If Return _dataTable End Get End Property ' This method transfers the data into the data table used by the report Public Sub FillReportData(user As String,batch As String,sample As String) DataTable.Rows.Clear _dataTable.Rows.Add(New Object() {user,batch,sample}) End Sub
Public Class AppReport ' This event is used to provide the custom datatable to the report engine Private Sub ThisReport_RefreshSchema(ByVal source As Object, ByVal args As MediaCy.Addins.Reporter.ReportEventArgs) Handles ThisReport.RefreshSchema args.Report.DataSources.Add("AppData",DataTable) End Sub End ClassFinally the App only has to call FillReportData,
Private Sub btnReport_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnReport.Click FillReportData(txtUser.text,txtBatch.Text,txtSample.Text) RunReport(cbOutput.SelectedIndex) End Suband then use RunReport to create the report using standard reporting commands.
Case ReportOutput.PreviewEdit With Share.ReportCommands.Create(Nothing) .Template = "SimpleAppReport>AppReport.iprt" .ReadOnly=False .Run(New Object(){ThisApplication.ActiveWindow}, Nothing) End WithThe full project package is attached.
0