' robin de bock 03/08/2017 Imports System.Data.Odbc Imports System.Text Module CacheMapper Private Const CONNECTIE_STRING As String = "DSN=Cache01Admin1; DRIVER={InterSystems ODBC}; SERVER=CACHE01;DATABASE=ADMIN1;UID=_SYSTEM;PWD=SYS" Private _sqlConnection As OdbcConnection ''' ''' Hulpfunctie om de SQLCOnnectie met Caché te openen. ''' Private Sub ConnectToCache() Try If _sqlConnection Is Nothing Then 'Connectie initialiseren. _sqlConnection = New OdbcConnection(CONNECTIE_STRING) End If 'Controleer of connectie status al open is. If Not _sqlConnection.State = ConnectionState.Open Then 'ALs dit nog niet het geval is, open de connectie. _sqlConnection.Open() End If Catch ex As Exception Throw New Exception($"De Caché databank kan niet bereikt worden: {vbNewLine}{ex.Message}") End Try End Sub Private dr As OdbcDataReader Private Sub ExecuteIntoDataReader(query As String) Try ConnectToCache() sluitDataReader() Dim comm As OdbcCommand = New OdbcCommand(query, _sqlConnection) dr = comm.ExecuteReader() Catch ex As Exception Throw New Exception($"Er is een fout opgetreden bij het opvragen van de DataReader uit de Caché databank.{vbNewLine}{ex.Message}") End Try End Sub Private Function ExecuteIntoDataReader2(query As String) As OdbcDataReader Try ConnectToCache() Return New OdbcCommand(query, _sqlConnection).ExecuteReader() Catch ex As Exception Throw New Exception($"Kon datareader niet opvragen uit Caché datatabank.{vbNewLine}{ex.Message}") End Try End Function Private Sub executeCommand(query As String) Try ConnectToCache() Dim comm As OdbcCommand = New OdbcCommand(query, _sqlConnection) comm.ExecuteNonQuery() Catch ex As Exception Throw New Exception("De caché databank kan niet bereikt worden " & vbNewLine & ex.Message) End Try End Sub Private Function executeIntoListOfString(ByVal query As String) As List(Of String) Try ConnectToCache() Dim comm As OdbcCommand = New OdbcCommand(query, _sqlConnection) Dim data As New List(Of String) dr = comm.ExecuteReader() While (dr.Read()) data.Add(dr.GetValue(0).ToString) End While Return data Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opvragen van data uit de Caché databank" & vbNewLine & ex.Message) End Try End Function Private Function GetDataReader(kolom As Kolommen, waarde As String) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", $"Opvragen van DataReader met kolom, waarde: {EnumMapper.geefWaardeBijEnumValue(kolom)} {waarde}") Try Dim kolomnaam As String = EnumMapper.geefCacheKolomNaamBijKolom(kolom) Dim equalsOfLikeSleutelwoord As String If Not kolom = Kolommen.klantnaam Then 'Geen naam, aka gewoon equals. equalsOfLikeSleutelwoord = "=" Else 'Als het een naam is moeten we "like" als sleutelwoord gebruiken. equalsOfLikeSleutelwoord = "like" 'Kijken of veld de naam bevat door gebruik te maken van reguliere expressie. waarde = "%" + waarde + "%" End If Dim query = $"select BatchID, ToeleveringID, Klant.naam, log.dossiercode, Kar, log.VerwerkingID, Onderdeel, max(StapNummer) as Status, sum(IsRework) as Rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where {kolomnaam} {equalsOfLikeSleutelwoord} '{waarde}' group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar" LogBestandTextMapper.writeToFile("Caché", $"Opvragen van DataReader met kolom, waarde: {EnumMapper.geefWaardeBijEnumValue(kolom)} {waarde}", True) 'Uitvoeren van query en datareader retourneren. Return ExecuteIntoDataReader2(query) Catch ex As Exception Throw New Exception($"Fout bij opvragen van DataReader met kolom, waarde: {EnumMapper.geefWaardeBijEnumValue(kolom)} {waarde}") End Try End Function Private Function GetDataReaderBarcode(waarde As String) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", $"Opvragen van data reader met barcode: {waarde}") 'Variable declaratie. Dim batch, kar 'Opvragen batch en kar. Try 'Opvragen van de datareader met als type barcode bij de hulpfunctie. Dim barcodeDataReader = GetDataReader(Kolommen.barcode, waarde) If Not barcodeDataReader.Read() Then 'Als er geen rij is gevonden wordt de lege data reader geretourneert. Return barcodeDataReader Else 'Opvragen en toewijzen van batch en kar. batch = barcodeDataReader.GetValue(0).ToString kar = barcodeDataReader.GetValue(4).ToString End If Catch ex As Exception Throw New Exception($"Er is een fout opgetreden bij het opvragen van de batch en kar voor het opvragen van de data reader uit de Caché databank {vbnewline}{ex.Message}") End Try 'Data reader opvragen. Try Dim query = $"select BatchID, ToeleveringID, Klant.naam, log.dossiercode, ISNULL(Kar, '') as Kar, log.VerwerkingID, Onderdeel, max(StapNummer) as Status, sum(IsRework) as Rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where (BatchID='{batch}') group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar having ISNULL(Kar, '') like '{kar}' order by BatchID, ToeleveringID, Kar" LogBestandTextMapper.writeToFile("Caché", $"Opvragen van data reader met barcode: {waarde}", True) 'Uitvoeren van query en datareader retourneren. Return ExecuteIntoDataReader2(query) Catch ex As Exception Throw New Exception($"Er is een fout opgetreden bij het vullen van de data reader van een bepaalde batch en kar uit de Caché databank {vbnewline}{ex.Message}") End Try End Function Private Function getDataReader(kolom As Kolommen, waarde As String, filter As String) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met kolom, waarde, filter: " & EnumMapper.geefWaardeBijEnumValue(kolom) & ", " & waarde & ", " & filter) Dim kolomnaam As String = geefCacheKolomNaamBijKolom(kolom) Dim keyword As String = " = " Try 'als het een naam is moeten we "like" gebruiken If kolomnaam.Equals("naam") Then keyword = " like " waarde = "%" + waarde + "%" End If Dim query As String = "select BatchID, ToeleveringID, Klant.naam, log.dossiercode, Kar, log.VerwerkingID, Onderdeel, max(StapNummer) as Status, sum(IsRework) as Rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where " & kolomnaam & keyword & "'" & waarde & "'" & " AND Onderdeel = " & "'" & filter & "'" & " group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar" ExecuteIntoDataReader(query) Catch ex As Exception Throw New Exception("Fout bij opvragen van OdbcDataReader met kolom, waarde, filter: " & EnumMapper.geefWaardeBijEnumValue(kolom) & ", " & waarde & ", " & filter & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met kolom, waarde, filter: " & EnumMapper.geefWaardeBijEnumValue(kolom) & ", " & waarde & ", " & filter, True) Return dr End Function Private Function getDataReaderBarcode(waarde As String, filter As String) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met waarde, filter: " & waarde & ", " & filter) Dim query As String Try Dim dr As OdbcDataReader = GetDataReader(Kolommen.barcode, waarde) 'als er geen entry is gevonden wordt de lege datareader gereturnt If Not dr.HasRows Then Return dr End If dr.Read() Dim batch As String = dr.GetValue(0).ToString Dim kar As String = dr.GetValue(4).ToString query = "select BatchID, ToeleveringID, Klant.naam, log.dossiercode, Kar, log.VerwerkingID, Onderdeel, max(StapNummer) as Status, sum(IsRework) as Rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where (" & geefCacheKolomNaamBijKolom(Kolommen.batch) & " = " & "'" & batch & "'" & " AND " & geefCacheKolomNaamBijKolom(Kolommen.sorteerkar) & " = " & "'" & kar & "'" & " AND Onderdeel = " & "'" & filter & "'" & ") group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar" ExecuteIntoDataReader(query) Catch ex As Exception Throw New Exception("Fout bij opvragen van OdbcDataReader met waarde, filter: " & waarde & ", " & filter & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met waarde, filter: " & waarde & ", " & filter, True) Return dr End Function Public Function getDetails(barcode As String) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met details, van barcode: " & barcode) Dim query As String = "select BatchID, ToeleveringID, Klant.naam, log.dossiercode, Kar, log.VerwerkingID, machineID, Onderdeel, tijdstipProductie as TijdstipProductie, StapNummer as Productiestap, Case when IsRework=1 THEN 'TRUE' END as rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where " & "verwerkingID = " & "'" & barcode & "'" & " order by StapNummer" Try ExecuteIntoDataReader(query) Catch ex As Exception Throw New Exception("Fout bij opvragen van OdbcDataReader met details, van barcode: " & barcode & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met details, van barcode: " & barcode, True) Return dr End Function Public Function GeefDataTable(kolom As Kolommen, waarde As Object) As DataTable Dim dataReader As OdbcDataReader If kolom = Kolommen.barcode Then 'Als het een barcode is moeten we iets meer laten zien: entry's die in dezelfde batch en kar zitten als de barcode. dataReader = GetDataReaderBarcode(waarde) ElseIf kolom = Kolommen.barcodesVoorraad Then 'Barcodes van een voorraad worden tegelijk verwerkt. dataReader= geefDataReader(TryCast(CObj(waarde), List(Of String))) Else dataReader= GetDataReader(kolom, waarde) End If 'DataTable initialiseren en vullen met resultaat van de datareader. Dim datatable = new DataTable() datatable.Load(datareader) 'Connectie van datareader sluiten. datareader.Close() 'Retourneren van de datatable return datatable End Function Public Function geefdatareader(kolom As Kolommen, waarde As String, filter As String) As OdbcDataReader 'als het een barcode is moeten we iets meer laten zien: entry's die in dezelfde batch en kar zitten als de barcode If kolom = Kolommen.barcode Then Return getDataReaderBarcode(waarde, filter) Else Return getDataReader(kolom, waarde, filter) End If End Function Public Function geefOnderdelen() As List(Of String) LogBestandTextMapper.writeToFile("Caché", "Opvragen van onderdelen") Dim query As String = "select DISTINCT Onderdeel from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem" Dim onderdelen As New List(Of String) onderdelen = executeIntoListOfString(query) LogBestandTextMapper.writeToFile("Caché", "Opvragen van onderdelen", True) Return onderdelen End Function Public Function updateRework(rework As Rework.Rework, Optional barcodeOrigineel As String = "") As Rework.Rework LogBestandTextMapper.writeToFile("Caché", "Updaten van rework met informatie uit databank") Dim barcode As String If barcodeOrigineel.Equals("") Then barcode = rework.barcode Else barcode = barcodeOrigineel End If Dim query As String = "select top 1 BatchID, DossierCode, DueOut, IsRework, Kar, MachineID, Onderdeel, PartijID, ProductID, SequentieNummer, StapNummer, TijdstipCreatie, TijdstipProductie, ToeleveringID, VerwerkingID, ReworkReden from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) where " & "verwerkingID = " & "'" & barcode & "'" Dim hasRead As Boolean = False Try ConnectToCache() Dim command As OdbcCommand = New OdbcCommand(query, _sqlConnection) dr = command.ExecuteReader While dr.Read() rework.batch = If(IsDBNull(dr.Item("BatchID")), Nothing, CStr(dr.Item("BatchID"))) rework.dossierCode = If(IsDBNull(dr.Item("DossierCode")), Nothing, CStr(dr.Item("DossierCode"))) rework.DueOut = If(IsDBNull(dr.Item("DueOut")), Nothing, CStr(dr.Item("DueOut"))) rework.IsRework = "rework" rework.kar = If(IsDBNull(dr.Item("Kar")), Nothing, CStr(dr.Item("Kar"))) rework.MachineID = If(IsDBNull(dr.Item("MachineID")), Nothing, CStr(dr.Item("MachineID"))) rework.OrigineelOnderdeel = If(IsDBNull(dr.Item("Onderdeel")), Nothing, CStr(dr.Item("Onderdeel"))) rework.PartijID = If(IsDBNull(dr.Item("PartijID")), Nothing, CStr(dr.Item("PartijID"))) rework.ProductID = If(IsDBNull(dr.Item("ProductID")), Nothing, CStr(dr.Item("ProductID"))) rework.SequentieNummer = If(IsDBNull(dr.Item("SequentieNummer")), Nothing, CStr(dr.Item("SequentieNummer"))) rework.StapNummer = If(IsDBNull(dr.Item("StapNummer")), Nothing, CStr(dr.Item("StapNummer"))) rework.TijdstipCreatie = If(IsDBNull(dr.Item("TijdstipCreatie")), Nothing, CStr(dr.Item("TijdstipCreatie"))) rework.TijdstipProductie = If(IsDBNull(dr.Item("TijdstipProductie")), Nothing, CStr(dr.Item("TijdstipProductie"))) rework.ToeleveringID = If(IsDBNull(dr.Item("ToeleveringID")), Nothing, CStr(dr.Item("ToeleveringID"))) hasRead = True End While If Not hasRead Then Throw New Exception("Er is geen record in Caché gevonden voor barcode " & barcode & " om een rework te updaten") End If Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het updaten van een rework met data uit database Caché " & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Updaten van rework met informatie uit databank", True) Return rework End Function Public Sub opslaanReworkReden(ByRef rework As Rework.Rework) LogBestandTextMapper.writeToFile("Caché", "Opslaan rework reden met reden: " & rework.reden) updateStapNummer(rework.barcode) slaRedenOp(rework) LogBestandTextMapper.writeToFile("Caché", "Opslaan rework reden met reden: " & rework.reden, True) End Sub Private Sub updateStapNummer(ByVal verwerkingID As String) LogBestandTextMapper.writeToFile("Caché", "Updaten stapnummer met verwerkingID: " & verwerkingID) Try Dim query As String = "UPDATE APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem SET StapNummer=-StapNummer WHERE VerwerkingID= '" & verwerkingID & "' and StapNummer>0" executeCommand(query) Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het updaten van het stapnummer bij het opslaan van een rework reden in de Caché databank" & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Updaten stapnummer met verwerkingID: " & verwerkingID, True) End Sub Private Sub slaRedenOp(ByVal rework As Rework.Rework) LogBestandTextMapper.writeToFile("Caché", "Rework reden wegschrijven naar de databank, reden: " & rework.reden) rework.aanpassenData() Dim datum As String = Now.ToString("yyyy-MM-dd HH:mm:ss") Dim query As String = "insert into APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem (BatchID, DossierCode, DueOut, IsRework, Kar, MachineID, Onderdeel, PartijID, ProductID, SequentieNummer, StapNummer, TijdstipCreatie, TijdstipProductie, ToeleveringID, VerwerkingID, ReworkReden) values ('" & rework.batch & "', '" & rework.dossierCode & "', '" & rework.DueOut & "', '" & rework.IsRework & "', '" & rework.kar & "', '" & rework.MachineID & "', '" & rework.OrigineelOnderdeel & "', '" & rework.PartijID & "', '" & rework.ProductID & "', '" & rework.SequentieNummer & "', '" & rework.StapNummer & "', '" & datum & "', '" & datum & "' ,'" & rework.ToeleveringID & "', '" & rework.barcode & "', '" & rework.reden & "')" Try Dim addCommand As New OdbcCommand addCommand.CommandText = query addCommand.Connection = _sqlConnection ConnectToCache() addCommand.ExecuteNonQuery() Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het wegschrijven van de rework met reden naar Caché " & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Rework reden wegschrijven naar de databank, reden: " & rework.reden, True) End Sub 'Opvragen barcode nummer voor test lade of special lade Public Function geefBarcodeNummer() As Integer Dim query As String = "" Dim teller, maxteller, minTeller, nieuweTeller As Integer Dim retry As Boolean = True LogBestandTextMapper.writeToFile("Caché", "- Opvragen van barcode nummer, retry: " & retry) Do While retry LogBestandTextMapper.writeToFile("Caché", "Opvragen van alle tellers") query = "select * from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='BARCODE'" Try ExecuteIntoDataReader(query) dr.Read() teller = CInt(dr.Item("Teller")) maxteller = CInt(dr.Item("MaxTeller")) minTeller = CInt(dr.Item("MinTeller")) Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opvragen van de tellers voor een test lade barcode nummer" & vbNewLine & ex.Message) End Try If teller > maxteller Then nieuweTeller = minTeller Else nieuweTeller = teller + 1 End If 'alleen uitvoeren als de verwerk optie aanstaat If Configs.geefVerwerkStatus Then LogBestandTextMapper.writeToFile("Caché", "Opvragen van alle tellers", True) LogBestandTextMapper.writeToFile("Caché", "Updaten van de teller met de nieuwe teller: " & nieuweTeller) query = "Update APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers set Teller=" & nieuweTeller & " where label='BARCODE'" executeCommand(query) LogBestandTextMapper.writeToFile("Caché", "Updaten van de teller met de nieuwe teller: " & nieuweTeller, True) LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller") query = "select Teller from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='BARCODE'" Try ExecuteIntoDataReader(query) dr.Read() teller = dr.Item("Teller") Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opvragen van de nieuwe teller voor test lade barcode nummer" & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller", True) If nieuweTeller <> teller Then If retry Then retry = False Else Throw New Exception("Kan geen unieke barcode nummer opvragen") End If Else retry = False End If Else 'er wordt niet verwerkt retry = False End If Loop LogBestandTextMapper.writeToFile("Caché", "- Opvragen van barcode nummer, retry: " & retry, True) Return nieuweTeller End Function 'Opvragen barcode nummer voor test lade Public Function geefTestLadeTrayNummer() As Integer Dim query As String = "" Dim teller, maxteller, minTeller, nieuweTeller As Integer Dim retry As Boolean = True LogBestandTextMapper.writeToFile("Caché", "- Opvragen van tray nummer, retry: " & retry) Do While retry LogBestandTextMapper.writeToFile("Caché", "Opvragen van alle tellers") query = "select * from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='TRAY'" Try ExecuteIntoDataReader(query) dr.Read() teller = CInt(dr.Item("Teller")) maxteller = CInt(dr.Item("MaxTeller")) minTeller = CInt(dr.Item("MinTeller")) Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opvragen van de tellers voor test lade tray nummer") End Try If teller > maxteller Then nieuweTeller = minTeller Else nieuweTeller = teller + 1 End If 'alleen uitvoeren als de verwerk optie aanstaat If Configs.geefVerwerkStatus Then LogBestandTextMapper.writeToFile("Caché", "Opvragen van alle tellers", True) LogBestandTextMapper.writeToFile("Caché", "Updaten van de teller met de nieuwe teller: " & nieuweTeller) query = "Update APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers set Teller=" & nieuweTeller & " where label='TRAY'" executeCommand(query) LogBestandTextMapper.writeToFile("Caché", "Updaten van de teller met de nieuwe teller: " & nieuweTeller, True) LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller") query = "select Teller from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='TRAY'" Try ExecuteIntoDataReader(query) dr.Read() teller = dr.Item("Teller") Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opvragen van de nieuwe teller voor test lade tray nummer") End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller", True) If nieuweTeller <> teller Then If retry Then retry = False Else Throw New Exception("Kan geen unieke tray nummer opvragen") End If Else retry = False End If Else 'er wordt niet verwerkt retry = False End If Loop LogBestandTextMapper.writeToFile("Caché", "- Opvragen van tray nummer, retry: " & retry, True) Return nieuweTeller End Function 'Opslaan van gegenereerde onderdeel door eerst het origineel op te vragen en bepaalde velden aan te passen en dan te inserten Public Sub opslaanGegenereerdeOnderdelen(origineelOnderdeel As ArdisData, nieuwOnderdeel As ArdisData, nieuwOnderdeelNaam As String) LogBestandTextMapper.writeToFile("Cache", "Opslaan van gegenereerde onderdeel aan de hand van oud bestaand onderdeel, barcode bestaand onderdeel, barcode nieuw onderdeel: " & origineelOnderdeel.PartCalc & ", " & nieuwOnderdeel.PartCalc) Dim query As String = "Insert into APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem (BatchID, DossierCode, DueOut, IsRework, Kar, MachineID, Onderdeel, PartijID, ProductID, SequentieNummer, StapNummer, TijdstipCreatie, TijdstipProductie, ToeleveringID, VerwerkingID) " query &= "select top 1 BatchID, DossierCode, DueOut, ?, Kar, MachineID, ?, PartijID, ProductID, SequentieNummer, ?, ?, ?, ToeleveringID, ? from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem where VerwerkingID=?" Try Dim addCommand As New OdbcCommand addCommand.CommandText = query addCommand.Connection = _sqlConnection addCommand.Parameters.AddWithValue("@isReworkNieuw", OdbcType.VarChar).Value = False addCommand.Parameters.AddWithValue("@OnderdeelNieuw", OdbcType.VarChar).Value = nieuwOnderdeelNaam addCommand.Parameters.AddWithValue("@StapNummerNieuw", OdbcType.VarChar).Value = 0 addCommand.Parameters.AddWithValue("@TijdstipCreatieNieuw", OdbcType.VarChar).Value = Now.ToString("yyyy-MM-dd HH:mm:ss") addCommand.Parameters.AddWithValue("@TijdstipProductieNieuw", OdbcType.VarChar).Value = Now.ToString("yyyy-MM-dd HH:mm:ss") addCommand.Parameters.AddWithValue("@VerwerkingIDNieuw", OdbcType.VarChar).Value = nieuwOnderdeel.PartCalc addCommand.Parameters.AddWithValue("@VerwerkingIDOrigineel", OdbcType.VarChar).Value = origineelOnderdeel.PartCalc ConnectToCache() addCommand.ExecuteNonQuery() Catch ex As Exception Throw New Exception("Er is een fout opgetreden bij het opslaan van de gegenereerde onderdelen in de caché databank" & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Cache", "Opslaan van gegenereerde onderdeel aan de hand van oud bestaand onderdeel, barcode bestaand onderdeel, barcode nieuw onderdeel: " & origineelOnderdeel.PartCalc & ", " & nieuwOnderdeel.PartCalc, True) End Sub 'Opvragen gegevens met barcodes voor voorraad aanvulling Private Function geefDataReader(barcodes As List(Of String)) As OdbcDataReader LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met barcodes: " & String.Join(", ", barcodes.ToArray())) If barcodes Is Nothing OrElse barcodes.Count <= 1 Then Throw New Exception("De lijst met barcodes om de OdbcDataReader op te vragen mag niet leeg zijn (minstens 2 elementen)") End If Try Dim builder As New StringBuilder builder.Append("'").Append(barcodes.Item(0)).Append("'") 'list omzetten in juiste formaat voor query For Each barcode As String In barcodes.GetRange(1, barcodes.Count - 1) builder.Append(", '").Append(barcode).Append("'") Next Dim query As String = "Select BatchID, ToeleveringID, Klant.naam, log.dossiercode, Kar, log.VerwerkingID, Onderdeel, max(StapNummer) as Status, sum(IsRework) as Rework from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem log join derde_klant.klant on klant.ID=$Piece(log.PartijID,'||',2) " query &= "where log.VerwerkingID in (" & builder.ToString & ")" 'query &= "where log.VerwerkingID in (" & "'RKV01990US02363D0', 'RKV01990US02363D1'" & ")" query &= " group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar" ExecuteIntoDataReader(query) Catch ex As Exception Throw New Exception("Fout bij opvragen van OdbcDataReader met barcodes: " & String.Join(", ", barcodes.ToArray()) & vbNewLine & ex.Message) End Try LogBestandTextMapper.writeToFile("Caché", "Opvragen van OdbcDataReader met barcodes: " & String.Join(", ", barcodes.ToArray()), True) Return dr End Function End Module