Index: ActiviteitenOpvolging/ActiviteitenOpvolging/KCA-W10_DynamicConfigs.txt =================================================================== diff -u -r1750 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/KCA-W10_DynamicConfigs.txt (.../KCA-W10_DynamicConfigs.txt) (revision 1750) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/KCA-W10_DynamicConfigs.txt (.../KCA-W10_DynamicConfigs.txt) (revision 1752) @@ -28,169 +28,8 @@ NumberOfActivitiesGrid2=2 % Definitie van de SQL query voor grid 1 tot AantalGrid -SQL1=__select BatchVisual,EindTijdstip,ProductGroep,Naar, +SQL1=SQL1 +SQL2=SQL2 - Status_1,Status_2,Status_3,Status_4,Status_5, - - Aantal_1,Aantal_2,Aantal_3,Aantal_4,Aantal_5, - - StartTijdstip_1,StartTijdstip_2,StartTijdstip_3,StartTijdstip_4,StartTijdstip_5, - - ActiviteitID_1 , ActiviteitID_2,ActiviteitID_3,ActiviteitID_4,ActiviteitID_5, - - 'Front' Label_1,'Syncro' Label_2,'Zijstab' Label_3,'DwarsVerd' Label_4,'Glas' Label_5, - - Gebruiker_1,Gebruiker_2,Gebruiker_3,Gebruiker_4,Gebruiker_5, - - 0 ReadOnly_1,1 ReadOnly_2,0 ReadOnly_3,0 ReadOnly_4,0 ReadOnly_5 - -From ( - -Select - -right(AB.Batch,4) as BatchVisual, - -AB.Resource as Naar, - -isnull(AB1.EindTijdstip,isnull(AB2.EindTijdstip,isnull(AB3.EindTijdstip,isnull(AB4.EindTijdstip,AB5.EindTijdstip)))) EindTijdstip, - -AB.Productgroep, - -AB1.Batch || ';' || AB1.Resource || ';' || AB1.Activiteit as ActiviteitID_1, - -AB2.Batch || ';' || AB2.Resource || ';' || AB2.Activiteit as ActiviteitID_2, - -AB3.Batch || ';' || AB3.Resource || ';' || AB3.Activiteit as ActiviteitID_3, - -AB4.Batch || ';' || AB4.Resource || ';' || AB4.Activiteit as ActiviteitID_4, - -AB5.Batch || ';' || AB5.Resource || ';' || AB5.Activiteit as ActiviteitID_5, - -AB1.StartTijdstip as StartTijdstip_1, - -AB2.StartTijdstip as StartTijdstip_2, - -AB3.StartTijdstip as StartTijdstip_3, - -AB4.StartTijdstip as StartTijdstip_4, - -AB5.StartTijdstip as StartTijdstip_5, - -AB1.Status Status_1, - -AB2.Status Status_2, - -AB3.Status Status_3, - -AB4.Status Status_4, - -AB5.Status Status_5, - -AB1.Aantal Aantal_1, - -AB2.Aantal Aantal_2, - -AB3.Aantal Aantal_3, - -AB4.Aantal Aantal_4, - -AB5.Aantal Aantal_5, - -AB1.Gebruiker Gebruiker_1, - -AB2.Gebruiker Gebruiker_2, - -AB3.Gebruiker Gebruiker_3, - -AB4.Gebruiker Gebruiker_4, - -AB5.Gebruiker Gebruiker_5 - -from APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB - -join APPS_Halux_Planning_impl.ResourceCalcMutex RCM on RCM.ID=1 - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB1 on AB.Batch=AB1.Batch and RCM.ActiviteitPerBatchTijdstip= AB1.RecalcTijdstip and AB1.Resource='Voormontage' and AB1.Activiteit='Front' - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB2 on AB.Batch=AB2.Batch and RCM.ActiviteitPerBatchTijdstip = AB2.RecalcTijdstip and AB2.Resource='Voormontage' and AB2.Activiteit='Syncro' - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB3 on AB.Batch=AB3.Batch and RCM.ActiviteitPerBatchTijdstip = AB3.RecalcTijdstip and AB3.Resource='Voormontage' and AB3.Activiteit='ZijStab' - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB4 on AB.Batch=AB4.Batch and RCM.ActiviteitPerBatchTijdstip = AB4.RecalcTijdstip and AB4.Resource='Voormontage' and AB4.Activiteit='DwarsVerd' - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB5 on AB.Batch=AB5.Batch and RCM.ActiviteitPerBatchTijdstip = AB5.RecalcTijdstip and AB5.Resource='Voormontage' and AB5.Activiteit='Glas' - -where AB.RecalcTijdstip = RCM.ActiviteitPerBatchTijdstip and AB.IsLeading>0 - -) - -where ActiviteitID_1 is not null or ActiviteitID_2 is not null or ActiviteitID_3 is not null or ActiviteitID_4 is not null or ActiviteitID_5 is not null - -order by Eindtijdstip__ - -SQL2=__select BatchVisual,EindTijdstip,ProductGroep,Naar, - - Status_1,Status_2, - - Aantal_1,Aantal_2, - - StartTijdstip_1,StartTijdstip_2, - - ActiviteitID_1 , ActiviteitID_2, - - 'ASM' Label_1,'VILT' Label_2, - - Gebruiker_1,Gebruiker_2, - - 0 ReadOnly_1,0 ReadOnly_2 - -From ( - -Select - -right(AB.Batch,4) as BatchVisual, - -AB.Resource as Naar, - -isnull(AB1.EindTijdstip,AB2.EindTijdstip) EindTijdstip, - -AB.Productgroep, - -AB1.Batch || ';' || AB1.Resource || ';' || AB1.Activiteit as ActiviteitID_1, - -AB2.Batch || ';' || AB2.Resource || ';' || AB2.Activiteit as ActiviteitID_2, - -AB1.StartTijdstip as StartTijdstip_1, - -AB2.StartTijdstip as StartTijdstip_2, - -AB1.Status Status_1, - -AB2.Status Status_2, - -AB1.Aantal Aantal_1, - -AB2.Aantal Aantal_2, - -AB1.Gebruiker Gebruiker_1, - -AB2.Gebruiker Gebruiker_2 - -from APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB - -join APPS_Halux_Planning_impl.ResourceCalcMutex RCM on RCM.ID=1 - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB1 on AB.Batch=AB1.Batch and RCM.ActiviteitPerBatchTijdstip= AB1.RecalcTijdstip and AB1.Resource='MAT' and AB1.Productgroep='ASM' - -left outer join APPS_Halux_Planning_Activiteit_dto.ActiviteitPerBatch AB2 on AB.Batch=AB2.Batch and RCM.ActiviteitPerBatchTijdstip = AB2.RecalcTijdstip and AB2.Resource='MAT' and AB2.Productgroep='VILT' - -where AB.RecalcTijdstip = RCM.ActiviteitPerBatchTijdstip and AB.IsLeading>0 - -) - -where ActiviteitID_1 is not null or ActiviteitID_2 is not null - -order by Eindtijdstip__ - % Aantal gebruikers die acties kunnen uitvoeren NumberOfEmployees=2 \ No newline at end of file Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj =================================================================== diff -u -r1750 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj (.../ActiviteitenOpvolging.vbproj) (revision 1750) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj (.../ActiviteitenOpvolging.vbproj) (revision 1752) @@ -248,8 +248,12 @@ Always - - + + Always + + + Always + Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/IActiviteitPerBatchServiceAgent.vb =================================================================== diff -u -r1744 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/IActiviteitPerBatchServiceAgent.vb (.../IActiviteitPerBatchServiceAgent.vb) (revision 1744) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/IActiviteitPerBatchServiceAgent.vb (.../IActiviteitPerBatchServiceAgent.vb) (revision 1752) @@ -7,5 +7,7 @@ Sub PauseActionsFromApp() + Function GeefDataSetVoorQuery(ByVal QueryNaam As String) As System.Data.DataSet + End Interface End NameSpace \ No newline at end of file Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatch.vb =================================================================== diff -u -r1745 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatch.vb (.../ActiviteitPerBatch.vb) (revision 1745) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatch.vb (.../ActiviteitPerBatch.vb) (revision 1752) @@ -13,94 +13,108 @@ Imports System.Data -Namespace ServiceAgents.Implementations + +Public Interface ActiviteitPerBatch - _ - Public Interface ActiviteitPerBatch - - _ - Function GeefActies(ByVal Werkpost As String) As System.Data.DataSet - - _ - Function GeefActiesAsync(ByVal Werkpost As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) - - _ - Function PauzeerActiesVanApp(ByVal AppNaam As String, ByVal ComputerNaam As String) As String - - _ - Function PauzeerActiesVanAppAsync(ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) - - _ - Function RegistreerActieByKey(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As String - - _ - Function RegistreerActieByKeyAsync(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) - End Interface + + Function GeefActies(ByVal Werkpost As String) As System.Data.DataSet - _ - Public Interface ActiviteitPerBatchSoapChannel - Inherits ActiviteitPerBatch, System.ServiceModel.IClientChannel - End Interface + + Function GeefActiesAsync(ByVal Werkpost As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) - _ - Partial Public Class ActiviteitPerBatchSoapClient - Inherits System.ServiceModel.ClientBase(Of ActiviteitPerBatch) - Implements ActiviteitPerBatch - - Public Sub New() - MyBase.New - End Sub - - Public Sub New(ByVal endpointConfigurationName As String) - MyBase.New(endpointConfigurationName) - End Sub - - Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) - MyBase.New(endpointConfigurationName, remoteAddress) - End Sub - - Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) - MyBase.New(endpointConfigurationName, remoteAddress) - End Sub - - Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) - MyBase.New(binding, remoteAddress) - End Sub - - Public Function GeefActies(ByVal Werkpost As String) As System.Data.DataSet Implements ActiviteitPerBatch.GeefActies - Return MyBase.Channel.GeefActies(Werkpost) - End Function - - Public Function GeefActiesAsync(ByVal Werkpost As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) Implements ActiviteitPerBatch.GeefActiesAsync - Return MyBase.Channel.GeefActiesAsync(Werkpost) - End Function - - Public Function PauzeerActiesVanApp(ByVal AppNaam As String, ByVal ComputerNaam As String) As String Implements ActiviteitPerBatch.PauzeerActiesVanApp - Return MyBase.Channel.PauzeerActiesVanApp(AppNaam, ComputerNaam) - End Function - - Public Function PauzeerActiesVanAppAsync(ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) Implements ActiviteitPerBatch.PauzeerActiesVanAppAsync - Return MyBase.Channel.PauzeerActiesVanAppAsync(AppNaam, ComputerNaam) - End Function - - Public Function RegistreerActieByKey(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As String Implements ActiviteitPerBatch.RegistreerActieByKey - Return MyBase.Channel.RegistreerActieByKey(BatchResActKey, Status, Gebruiker, AppNaam, ComputerNaam) - End Function - - Public Function RegistreerActieByKeyAsync(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) Implements ActiviteitPerBatch.RegistreerActieByKeyAsync - Return MyBase.Channel.RegistreerActieByKeyAsync(BatchResActKey, Status, Gebruiker, AppNaam, ComputerNaam) - End Function - End Class -End NameSpace \ No newline at end of file + + Function GeefDataSetVoorQuery(ByVal AppNaam As String, ByVal ComputerNaam As String, ByVal QueryNaam As String) As System.Data.DataSet + + + Function GeefDataSetVoorQueryAsync(ByVal AppNaam As String, ByVal ComputerNaam As String, ByVal QueryNaam As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) + + + Function PauzeerActiesVanApp(ByVal AppNaam As String, ByVal ComputerNaam As String) As String + + + Function PauzeerActiesVanAppAsync(ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) + + + Function RegistreerActieByKey(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As String + + + Function RegistreerActieByKeyAsync(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) +End Interface + + +Public Interface ActiviteitPerBatchServerSoapChannel + Inherits ActiviteitPerBatch, System.ServiceModel.IClientChannel +End Interface + + +Partial Public Class ActiviteitPerBatchClient + Inherits System.ServiceModel.ClientBase(Of ActiviteitPerBatch) + Implements ActiviteitPerBatch + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal endpointConfigurationName As String) + MyBase.New(endpointConfigurationName) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(binding, remoteAddress) + End Sub + + Public Function GeefActies(ByVal Werkpost As String) As System.Data.DataSet Implements ActiviteitPerBatch.GeefActies + Return MyBase.Channel.GeefActies(Werkpost) + End Function + + Public Function GeefActiesAsync(ByVal Werkpost As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) Implements ActiviteitPerBatch.GeefActiesAsync + Return MyBase.Channel.GeefActiesAsync(Werkpost) + End Function + + Public Function GeefDataSetVoorQuery(ByVal AppNaam As String, ByVal ComputerNaam As String, ByVal QueryNaam As String) As System.Data.DataSet Implements ActiviteitPerBatch.GeefDataSetVoorQuery + Return MyBase.Channel.GeefDataSetVoorQuery(AppNaam, ComputerNaam, QueryNaam) + End Function + + Public Function GeefDataSetVoorQueryAsync(ByVal AppNaam As String, ByVal ComputerNaam As String, ByVal QueryNaam As String) As System.Threading.Tasks.Task(Of System.Data.DataSet) Implements ActiviteitPerBatch.GeefDataSetVoorQueryAsync + Return MyBase.Channel.GeefDataSetVoorQueryAsync(AppNaam, ComputerNaam, QueryNaam) + End Function + + Public Function PauzeerActiesVanApp(ByVal AppNaam As String, ByVal ComputerNaam As String) As String Implements ActiviteitPerBatch.PauzeerActiesVanApp + Return MyBase.Channel.PauzeerActiesVanApp(AppNaam, ComputerNaam) + End Function + + Public Function PauzeerActiesVanAppAsync(ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) Implements ActiviteitPerBatch.PauzeerActiesVanAppAsync + Return MyBase.Channel.PauzeerActiesVanAppAsync(AppNaam, ComputerNaam) + End Function + + Public Function RegistreerActieByKey(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As String Implements ActiviteitPerBatch.RegistreerActieByKey + Return MyBase.Channel.RegistreerActieByKey(BatchResActKey, Status, Gebruiker, AppNaam, ComputerNaam) + End Function + + Public Function RegistreerActieByKeyAsync(ByVal BatchResActKey As String, ByVal Status As String, ByVal Gebruiker As String, ByVal AppNaam As String, ByVal ComputerNaam As String) As System.Threading.Tasks.Task(Of String) Implements ActiviteitPerBatch.RegistreerActieByKeyAsync + Return MyBase.Channel.RegistreerActieByKeyAsync(BatchResActKey, Status, Gebruiker, AppNaam, ComputerNaam) + End Function +End Class FishEye: Tag 1752 refers to a dead (removed) revision in file `ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatchServer.vb'. FishEye: No comparison available. Pass `N' to diff? Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatchServiceAgent.vb =================================================================== diff -u -r1747 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatchServiceAgent.vb (.../ActiviteitPerBatchServiceAgent.vb) (revision 1747) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ServiceAgents/Implementations/ActiviteitPerBatchServiceAgent.vb (.../ActiviteitPerBatchServiceAgent.vb) (revision 1752) @@ -28,12 +28,20 @@ End Try End Sub - Private Function SoapClient() As ActiviteitPerBatchSoapClient + Private Function SoapClient() As ActiviteitPerBatchClient Dim binding = New BasicHttpBinding() Dim address = New EndpointAddress(ConfigsLoader.CacheWebserviceUrl.Value) - Dim activiteitPerBatchClient = new ActiviteitPerBatchSoapClient(binding, address) + Dim activiteitPerBatchClient = New ActiviteitPerBatchClient(binding, address) Return activiteitPerBatchClient End Function + Public Function GeefDataSetVoorQuery(QueryNaam As String) As DataSet Implements IActiviteitPerBatchServiceAgent.GeefDataSetVoorQuery + Try + Return SoapClient().GeefDataSetVoorQuery(ConfigsLoader.AppName, System.Net.Dns.GetHostName(), QueryNaam) + Catch ex As Exception + Throw New Exception($"Can't reach the Caché webservice: {vbNewLine}{ex.Message}") + End Try + End Function + End Class End NameSpace \ No newline at end of file Index: ActiviteitenOpvolging/ActiviteitenOpvolging/mappers/CacheMapper.vb =================================================================== diff -u -r1743 -r1752 --- ActiviteitenOpvolging/ActiviteitenOpvolging/mappers/CacheMapper.vb (.../CacheMapper.vb) (revision 1743) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/mappers/CacheMapper.vb (.../CacheMapper.vb) (revision 1752) @@ -1,54 +1,32 @@ -Imports System.Data.Odbc -Imports System.Windows.Navigation -Imports ActiviteitenOpvolging.configs +Imports ActiviteitenOpvolging.configs +Imports ActiviteitenOpvolging.ServiceAgents +Imports ActiviteitenOpvolging.ServiceAgents.Implementations Module CacheMapper - Private _sqlConnection As OdbcConnection #Region "Help functions" ''' ''' Helpfunction to open SQL connection to Caché. ''' - Private Sub ConnectToCache() - Try - If _sqlConnection Is Nothing Then - 'Build connection string. Looks something like this "DSN=...; DRIVER={InterSystems ODBC}; SERVER=...;DATABASE=...;UID=...;PWD=..." - Dim connectionString = $"DSN={My.Resources.CacheDSN}; DRIVER=" & "{InterSystems ODBC};" & - $"SERVER={My.Resources.CacheServerName};DATABASE={My.Resources.CacheDatabase}; - UID={My.Resources.CacheUsername};PWD={My.Resources.CachePassword}" - 'Initialise connection. - _sqlConnection = New OdbcConnection(connectionString) - End If - 'Check if connection state is already open. - If Not _sqlConnection.State = ConnectionState.Open Then - 'If not, open the connection. - _sqlConnection.Open() - Else - 'If state is open, close and open again. - 'todo find better solution for losing connection and then re-establishing connection. - _sqlConnection.Close() - _sqlConnection.Open() - End If - Catch ex As Exception - Throw New Exception($"Can't reach the Caché database: {vbNewLine}{ex.Message}") - End Try + Private ReadOnly _activiteitPerBatchServiceAgent As IActiviteitPerBatchServiceAgent + + Sub New() + _activiteitPerBatchServiceAgent = New ActiviteitPerBatchServiceAgent End Sub ''' ''' Execution of a query into a data reader. ''' ''' The query - ''' The ODBC data reader - Private Function ExecuteIntoDataReader(query As String) As OdbcDataReader + Private Function ExecuteIntoDataSet(query As String) As DataSet Try - ConnectToCache() - Return New OdbcCommand(query, _sqlConnection).ExecuteReader() + Return _activiteitPerBatchServiceAgent.GeefDataSetVoorQuery(query) Catch ex As Exception - Throw New Exception($"Could not get data reader from the Caché database.{vbNewLine}{ex.Message}") + Throw New Exception($"Could not get dataset from the Caché webservice.{vbNewLine}{ex.Message}") End Try End Function - Private Function ExtractItemFromDataReader(Of T)(ByRef dr As OdbcDataReader, key As String, Optional defaultValue As T = Nothing) As T + Private Function ExtractItemFromDataReader(Of T)(ByRef dr As DataTableReader, key As String, Optional defaultValue As T = Nothing) As T Dim value As Object Try 'Check if the column name is not present. If not present, return default value. @@ -78,7 +56,7 @@ ''' ''' ''' - Private Function HasColumn(ByRef dr As OdbcDataReader, columnName As String) As Boolean + Private Function HasColumn(ByRef dr As DataTableReader, columnName As String) As Boolean 'Loop through each row. For Each row As DataRow In dr.GetSchemaTable().Rows 'Check if column name matches defined one. @@ -114,33 +92,34 @@ ''' A list of all the work items with their activities Public Function GetData(workPostIndex As Integer, employees As List(Of IEmployee)) As List(Of IWorkItem) 'Fetch the query. - Dim query As String = FetchQuery(workPostIndex) + Dim queryName As String = FetchQuery(workPostIndex) 'Initialise the list with work items. Dim workItems As New List(Of IWorkItem) 'Declare datareader. - Dim dr As OdbcDataReader = Nothing + Dim CacheDataReader As DataTableReader = Nothing Try 'Execute query and store datareader. - dr = ExecuteIntoDataReader(query) + Dim CacheDataSet As DataSet = ExecuteIntoDataSet(queryName) + CacheDataReader = CacheDataSet.CreateDataReader() 'Fetch amount of activities. Dim activityAmount = FetchNumberOfActivities(workPostIndex) 'Loop through every (result) record. - While dr.Read() + While CacheDataReader.Read() 'Values of one result (line/record). Dim workItem As New WorkItem 'Fill with values. With workItem - .BatchVisual = ExtractItemFromDataReader(dr, "BatchVisual", 0) - .DeliverToResource = ExtractItemFromDataReader(dr, "Naar", String.Empty) - .ProductGroup = ExtractItemFromDataReader(dr, "Productgroep", String.Empty) - .Remark = ExtractItemFromDataReader(dr, "Opmerking", String.Empty) - .EndTimeStamp = ExtractItemFromDataReader(dr, "EindTijdstip", DateTime.MinValue) - .Activities = ExtractActivities(dr, activityAmount, workItem, employees) + .BatchVisual = ExtractItemFromDataReader(CacheDataReader, "BatchVisual", 0) + .DeliverToResource = ExtractItemFromDataReader(CacheDataReader, "Naar", String.Empty) + .ProductGroup = ExtractItemFromDataReader(CacheDataReader, "Productgroep", String.Empty) + .Remark = ExtractItemFromDataReader(CacheDataReader, "Opmerking", String.Empty) + .EndTimeStamp = ExtractItemFromDataReader(CacheDataReader, "EindTijdstip", DateTime.MinValue) + .Activities = ExtractActivities(CacheDataReader, activityAmount, workItem, employees) End With 'Add to the result list. @@ -153,8 +132,8 @@ Throw New Exception($"An error occured while fetching the work items from Caché.{vbNewLine}{ex.Message}") Finally 'Close connection if datareader is not nothing. - If Not IsNothing(dr) Then - dr.Close() + If Not IsNothing(CacheDataReader) Then + CacheDataReader.Close() End If End Try End Function @@ -165,7 +144,7 @@ ''' ''' ''' - Private Function ExtractActivities(dr As OdbcDataReader, numberOfActivities As Integer, workItem As IWorkItem, employees As List(Of IEmployee)) As List(Of IActivity) + Private Function ExtractActivities(dr As DataTableReader, numberOfActivities As Integer, workItem As IWorkItem, employees As List(Of IEmployee)) As List(Of IActivity) 'Declare result list. Dim activities As New List(Of IActivity)