From 502793aed54d232ec5e9aa40b5924333d95e469c Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 8 Dec 2020 16:42:36 +0100 Subject: [PATCH] EDMIService: Property Filtering/Sorting, Handle Empty Results --- GUIs.Test.EDMIBenchmark/Form1.Designer.vb | 64 +++++++++++++++++-- GUIs.Test.EDMIBenchmark/Form1.resx | 26 ++++++++ GUIs.Test.EDMIBenchmark/Form1.vb | 11 +++- Modules.EDMIAPI/Client.vb | 11 +--- .../DigitalData.Services.EDMIService.xsd | 2 + .../EDMIServiceReference/Reference.vb | 12 ++-- Service.EDMIService/EDMIService.vb | 23 +++---- 7 files changed, 116 insertions(+), 33 deletions(-) diff --git a/GUIs.Test.EDMIBenchmark/Form1.Designer.vb b/GUIs.Test.EDMIBenchmark/Form1.Designer.vb index d15fa96f..480ca35d 100644 --- a/GUIs.Test.EDMIBenchmark/Form1.Designer.vb +++ b/GUIs.Test.EDMIBenchmark/Form1.Designer.vb @@ -24,7 +24,7 @@ Partial Class Form1 Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) - Dim DockingContainer1 As DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer = New DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer() + Dim DockingContainer2 As DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer = New DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer() Me.DocumentGroup1 = New DevExpress.XtraBars.Docking2010.Views.Tabbed.DocumentGroup(Me.components) Me.Document1 = New DevExpress.XtraBars.Docking2010.Views.Tabbed.Document(Me.components) Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() @@ -44,6 +44,10 @@ Partial Class Form1 Me.TextboxDatatableName = New DevExpress.XtraBars.BarEditItem() Me.RepositoryItemTextEdit2 = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit() Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem() + Me.TextboxDatatableFilter = New DevExpress.XtraBars.BarEditItem() + Me.RepositoryItemTextEdit3 = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit() + Me.TextboxDatatableSort = New DevExpress.XtraBars.BarEditItem() + Me.RepositoryItemTextEdit4 = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup4 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() @@ -73,11 +77,14 @@ Partial Class Form1 Me.DockPanel2_Container = New DevExpress.XtraBars.Docking.ControlContainer() Me.DocumentViewer1 = New DigitalData.Controls.DocumentViewer.DocumentViewer() Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.BarEditItem1 = New DevExpress.XtraBars.BarEditItem() CType(Me.DocumentGroup1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.Document1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemTextEdit2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.RepositoryItemTextEdit3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.RepositoryItemTextEdit4, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.DocumentManager1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TabbedView1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.DockManager1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -115,14 +122,14 @@ Partial Class Form1 'RibbonControl1 ' Me.RibbonControl1.ExpandCollapseItem.Id = 0 - Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.ButtonSelectFiles, Me.ButtonImportFiles, Me.buttonClearLog, Me.buttonClearFiles, Me.TextboxObjectId, Me.ButtonLoadFile, Me.BarListItem1, Me.BarButtonItem2, Me.BarToggleSwitchItem1, Me.BarDockingMenuItem1, Me.BarMdiChildrenListItem1, Me.BarButtonItem1, Me.TextboxDatatableName, Me.BarButtonItem3}) + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.ButtonSelectFiles, Me.ButtonImportFiles, Me.buttonClearLog, Me.buttonClearFiles, Me.TextboxObjectId, Me.ButtonLoadFile, Me.BarListItem1, Me.BarButtonItem2, Me.BarToggleSwitchItem1, Me.BarDockingMenuItem1, Me.BarMdiChildrenListItem1, Me.BarButtonItem1, Me.TextboxDatatableName, Me.BarButtonItem3, Me.TextboxDatatableFilter, Me.TextboxDatatableSort}) Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl1.MaxItemId = 17 + Me.RibbonControl1.MaxItemId = 19 Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.PageHeaderItemLinks.Add(Me.BarDockingMenuItem1) Me.RibbonControl1.PageHeaderItemLinks.Add(Me.BarMdiChildrenListItem1) Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) - Me.RibbonControl1.RepositoryItems.AddRange(New DevExpress.XtraEditors.Repository.RepositoryItem() {Me.RepositoryItemTextEdit1, Me.RepositoryItemTextEdit2}) + Me.RibbonControl1.RepositoryItems.AddRange(New DevExpress.XtraEditors.Repository.RepositoryItem() {Me.RepositoryItemTextEdit1, Me.RepositoryItemTextEdit2, Me.RepositoryItemTextEdit3, Me.RepositoryItemTextEdit4}) Me.RibbonControl1.Size = New System.Drawing.Size(1310, 158) Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1 ' @@ -218,6 +225,7 @@ Partial Class Form1 ' Me.TextboxDatatableName.Caption = "Datatable Name" Me.TextboxDatatableName.Edit = Me.RepositoryItemTextEdit2 + Me.TextboxDatatableName.EditWidth = 100 Me.TextboxDatatableName.Id = 15 Me.TextboxDatatableName.ImageOptions.SvgImage = CType(resources.GetObject("TextboxDatatableName.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.TextboxDatatableName.Name = "TextboxDatatableName" @@ -234,6 +242,32 @@ Partial Class Form1 Me.BarButtonItem3.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.BarButtonItem3.Name = "BarButtonItem3" ' + 'TextboxDatatableFilter + ' + Me.TextboxDatatableFilter.Caption = "Filter Expr." + Me.TextboxDatatableFilter.Edit = Me.RepositoryItemTextEdit3 + Me.TextboxDatatableFilter.EditWidth = 100 + Me.TextboxDatatableFilter.Id = 17 + Me.TextboxDatatableFilter.Name = "TextboxDatatableFilter" + ' + 'RepositoryItemTextEdit3 + ' + Me.RepositoryItemTextEdit3.AutoHeight = False + Me.RepositoryItemTextEdit3.Name = "RepositoryItemTextEdit3" + ' + 'TextboxDatatableSort + ' + Me.TextboxDatatableSort.Caption = "Sort Expr." + Me.TextboxDatatableSort.Edit = Me.RepositoryItemTextEdit4 + Me.TextboxDatatableSort.EditWidth = 100 + Me.TextboxDatatableSort.Id = 18 + Me.TextboxDatatableSort.Name = "TextboxDatatableSort" + ' + 'RepositoryItemTextEdit4 + ' + Me.RepositoryItemTextEdit4.AutoHeight = False + Me.RepositoryItemTextEdit4.Name = "RepositoryItemTextEdit4" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup4, Me.RibbonPageGroup3, Me.RibbonPageGroup2}) @@ -267,6 +301,8 @@ Partial Class Form1 'RibbonPageGroup2 ' Me.RibbonPageGroup2.ItemLinks.Add(Me.TextboxDatatableName) + Me.RibbonPageGroup2.ItemLinks.Add(Me.TextboxDatatableFilter) + Me.RibbonPageGroup2.ItemLinks.Add(Me.TextboxDatatableSort) Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem3) Me.RibbonPageGroup2.Name = "RibbonPageGroup2" Me.RibbonPageGroup2.Text = "Retrieve Datatable" @@ -294,8 +330,8 @@ Partial Class Form1 ' Me.TabbedView1.DocumentGroups.AddRange(New DevExpress.XtraBars.Docking2010.Views.Tabbed.DocumentGroup() {Me.DocumentGroup1}) Me.TabbedView1.Documents.AddRange(New DevExpress.XtraBars.Docking2010.Views.BaseDocument() {Me.Document1}) - DockingContainer1.Element = Me.DocumentGroup1 - Me.TabbedView1.RootContainer.Nodes.AddRange(New DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer() {DockingContainer1}) + DockingContainer2.Element = Me.DocumentGroup1 + Me.TabbedView1.RootContainer.Nodes.AddRange(New DevExpress.XtraBars.Docking2010.Views.Tabbed.DockingContainer() {DockingContainer2}) ' 'DockManager1 ' @@ -481,6 +517,15 @@ Partial Class Form1 ' Me.Timer1.Interval = 3000 ' + 'BarEditItem1 + ' + Me.BarEditItem1.Caption = "Datatable Name" + Me.BarEditItem1.Edit = Me.RepositoryItemTextEdit2 + Me.BarEditItem1.EditWidth = 100 + Me.BarEditItem1.Id = 15 + Me.BarEditItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarEditItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.BarEditItem1.Name = "BarEditItem1" + ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -499,6 +544,8 @@ Partial Class Form1 CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RepositoryItemTextEdit2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.RepositoryItemTextEdit3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.RepositoryItemTextEdit4, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.DocumentManager1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TabbedView1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.DockManager1, System.ComponentModel.ISupportInitialize).EndInit() @@ -569,4 +616,9 @@ Partial Class Form1 Friend WithEvents RepositoryItemTextEdit2 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup + Friend WithEvents TextboxDatatableFilter As DevExpress.XtraBars.BarEditItem + Friend WithEvents RepositoryItemTextEdit3 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit + Friend WithEvents TextboxDatatableSort As DevExpress.XtraBars.BarEditItem + Friend WithEvents RepositoryItemTextEdit4 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit + Friend WithEvents BarEditItem1 As DevExpress.XtraBars.BarEditItem End Class diff --git a/GUIs.Test.EDMIBenchmark/Form1.resx b/GUIs.Test.EDMIBenchmark/Form1.resx index 1eff7f9f..983e03e2 100644 --- a/GUIs.Test.EDMIBenchmark/Form1.resx +++ b/GUIs.Test.EDMIBenchmark/Form1.resx @@ -341,4 +341,30 @@ 453, 17 + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAGkEAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAxNiAxNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MTYgMTYiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku + R3JlZW57ZmlsbDojMDM5QzIzO30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLnN0MHtvcGFjaXR5OjAu + Njt9Cgkuc3Qxe29wYWNpdHk6MC41O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTE1LDFIMUMwLjUsMSww + LDEuNSwwLDJ2MTJjMCwwLjUsMC41LDEsMSwxaDE0YzAuNSwwLDEtMC41LDEtMVYyQzE2LDEuNSwxNS41 + LDEsMTUsMXogTTE1LDE0SDFWMmgxNFYxNHoiIGNsYXNzPSJCbGFjayIgLz4NCiAgPHBhdGggZD0iTTAs + NVYyYzAtMC41LDAuNS0xLDEtMWgxNGMwLjYsMCwxLDAuNSwxLDF2M0gweiIgY2xhc3M9IkdyZWVuIiAv + Pg0KICA8ZyBpZD0iTGF5ZXJfMiIgY2xhc3M9InN0MCI+DQogICAgPHJlY3QgeD0iMSIgeT0iMiIgd2lk + dGg9IjE0IiBoZWlnaHQ9IjIiIHJ4PSIwIiByeT0iMCIgY2xhc3M9IldoaXRlIiAvPg0KICA8L2c+DQog + IDxyZWN0IHg9IjEiIHk9IjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSI5IiByeD0iMCIgcnk9IjAiIGNsYXNz + PSJXaGl0ZSIgLz4NCiAgPHBhdGggZD0iTTUsMTJWN2gxdjVINXoiIGNsYXNzPSJCbGFjayIgLz4NCiAg + PHBhdGggZD0iTTExLDEyaC0xbDAtMC42QzkuOCwxMS42LDkuNSwxMiw4LjcsMTJjLTAuNSwwLTAuOS0w + LjItMS4yLTAuNUM3LjIsMTEuMiw3LDEwLjcsNywxMC4xQzcsOS41LDcuMiw5LDcuNSw4LjcgIGMwLjMt + MC4zLDAuNy0wLjUsMS4yLTAuNXMwLjksMC4yLDEuMiwwLjVWN0gxMVYxMnogTTguMSwxMC4xYzAsMC40 + LDAsMS4yLDAuOSwxLjJjMC44LDAsMC45LTAuOCwwLjktMS4xQzkuOSw5LjgsOS44LDksOSw5ICBDOC4z + LDksOC4xLDkuNyw4LjEsMTAuMXoiIGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs= + + \ No newline at end of file diff --git a/GUIs.Test.EDMIBenchmark/Form1.vb b/GUIs.Test.EDMIBenchmark/Form1.vb index 85ae0f8e..864446cd 100644 --- a/GUIs.Test.EDMIBenchmark/Form1.vb +++ b/GUIs.Test.EDMIBenchmark/Form1.vb @@ -224,10 +224,17 @@ Public Class Form1 End If Dim oDatatableName As String = TextboxDatatableName.EditValue - Dim oResponse As DataTable = Await _Client.GetDatatableByNameAsync(oDatatableName) + Dim oSortExpression As String = TextboxDatatableSort.EditValue + Dim oFilterExpression As String = TextboxDatatableFilter.EditValue + Dim oResponse As TableResult = Await _Client.GetDatatableByNameAsync(oDatatableName, oFilterExpression, oSortExpression) oSWTotal.Stop() - AddLogMessage($"DataTable [{oResponse.TableName}] loaded: [{FormatTime(oSWTotal.ElapsedMilliseconds)}]") + + If oResponse.OK Then + AddLogMessage($"DataTable [{oDatatableName}] loaded: [{FormatTime(oSWTotal.ElapsedMilliseconds)}]") + Else + AddLogMessage($"DataTable [{oDatatableName}] could not be loaded. Error: {oResponse.ErrorMessage}") + End If Catch ex As FaultException MsgBox(ex.Reason.ToString, MsgBoxStyle.Critical, "Error from Service") _Client.Reconnect() diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index 22f8c194..d905bb04 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -131,15 +131,10 @@ Public Class Client End Try End Function - Public Async Function GetDatatableByNameAsync(DatatableName As String) As Task(Of DataTable) + Public Async Function GetDatatableByNameAsync(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As Task(Of TableResult) Try - Dim oResponse = Await _channel.ReturnDatatableFromCacheAsync(DatatableName) - - If oResponse.OK Then - Return oResponse.Table - Else - Return Nothing - End If + Dim oResponse = Await _channel.ReturnDatatableFromCacheAsync(DatatableName, FilterExpression, SortByColumn) + Return oResponse Catch ex As Exception _logger.Error(ex) Throw ex diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index b4dd2d43..7724ddb4 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -18,6 +18,8 @@ + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 4b96be39..9b5a77a5 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -154,11 +154,11 @@ Namespace EDMIServiceReference _ - Function ReturnDatatableFromCache(ByVal Name As String) As EDMIServiceReference.TableResult + Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult _ - Function ReturnDatatableFromCacheAsync(ByVal Name As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) _ @@ -419,12 +419,12 @@ Namespace EDMIServiceReference Return MyBase.Channel.HeartbeatAsync End Function - Public Function ReturnDatatableFromCache(ByVal Name As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCache - Return MyBase.Channel.ReturnDatatableFromCache(Name) + Public Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCache + Return MyBase.Channel.ReturnDatatableFromCache(Name, FilterExpression, SortByColumn) End Function - Public Function ReturnDatatableFromCacheAsync(ByVal Name As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCacheAsync - Return MyBase.Channel.ReturnDatatableFromCacheAsync(Name) + Public Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCacheAsync + Return MyBase.Channel.ReturnDatatableFromCacheAsync(Name, FilterExpression, SortByColumn) End Function Public Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_Firebird diff --git a/Service.EDMIService/EDMIService.vb b/Service.EDMIService/EDMIService.vb index 8bb20a2b..7a80145b 100644 --- a/Service.EDMIService/EDMIService.vb +++ b/Service.EDMIService/EDMIService.vb @@ -82,9 +82,18 @@ Public Class EDMIService ' Apply filter and sorting to data Dim oFilterExpression As String = Utils.NotNull(FilterExpression, String.Empty) Dim oSortByColumn As String = Utils.NotNull(SortByColumn, String.Empty) - Dim oFilteredTable = oDataTable. - Select(oFilterExpression, oSortByColumn). - CopyToDataTable() + + Dim oFilteredRows = oDataTable.Select(oFilterExpression, oSortByColumn) + Dim oFilteredTable As DataTable = Nothing + + If oFilteredRows.Count > 0 Then + oFilteredTable = oFilteredRows.CopyToDataTable() + oFilteredTable.TableName = Name + Else + ' Produce empty table + oFilteredTable = oDataTable.Clone() + oFilteredTable.TableName = Name + End If _logger.Debug("Datatable Stats for [{0}]:", Name) _logger.Debug("Unfiltered: [{0}] rows", oDataTable.Rows.Count) @@ -94,14 +103,6 @@ Public Class EDMIService Else Throw New ApplicationException($"DataTable {Name} does not exist") End If - - 'If oDataset.Tables.Contains(Name) Then - ' oDataTable = oDataset.Tables.Item(Name).Clone() - - ' Return New TableResult(oDataTable) - 'Else - ' Throw New ApplicationException($"DataTable {Name} does not exist") - 'End If Catch ex As Exception _logger.Error(ex) Return New TableResult(ex.Message)