' 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
#Region "Hulpfuncties"
'''
''' 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
'''
''' Uitvoeren van een query naar een data reader.
'''
''' De query
''' De ODBC data reader
Private Function ExecuteIntoDataReader(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
'''
''' Uitvoeren van een commando.
'''
''' De query
Private Sub ExecuteCommand(query As String)
Try
ConnectToCache()
Dim command = New OdbcCommand(query, _sqlConnection)
command.ExecuteNonQuery()
Catch ex As Exception
Throw New Exception($"Het commando uitvoeren op de Caché databank.{vbNewLine}{ex.Message}")
End Try
End Sub
'''
''' Commando uitvoeren en eerste items per record retourneren als lijst van strings.
'''
''' De query
''' De eerste items van de records.
Private Function ExecuteIntoListOfString(ByVal query As String) As List(Of String)
Try
'Initialisatie van de lijst.
Dim data As New List(Of String)
'Opvragen van de data reader.
Dim dr = ExecuteIntoDataReader(query)
'Overlopen van de resultaten en toevoegen aan de lijst.
While (dr.Read())
'Eerste veld van een record toevoegen aan de lijst.
data.Add(dr.GetValue(0).ToString)
End While
'De lijst retourneren.
Return data
Catch ex As Exception
Throw New Exception($"Er is een fout opgetreden bij het opvragen van een lijst van data uit de Caché databank {vbNewLine}{ex.Message}")
End Try
End Function
#End Region
#Region "Data readers"
'''
''' Opvragen van de datareader voor een bepaald kolom type, een waarde en een optionele filter.
'''
''' Het type kolom
''' De waarde
''' Een optionele filter
'''
Private Function GetDataReader(kolom As Kolommen, waarde As String, Optional filter As String = Nothing) As OdbcDataReader
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van DataReader met kolom, waarde, filter?: '{EnumMapper.geefWaardeBijEnumValue(kolom)}' '{waarde}' '{filter}'")
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
'Als de filter is meegegeven wordt de tekst juist opgebouwd. Anders is deze leeg, zodat het niet in de query wordt ingevuld.
Dim filterTekst = String.Empty
If filter IsNot Nothing Then
'De filter is gespecifieerd.
filterTekst = $" AND Onderdeel = '{filter}' "
End If
'De query wordt opgebouwd met de data en de eventuele filter.
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}'{filterTekst}group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar"
'Uitvoeren van query en datareader retourneren.
Dim dr = ExecuteIntoDataReader(query)
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van DataReader met kolom, waarde, filter?: '{EnumMapper.geefWaardeBijEnumValue(kolom)}' '{waarde}' '{filter}'", True)
Return dr
Catch ex As Exception
Throw New Exception($"Fout bij opvragen van DataReader met kolom, waarde, filter?: '{EnumMapper.geefWaardeBijEnumValue(kolom)}' '{waarde}' '{filter}'{vbNewLine}{ex.Message}")
End Try
End Function
'''
''' Opvragen van de data reader aan de hand van een barcode.
'''
'''
'''
Private Function GetDataReaderBarcode(barcode As String, Optional filter As String = Nothing) As OdbcDataReader
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van data reader met barcode, filter?: '{barcode}' '{filter}'")
'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, barcode)
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
'Als de filter is meegegeven wordt de tekst juist opgebouwd. Anders is deze leeg, zodat het niet in de query wordt ingevuld.
Dim filterTekst = String.Empty
If filter IsNot Nothing Then
'De filter is gespecifieerd.
filterTekst = $" AND Onderdeel = '{filter}' "
End If
'De query wordt opgebouwd met de data en de eventuele filter.
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}' AND Kar = '{kar}'{filterTekst}) group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar"
'Uitvoeren van query en datareader retourneren.
Dim dr = ExecuteIntoDataReader(query)
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van data reader met barcode: {barcode}", True)
Return dr
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
'''
''' Opvragen van de data reader aan de hand van een lijst van barcodes.
'''
''' De lijst van barcodes
''' De datareader
Private Function GetDataReader(barcodes As List(Of String)) As OdbcDataReader
Try
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van OdbcDataReader met barcodes: '{String.Join(", ", barcodes.ToArray())}'")
'Controleren dat er minstens 2 items in de lijst zitten.
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
'Stringbuilder initialiseren en reeds vullen met de eerste barcode.
Dim builder As New StringBuilder
builder.Append($"'{barcodes.Item(0)}'")
'Lijst omzetten in juiste formaat voor query.
For Each barcode As String In barcodes.GetRange(1, barcodes.Count - 1)
'Barcodes samenvoegen, gescheiden door een komma.
builder.Append($", '{barcode}'")
Next
'Opbouwen van de query.
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) "
query &= $"where log.VerwerkingID in ({builder.ToString()})"
query &= " group by BatchID, ToeleveringID,Klant.naam,log.VerwerkingID, log.dossiercode,Onderdeel, Kar order by BatchID, ToeleveringID, Kar"
'Uitvoeren van query en datareader retourneren.
Dim dr = ExecuteIntoDataReader(query)
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van OdbcDataReader met barcodes: '{String.Join(", ", barcodes.ToArray())}'", True)
Return dr
Catch ex As Exception
Throw New Exception($"Fout bij opvragen van OdbcDataReader met barcodes: '{String.Join(", ", barcodes.ToArray())}' {vbNewLine}{ex.Message}")
End Try
End Function
#End Region
'''
''' Opvragen van details van een item aan de hand van de barcode.
'''
''' De barcode
''' De datareader
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
'Uitvoeren van query en datareader retourneren.
Dim dr = ExecuteIntoDataReader(query)
LogBestandTextMapper.writeToFile("Caché", $"Opvragen van OdbcDataReader met details, van barcode: {barcode}", True)
Return dr
Catch ex As Exception
Throw New Exception($"Fout bij opvragen van OdbcDataReader met details, van barcode: '{barcode}'{vbNewLine}{ex.Message}")
End Try
End Function
'''
''' Opvragen van de datatable aan de hand van het type kolom en de waarde.
'''
''' Het type kolom
''' De waarde
''' De data table
Public Function GeefDataTable(kolom As Kolommen, waarde As Object) As DataTable
'Declaratie van de data reader.
Dim dataReader As OdbcDataReader
'Type kolom controleren.
If kolom = Kolommen.barcode Then
'Als het een barcode is moeten we iets meer laten zien: alle items die in dezelfde batch en kar zitten.
dataReader = GetDataReaderBarcode(waarde)
ElseIf kolom = Kolommen.barcodesVoorraad Then
'Barcodes van een voorraad worden met meerdere tegelijk opgevraagd.
dataReader = GetDataReader(TryCast(CObj(waarde), List(Of String)))
Else
'Elke andere kolom buiten barcode en barcodesvoorraad.
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
'''
''' Opvragen van de datareader
'''
'''
'''
'''
'''
Public Function GeefdataTable(kolom As Kolommen, waarde As String, filter As String) As DataTable
'Declaratie van de data reader.
Dim dataReader As OdbcDataReader
'Type kolom controleren.
If kolom = Kolommen.barcode Then
'Als het een barcode is moeten we iets meer laten zien: items die in dezelfde batch en kar zitten.
dataReader = GetDataReaderBarcode(waarde, filter)
Else
dataReader = GetDataReader(kolom, waarde, filter)
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
'''
''' Opvragen lijst van mogelijke onderdelen (rug, bodem, ...)
'''
''' Lijst van namen van onderdelen
Public Function GeefOnderdelen() As List(Of String)
LogBestandTextMapper.writeToFile("Caché", "Opvragen van onderdelen.")
Const query = "select DISTINCT Onderdeel from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.ProductieStapLogItem"
Dim onderdelen = ExecuteIntoListOfString(query)
LogBestandTextMapper.writeToFile("Caché", "Opvragen van onderdelen", True)
Return onderdelen
End Function
'''
''' Velden van een rework updaten met informatie uit de databank.
''' Dit gebeurt aan de hand van de barcode van de rework zelf of een optionele andere barcode.
'''
''' De rework om te laten updaten
''' Optionele barcode van de originele rework
'''
Public Function UpdateRework(rework As Rework, Optional barcodeOrigineel As String = Nothing) As Rework
LogBestandTextMapper.writeToFile("Caché", "Updaten van rework met informatie uit databank.")
'Controleren welke barcode gebruikt zal worden
Dim barcode As String
If String.IsNullOrEmpty(barcodeOrigineel) Then
'Barcode van rework gebruiken.
barcode = rework.barcode
Else
'Andere barcode gebruiken.
barcode = barcodeOrigineel
End If
'Query opbouwen met barcode.
Dim query = $"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}'"
Try
'Query uitvoeren en datareader bijhouden.
Dim dr = ExecuteIntoDataReader(query)
'Controleren of er resultaten zijn.
If dr.Read() Then
'Er is een resultaat, de waarden uitlezen.
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")))
Else
'Er is geen resultaat gevonden.
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
'''
''' Opslaan van de rework reden.
'''
''' De reden
Public Sub OpslaanReworkReden(ByRef rework As Rework)
LogBestandTextMapper.writeToFile("Caché", $"Opslaan rework reden met reden: {rework.reden}")
'Updaten van het stapnummer (op 0 zetten)
UpdateStapNummer(rework.barcode)
'Opslaan van de reden.
SlaRedenOp(rework)
LogBestandTextMapper.writeToFile("Caché", $"Opslaan rework reden met reden: {rework.reden}", True)
End Sub
'''
''' Hulpfunctie voor het resetten van het stapnummer (op 0 plaatsen).
'''
''' Het verwerking Id
Private Sub UpdateStapNummer(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"
'Commando uitvoeren.
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
'''
''' Hulpfunctie voor het opslaan van de rework reden.
'''
'''
Private Sub SlaRedenOp(ByVal rework As Rework)
LogBestandTextMapper.writeToFile("Caché", $"Rework reden wegschrijven naar de databank, reden: {rework.reden}")
'Updaten van de data in de rework.
rework.aanpassenData()
'Huidige datum registreren.
Dim datum As String = Now.ToString("yyyy-MM-dd HH:mm:ss")
'De query opbouwen.
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
'Voer het commando uit.
ExecuteCommand(query)
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 nummer voor in de barcode voor test lade of special lade.
'''
''' Het nummer voor de barcode.
Public Function GeefBarcodeNummer() As Integer
'Variablen declareren.
Dim query As String
Dim teller, maxteller, minTeller, nieuweTeller As Integer
'Blijven herhalen indien nodig.
Dim retry = True
LogBestandTextMapper.writeToFile("Caché", $"- Opvragen van barcode nummer, retry: {retry}")
Do While retry
LogBestandTextMapper.writeToFile("Caché", "Opvragen van teller, minimum teller en maximum teller.")
'Toewijzen query.
query = "select * from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='BARCODE'"
Try
'Query uitvoeren en datareader bijhouden.
Dim dr = ExecuteIntoDataReader(query)
'Velden opvragen uit datareader.
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
'Kijken of maximum waarde van de teller nog niet is overschreden.
If Not (teller > maxteller) Then
'Zo ja, teller verhogen.
nieuweTeller = teller + 1
Else
'Maximum is overschreden, teller resetten.
nieuweTeller = minTeller
End If
LogBestandTextMapper.writeToFile("Caché", "Opvragen van teller, minimum teller en maximum teller.", True)
'UPDATEN MET NIEUWE TELLER
'Alleen uitvoeren als de verwerk optie aanstaat
If Not Configs.geefVerwerkStatus Then
'Er wordt niet verwerkt, teller niet updaten en lus verbreken.
retry = False
Else
LogBestandTextMapper.writeToFile("Caché", $"Updaten van de teller met de nieuwe teller: {nieuweTeller}")
'Query opbouwen.
query = $"Update APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers set Teller={nieuweTeller} where label='BARCODE'"
'Commando uitvoeren
ExecuteCommand(query)
LogBestandTextMapper.writeToFile("Caché", $"Updaten van de teller met de nieuwe teller: {nieuweTeller}", True)
'Ophalen geüpdate teller, reden hiervoor is dat de tellers op hetzelfde moment verhoogt kunnen worden.
LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller")
query = "select Teller from APPS_Halux_Opvolging_ProductieStap_TAOR_dto.Tellers where label='BARCODE'"
Try
'Query uitvoeren en datareader bijhouden.
Dim dr = ExecuteIntoDataReader(query)
'Teller uitlezen.
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{vbNewLine}{ex.Message}")
End Try
LogBestandTextMapper.writeToFile("Caché", "Opvragen van de geüpdate teller", True)
'De opgehaalde teller in de databank verschilt van de teller die is geproeerd weg te schrijven.
'Dit betekent dat de teller reeds is overschreven. Daarom zal geprobeerd worden de teller opnieuw te bepalen.
If nieuweTeller <> teller Then
'Kijken of dit niet al eens is gebeurt. Houdt een oneindige loop tegen.
If retry Then
'Eerste keer dat dit voorkomt, updaten van variabele.
retry = False
Else
'Kon na herproberen nog steeds geen correcte teller ophalen.
Throw New Exception("Kan geen unieke barcode nummer opvragen")
End If
Else
'Teller is correct, while-lus verbreken.
retry = False
End If
End If
Loop
LogBestandTextMapper.writeToFile("Caché", $"- Opvragen van barcode nummer, retry: {retry}", True)
Return nieuweTeller
End Function
'''
''' Opslaan van gegenereerde onderdeel door eerst het origineel op te vragen, bepaalde velden aan te passen, en dan te inserten.
'''
''' Het originele onderdeel.
''' Het nieuwe onderdeel.
''' Naam voor het nieuwe onderdeel.
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
'Commando initialiseren.
Dim addCommand As New OdbcCommand With {
.CommandText = query,
.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
'Connecteren met Caché.
ConnectToCache()
'Query uitvoeren.
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
End Module