Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
'''Funktionen für d4as Einlesen der Indexdaten aus einer XML- oder
'''Textdatei
'''Die Funktion liest je nach Inhalt der Inputdatei (Indexfilename) als
'''XML oder als TXT (Komma-getrennt) die Indexwerte aus der Datei und liefert
'''diese im Property IndexData zurück.
'''Stefan Hutter
Public Class clsIndexData
#Region "Deklarationen"
'''Interne Variable für IndexFilenName
Dim m_indexfilename As String
'''Enthält der Name der Inputdatei mit den Indexdaten (XML oder
'''TXT)
'''Stefan Hutter
Property IndexFileName() As String
Get
Return m_indexfilename
End Get
Set(ByVal Value As String)
m_indexfilename = Value
End Set
End Property
'''Interne Variable für IndexData
Dim m_Indexdata As DataTable
'''Datentabelle mit den geladenen Indexwerten
'''Stefan Hutter
Property Indexdata() As DataTable
Get
Return m_Indexdata
End Get
Set(ByVal Value As DataTable)
m_Indexdata = Value
End Set
End Property
'''Temporäre Collection mit den getrennten Indexdaten aus der
'''txt-Input-Datei
'''Stefan Hutter
Dim Splitline As Collection
#End Region
'''Angelieferte Indexdaten auslesen und in die Datentabele Indexdata
'''speichern. Abhängig vom angelieferten Format, XML-Datei einlesen oder
'''Komma-getrennte Textdatei auslesen
'''Stefan Hutter
Public Function getindexdata() As Boolean
Index_Datei_Sichern(Me.IndexFileName)
Try
Dim s As String = ""
FileOpen(1, Me.IndexFileName, OpenMode.Input)
Input(1, s)
FileClose(1)
If UCase(Microsoft.VisualBasic.Left(s, 5)) = " 0 Then Return True
Exit Function
End If
Indexwerte_Einlesen(s)
End While
Catch
tr.Close()
Return False
End Try
Return True
End If
Catch ex As Exception
Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Öffnen der Inputdatei " + Me.IndexFileName, "", "")
Finally
Try
FileClose(1)
Catch
End Try
If Params.DeleteOriginalfiles = 0 Then
FileSystem.Rename(Me.IndexFileName, Me.IndexFileName + "." + Format(Now, "yyyyMMddHHmmss"))
Else
Try
File.SetAttributes(Me.IndexFileName, FileAttributes.Normal)
Catch
End Try
Try
File.Move(Me.IndexFileName, Params.sikind + Now.ToString("yyyyMMddHHmmss") + "_" + Path.GetFileName(Me.IndexFileName))
'File.Delete(Me.IndexFileName)
Catch
End Try
End If
End Try
End Function
Private Sub Index_Datei_Sichern(ByVal filename As String)
Try
Dim sqlstatement As String = "Select * from Import_Job where Import_JobNr = " + LTrim(Str(Journal.JournalNr))
Dim Connection As New SqlConnection()
Dim DA As New SqlDataAdapter(sqlstatement, Globals.sConnectionString_journale)
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(DA)
Dim dsDATEN As New DataSet()
Dim fs As New FileStream(filename, FileMode.Open, FileAccess.Read)
Dim mydata(fs.Length) As Byte
Try
fs.Read(mydata, 0, fs.Length)
fs.Close()
Connection.ConnectionString = Globals.sConnectionString_journale
Connection.Open()
DA.Fill(dsDATEN, "docs")
Dim myRow As DataRow
myRow = dsDATEN.Tables(0).Rows(0)
myRow.Item(7) = mydata
DA.Update(dsDATEN, "docs")
Catch ex As Exception
End Try
fs = Nothing
cb = Nothing
dsDATEN = Nothing
DA = Nothing
Connection.Close()
Connection = Nothing
Catch
End Try
End Sub
Private Sub map_iris_struktur(ByRef idxds As DataSet)
Dim tmpds As New DataSet
tmpds.ReadXml(System.AppDomain.CurrentDomain.BaseDirectory + "\canonstruktur.xml")
Dim dr As DataRow = tmpds.Tables(0).NewRow
For Each col As DataColumn In tmpds.Tables(0).Columns
dr.Item(col.ColumnName) = ""
Next
For Each col As DataColumn In idxds.Tables(0).Columns
dr.Item(col.ColumnName) = idxds.Tables(0).Rows(0).Item(col.ColumnName)
Next
tmpds.Tables(0).Rows.Clear()
tmpds.Tables(0).Rows.Add(dr)
idxds.Tables.Clear()
idxds.Tables.Add(tmpds.Tables(0).Copy)
tmpds.Dispose()
End Sub
Private Sub map_iris_LSV(ByRef idxds As DataSet)
Dim tmpds As New DataSet
tmpds.ReadXml(System.AppDomain.CurrentDomain.BaseDirectory + "\edkb08struktur.xml")
tmpds.Tables(0).Columns.Add("DOKUMENTWERT21")
tmpds.Tables(0).Columns.Add("DOKUMENTWERT22")
tmpds.Tables(0).Columns.Add("DOKUMENTWERT23")
tmpds.Tables(0).Columns.Add("DOKUMENTWERT24")
tmpds.Tables(0).Columns.Add("DOKUMENTWERT25")
tmpds.Tables(0).Columns.Add("Stapelkennung")
Dim dr As DataRow = tmpds.Tables(0).NewRow
For Each col As DataColumn In tmpds.Tables(0).Columns
dr.Item(col.ColumnName) = ""
Next
For Each col As DataColumn In idxds.Tables(0).Columns
Try
dr.Item(col.ColumnName) = idxds.Tables(0).Rows(0).Item(col.ColumnName)
Catch
End Try
Next
dr.Item("ersteller") = idxds.Tables(0).Rows(0).Item("Benutzer")
'dr.Item("DOKUMENTTYPNR") = idxds.Tables(0).Rows(0).Item("Dokumenttyp")
'//dr.Item("DOKUMENTWERT1") = "Scandatum;" + idxds.Tables(0).Rows(0).Item("Scandatum")
'dr.Item("DOKUMENTWERT2") = "Paginatornummer;" + idxds.Tables(0).Rows(0).Item("Paginatornummer")
'dr.Item("DOKUMENTWERT3") = "Status;" + idxds.Tables(0).Rows(0).Item("Status")
'dr.Item("DOKUMENTWERT4") = "IBAN;" + idxds.Tables(0).Rows(0).Item("IBAN")
For i As Integer = 11 To 33
dr.Item("DOKUMENTWERT" + (i - 10).ToString) = idxds.Tables(0).Columns(i).ColumnName + ";" + idxds.Tables(0).Rows(0).Item(i).ToString
Next
tmpds.Tables(0).Rows.Clear()
tmpds.Tables(0).Rows.Add(dr)
idxds.Tables.Clear()
idxds.Tables.Add(tmpds.Tables(0).Copy)
tmpds.Dispose()
End Sub
Private Function parsexml(ByVal istr As String) As String
istr = istr.Replace("&", "&")
Return istr
End Function
'''XML-Datei als Datatable einlesen
'''Stefan Hutter
'''
Private Sub xmlinput()
Try
Dim idxds As New DataSet()
Try
idxds.ReadXml(Me.IndexFileName)
Catch
FileOpen(21, Me.IndexFileName, OpenMode.Input)
FileOpen(22, Me.IndexFileName + ".tmp", OpenMode.Output)
Dim il As String
Dim ol As String
While Not EOF(21)
Input(21, il)
ol = parsexml(il)
PrintLine(22, ol)
End While
FileClose(21)
FileClose(22)
File.Delete(Me.IndexFileName)
Rename(Me.IndexFileName + ".tmp", Me.IndexFileName)
idxds.ReadXml(Me.IndexFileName)
End Try
Try
If Globals.Canon_Herkunft(idxds.Tables(0).Rows(0).Item("Herkunftsapplikation")) Then
'20210816 - LSV
If idxds.Tables(0).Rows(0).Item("Herkunftsapplikation") = "IRIS_FORMS_LSV" Then
map_iris_LSV(idxds)
Else
map_iris_struktur(idxds)
End If
End If
Catch ex As Exception
End Try 'canon-Mapping'
'Anpassungen EBES_LSV
Dim i As Integer
For i = 0 To idxds.Tables.Count - 1
'-- Canon von >20 auf > 5 geändert
If idxds.Tables(i).Columns.Count > 20 Then
Me.Indexdata = idxds.Tables(i)
Exit For
End If
Next
' Me.Indexdata = idxds.Tables(0)
Catch ex As Exception
Journal.Insert_Journal("", "", "", Me.IndexFileName, 16, "Fehler beim einlesen der XML-Datei: " + ex.Message, "", "")
End Try
End Sub
'''Datentabelle "Indexdata" erstellen, damit die Komma-Getrennten
'''Datensätze eingelesen und zugewiesen werden können
'''Stefan Hutter
Private Sub Datentabelle_Erstellen()
Try
Dim idxds As New DataSet()
idxds.ReadXml(DivFnkt.ApplicationPath + "TabStruktur_Delimited_Import.xml")
Me.Indexdata = idxds.Tables(0)
Me.Indexdata.Rows(0).Delete()
Catch ex As Exception
Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Erstellen der Initialiseriungstabelle mit der XML-Struktur" + ex.Message, "", "")
End Try
End Sub
'''Einzele Indexwerte aus dem Inputfile auslesen und als Datensatz in der
'''Tabelle "Indexdata" speichern
'''Zeile der Inputdatei (Komma-getrennte Werte)
'''Stefan Hutter
Private Sub Indexwerte_Einlesen(ByVal s As String)
Splitline = SplitDelimitedLine(s, ",", """")
Insert_Into_DB(Splitline)
End Sub
'''Datensatz in der Tabelle "Indexdata" einfügen. Die Anzahl der
'''Spalten in der Tabelle ist abhängig vom Default-XML, welches zur
'''Tabellenerstellung verwendet wird.
'''
'''Stefan Hutter
Private Sub Insert_Into_DB(ByVal data As Collection)
Dim i As Integer
Try
Dim datacolumns As Integer = Me.Indexdata.Columns.Count
Dim RowVals(datacolumns - 1) As Object
For i = 0 To datacolumns - 1
RowVals(i) = ""
Next
For i = 1 To data.Count
RowVals(i - 1) = data.Item(i)
Next
Me.Indexdata.Rows.Add(RowVals)
Catch ex As Exception
Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Einlesen der Indexdaten: RecordNr:" + Str(i) + ": " + ex.Message, "", "")
End Try
End Sub
'''Splitfunktion
'''Input-Zeile
'''Trennzeichen der einzelnen werte (z.B. Komma,
'''Strichpunkt usw.)
'''Qualiflyer, welcher die Werte umschliesst (z.B.
'''")
'''Stefan Hutter
Private Function SplitDelimitedLine(ByVal CurrentLine As String, ByVal Delimiter As String, ByVal Qualifier As String) As Collection
Try
Dim i As Integer
Dim SplitString As New Collection()
Dim CountDelimiter As Boolean
Dim Total As Integer
Dim Ch As Char
Dim Section As String
CountDelimiter = True
Total = 0
Section = ""
For i = 1 To Len(CurrentLine)
Ch = Mid(CurrentLine, i, 1)
Select Case Ch
Case Qualifier
If CountDelimiter Then
CountDelimiter = False
Else
CountDelimiter = True
End If
Case Delimiter
If CountDelimiter Then
'SplitString.Add(New MySection(Section))
SplitString.Add(Section)
Section = ""
Total = Total + 1
End If
Case Else
Section = Section & Ch
End Select
Next
If CountDelimiter Then
'SplitString.Add(New MySection(Section))
SplitString.Add(Section)
End If
SplitDelimitedLine = SplitString
Catch ex As Exception
Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Einlesen der Indexdaten: " + ex.Message, "", "")
Dim SplitString As New Collection()
SplitDelimitedLine = SplitString
End Try
End Function
End Class