Initial
This commit is contained in:
141
EDKB04OP/Dokument/DokumentList.vb
Normal file
141
EDKB04OP/Dokument/DokumentList.vb
Normal file
@@ -0,0 +1,141 @@
|
||||
Imports System.Data.SqlClient
|
||||
Imports System.Xml
|
||||
|
||||
''' <summary>
|
||||
''' Zum Suchen von LSV-BEs eines Partners mit Hilfe von zusäztlichen Kriterein (Selektoren).
|
||||
''' Grundlage für die Klasse bildet die Tatsache, dass man mit einem SELECT Statement wie
|
||||
''' select d.dokumentid, diw.inhalt from dbo.dokument d
|
||||
''' inner join dbo.dokumentinfo_wert diw on d.dokumentid = diw.dokumentid
|
||||
''' where d.dokumenttypnr = 1176
|
||||
''' and d.nrpar00= 1339632
|
||||
''' and diw.inhalt in ( 'IBAN;CH4400784013396322002', 'Paginatornummer;02180305004720', 'BE_LSV-ID_gueltig_ab;20180305', 'LSV-ID;SCW1W', 'Referenz1;60211909')
|
||||
''' schon sehr gut eine LSV-BE finden kann und auch sieht, ob alle Suchkriterien aus dbo.dokumentinfo_wert mitberücksichtigt wurden.
|
||||
''' </summary>
|
||||
Public Class DokumentList
|
||||
|
||||
Public Sub New(xmlDocument As XmlDocument, ByVal partnerNr As Int32)
|
||||
Me.XmlDocument = xmlDocument
|
||||
Me.PartnerNr = partnerNr
|
||||
Me.Selektors = New List(Of DokumentSelektor)()
|
||||
End Sub
|
||||
|
||||
Public Sub AddSelektor(xmlTagId As String, dokumentWertInhaltId As String, Optional ignoreSpaces As Boolean = False, Optional useValueIndex As Integer = -1,
|
||||
Optional isDate As Boolean = False)
|
||||
Dim dokumentSelektor As DokumentSelektor = New DokumentSelektor()
|
||||
dokumentSelektor.XmlTagId = xmlTagId
|
||||
dokumentSelektor.DokumentWertInhaltId = dokumentWertInhaltId
|
||||
dokumentSelektor.Wert = XmlHelper.GetItemValueByTagName(Me.XmlDocument, dokumentSelektor.XmlTagId)
|
||||
If Not String.IsNullOrEmpty(dokumentSelektor.Wert) Then
|
||||
If ignoreSpaces Then
|
||||
dokumentSelektor.Wert = dokumentSelektor.Wert.Replace(" ", "")
|
||||
End If
|
||||
If useValueIndex >= 0 Then
|
||||
Dim values As String() = dokumentSelektor.Wert.Split(";")
|
||||
dokumentSelektor.Wert = values(useValueIndex)
|
||||
End If
|
||||
If isDate Then
|
||||
dokumentSelektor.Wert = GetInhaltDatumFromXmlDatum(dokumentSelektor.Wert)
|
||||
End If
|
||||
Me.Selektors.Add(dokumentSelektor)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function GetInhaltDatumFromXmlDatum(wert As String) As String
|
||||
Dim ret As String = ""
|
||||
ret = wert.Substring(6, 2) + "." + wert.Substring(4, 2) + "." + wert.Substring(0, 4)
|
||||
Return ret
|
||||
End Function
|
||||
|
||||
Public Sub Fill()
|
||||
DokumentIds = New List(Of String)
|
||||
Dim connectionString As String = Globals.sConnectionString_edoka
|
||||
Me.SelektorFromInhalt = New Dictionary(Of String, DokumentSelektor)
|
||||
Using connection As New SqlConnection(connectionString),
|
||||
dtDokument As New DataTable,
|
||||
daDokument As New SqlDataAdapter,
|
||||
scDokument As New SqlCommand
|
||||
scDokument.Connection = connection
|
||||
Dim selektorString As String = ""
|
||||
Dim counter As Integer = 0
|
||||
|
||||
' Mit den Selektoren das SqlCommand parametrisieren
|
||||
For Each selektor As DokumentSelektor In Me.Selektors
|
||||
Dim paramName As String = "@Inhalt" + counter.ToString()
|
||||
If selektorString.Length > 0 Then
|
||||
selektorString = selektorString + ","
|
||||
End If
|
||||
selektorString = selektorString + paramName
|
||||
Dim paramValue As String = selektor.DokumentWertInhaltId + ";" + selektor.Wert
|
||||
Me.SelektorFromInhalt.Item(paramValue) = selektor
|
||||
scDokument.Parameters.AddWithValue(paramName, paramValue)
|
||||
counter = counter + 1
|
||||
Next
|
||||
|
||||
If counter > 0 Then ' wenigstens ein Selektor muss vorhanden sein
|
||||
Dim commandTextFormat As String = "select d.dokumentid, diw.inhalt from dbo.dokument d
|
||||
inner join dbo.dokumentinfo_wert diw on d.dokumentid = diw.dokumentid
|
||||
where d.dokumenttypnr = 1176
|
||||
and d.nrpar00= {0}
|
||||
and diw.inhalt in ({1})
|
||||
order by d.dokumentid, diw.inhalt"
|
||||
Dim commandText As String = String.Format(commandTextFormat, PartnerNr, selektorString)
|
||||
scDokument.CommandText = commandText
|
||||
daDokument.SelectCommand = scDokument
|
||||
daDokument.Fill(dtDokument)
|
||||
|
||||
' In der Tabelle darf nur eine DokumentId aufgeführt sein und zu dieser DokumentId
|
||||
' müssen alle Selektoren aufgeführt (Property Filled) sein
|
||||
Dim lastDokumentId As String = ""
|
||||
For Each row As DataRow In dtDokument.Rows
|
||||
Dim dokumentId As String = row.Item(0)
|
||||
If lastDokumentId = "" Then
|
||||
lastDokumentId = dokumentId
|
||||
End If
|
||||
If lastDokumentId <> dokumentId Then
|
||||
If Me.AllSelektorsFilled() Then
|
||||
DokumentIds.Add(lastDokumentId)
|
||||
End If
|
||||
Me.EmptyAllSelektors()
|
||||
lastDokumentId = dokumentId
|
||||
End If
|
||||
If lastDokumentId = dokumentId Then
|
||||
Dim inhalt As String = row.Item(1)
|
||||
Dim selektor As DokumentSelektor = New DokumentSelektor
|
||||
If SelektorFromInhalt.TryGetValue(inhalt, selektor) Then
|
||||
selektor.Filled = True
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
If lastDokumentId <> "" Then
|
||||
If Me.AllSelektorsFilled() Then
|
||||
DokumentIds.Add(lastDokumentId)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
Private Function AllSelektorsFilled() As Boolean
|
||||
Dim ret As Boolean = True
|
||||
For Each selektor As DokumentSelektor In Selektors
|
||||
If Not selektor.Filled Then
|
||||
ret = False
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
Return ret
|
||||
End Function
|
||||
|
||||
Private Sub EmptyAllSelektors()
|
||||
For Each selektor As DokumentSelektor In Selektors
|
||||
selektor.Filled = False
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Property Selektors As List(Of DokumentSelektor)
|
||||
Public Property SelektorFromInhalt As Dictionary(Of String, DokumentSelektor)
|
||||
Public Property XmlDocument As XmlDocument
|
||||
Public Property PartnerNr As Int32
|
||||
Public Property DokumentIds As List(Of String)
|
||||
|
||||
End Class
|
||||
27
EDKB04OP/Dokument/DokumentSelektor.vb
Normal file
27
EDKB04OP/Dokument/DokumentSelektor.vb
Normal file
@@ -0,0 +1,27 @@
|
||||
Public Class DokumentSelektor
|
||||
|
||||
''' <summary>
|
||||
''' Tag Id des Selektors in der XML Message von Avaloq
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property XmlTagId As String
|
||||
|
||||
''' <summary>
|
||||
''' Id (das ist der Teil vor dem ;) von dbo.dokumentinfo_wert.inhalt
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property DokumentWertInhaltId As String
|
||||
|
||||
''' <summary>
|
||||
''' Wert des XML Tags aus der Message von Avaloq
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property Wert As String
|
||||
|
||||
''' <summary>
|
||||
''' True: Der Selektor wurde in die DataTable abgefüllt
|
||||
''' False: Der Selektor fehlt in der DataTable
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property Filled As Boolean = False
|
||||
End Class
|
||||
Reference in New Issue
Block a user