diff --git a/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb b/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
index 848178b0..1e8bbacf 100644
--- a/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
+++ b/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
@@ -62,29 +62,44 @@ Public Class ImportZUGFeRDFiles
Dim oValues As New Dictionary(Of String, String)
Dim oGuid As String = Path.GetFileNameWithoutExtension(oFile.FullName)
+ Dim oConnection = _firebird.GetConnection()
+ Dim oTransaction = oConnection.BeginTransaction()
+
Try
oDocument = _zugferd.ExtractZUGFeRDFile(oFile.FullName)
For Each mapping In args.PropertyMap
Dim propertyValue As String = PropertyValues.GetPropValue(oDocument, mapping.Value)
- _logger.Info("Mapping Property {0} to value {1}. Will be inserted into column {2}", mapping.Value, propertyValue, mapping.Key)
' TODO: Check for missing values
- If String.IsNullOrEmpty(propertyValue) Then
- Throw New Exception($"Property {mapping.Value} not found or empty.")
- End If
+ 'If String.IsNullOrEmpty(propertyValue) Then
+ ' Throw New Exception($"Property {mapping.Value} not found or empty.")
+ 'End If
+ Console.WriteLine("{0} => {1}", mapping.Key, propertyValue)
oValues.Add(mapping.Key, propertyValue)
+
+ ' TODO: Insert into scheise
+ Dim oTableColumnArray = mapping.Key.Split(".")
+ Dim oTableName = oTableColumnArray.First()
+ Dim oColumnName = oTableColumnArray.Last()
+
+ _logger.Info("Mapping Property {0} to value {1}. Will be inserted into column {2} on table {3}", mapping.Value, propertyValue, oTableName, oColumnName)
+
+ Dim oCommand = $"INSERT INTO {oTableName} (FILEID, ""NAME"", ""VALUE"") VALUES ('{oGuid}', '{oColumnName}', '{propertyValue}')"
+ _firebird.ExecuteNonQueryWithConnection(oCommand, oConnection, Firebird.TransactionMode.ExternalTransaction, oTransaction)
Next
- ' TODO: Insert into scheise
-
+ oTransaction.Commit()
Catch ex As Exception
+ oTransaction.Rollback()
oMoveDirectory = args.ErrorDirectory
- _logger.Error(ex)
+ _logger.Error(ex, "File {0} was not processesd. Transaction rolled back.")
Finally
- _filesystem.MoveTo(oFile.FullName, oMoveDirectory)
+ oConnection.Close()
+ '_filesystem.MoveTo(oFile.FullName, oMoveDirectory)
_logger.Info("Finished processing file {0}", oFile.Name)
+
End Try
Next
End If
diff --git a/Jobs/EDMI/ZUGFeRD/PropertyValues.vb b/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
index b0bce3ea..4bf59c7f 100644
--- a/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
+++ b/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
@@ -36,6 +36,10 @@ Public Class PropertyValues
Obj = oInfo.GetValue(Obj, Nothing)
+ If IsNothing(Obj) Then
+ Return Nothing
+ End If
+
If oHasIndex Then
Obj = Obj(0)
End If
diff --git a/Jobs/Jobs.vbproj b/Jobs/Jobs.vbproj
index d0ad6d0c..3d058ff8 100644
--- a/Jobs/Jobs.vbproj
+++ b/Jobs/Jobs.vbproj
@@ -84,6 +84,7 @@
+
..\packages\NLog.4.5.11\lib\net45\NLog.dll
diff --git a/Modules.Database/Firebird.vb b/Modules.Database/Firebird.vb
index db0fefba..386a9f91 100644
--- a/Modules.Database/Firebird.vb
+++ b/Modules.Database/Firebird.vb
@@ -56,6 +56,7 @@ Public Class Firebird
Public Enum TransactionMode
NoTransaction
+ ExternalTransaction
WithTransaction
End Enum
@@ -138,18 +139,18 @@ Public Class Firebird
}.ToString()
End Function
- Private Function MaybeGetTransaction(Connection As FbConnection, Mode As TransactionMode)
+ Private Function MaybeGetTransaction(Connection As FbConnection, Mode As TransactionMode, Transaction As FbTransaction)
If Mode = TransactionMode.NoTransaction Then
Return Nothing
- ElseIf TransactionMode.WithTransaction Then
- Return Connection.BeginTransaction()
+ ElseIf Mode = TransactionMode.ExternalTransaction Then
+ Return Transaction
Else
Return Connection.BeginTransaction()
End If
End Function
- Private Function MaybeCommitTransaction(Transaction As FbTransaction)
- If IsNothing(Transaction) Then
+ Private Function MaybeCommitTransaction(Transaction As FbTransaction, TransactionMode As TransactionMode)
+ If TransactionMode = TransactionMode.NoTransaction Then
Return True
Else
Try
@@ -168,27 +169,31 @@ Public Class Firebird
''' The command to execute
''' The Firebird connection to use
''' True, if command was executed sucessfully. Otherwise false.
- Public Function ExecuteNonQueryWithConnection(SqlCommand As String, Connection As FbConnection) As Boolean
+ Public Function ExecuteNonQueryWithConnection(SqlCommand As String, Connection As FbConnection, Optional TransactionMode As TransactionMode = TransactionMode.WithTransaction, Optional Transaction As FbTransaction = Nothing) As Boolean
_logger.Debug("Executing Non-Query: {0}", SqlCommand)
If Connection Is Nothing Then
Return Nothing
End If
- Dim oTransaction As FbTransaction = Connection.BeginTransaction()
+ Dim oTransaction = MaybeGetTransaction(Connection, TransactionMode, Transaction)
Try
Dim oCommand As New FbCommand With {
.CommandText = SqlCommand,
- .Connection = Connection,
- .Transaction = oTransaction
+ .Connection = Connection
}
+
+ If Not IsNothing(oTransaction) Then
+ oCommand.Transaction = oTransaction
+ End If
+
oCommand.ExecuteNonQuery()
Catch ex As Exception
_logger.Error(ex, $"Error in ExecuteNonQuery while executing command: '{SqlCommand}'")
Throw ex
Finally
- oTransaction.Commit()
+ MaybeCommitTransaction(oTransaction, TransactionMode)
End Try
Return True
@@ -213,14 +218,14 @@ Public Class Firebird
''' The query to execute
''' The Firebird connection to use
''' The scalar value if the command was executed successfully. Nothing otherwise.
- Public Function GetScalarValueWithConnection(SqlQuery As String, Connection As FbConnection) As Object
+ Public Function GetScalarValueWithConnection(SqlQuery As String, Connection As FbConnection, Optional TransactionMode As TransactionMode = TransactionMode.WithTransaction, Optional Transaction As FbTransaction = Nothing) As Object
_logger.Debug("Fetching Scalar-Value: {0}", SqlQuery)
If Connection Is Nothing Then
Return Nothing
End If
- Dim oTransaction As FbTransaction = Connection.BeginTransaction()
+ Dim oTransaction = MaybeGetTransaction(Connection, TransactionMode, Transaction)
Dim oResult As Object
Try
@@ -234,7 +239,7 @@ Public Class Firebird
_logger.Error(ex, $"Error in ReturnScalar while executing command: '{SqlQuery}'")
Throw ex
Finally
- oTransaction.Commit()
+ MaybeCommitTransaction(oTransaction, TransactionMode)
End Try
Return oResult
@@ -259,14 +264,14 @@ Public Class Firebird
''' The query to execute
''' The Firebird connection to use
''' A datatable containing the results if the command was executed successfully. Nothing otherwise.
- Public Function GetDatatableWithConnection(SqlQuery As String, Connection As FbConnection, Optional TransactionMode As TransactionMode = TransactionMode.NoTransaction) As DataTable
+ Public Function GetDatatableWithConnection(SqlQuery As String, Connection As FbConnection, Optional TransactionMode As TransactionMode = TransactionMode.NoTransaction, Optional Transaction As FbTransaction = Nothing) As DataTable
_logger.Debug("Fetching Datatable: {0}", SqlQuery)
If Connection Is Nothing Then
Return Nothing
End If
- Dim oTransaction = MaybeGetTransaction(Connection, TransactionMode)
+ Dim oTransaction = MaybeGetTransaction(Connection, TransactionMode, Transaction)
Dim oDatatable As New DataTable() With {
.TableName = "DDRESULT"
}
@@ -283,7 +288,7 @@ Public Class Firebird
_logger.Error(ex, $"Error in GetDatatableWithConnection while executing command: '{SqlQuery}'")
Throw ex
Finally
- MaybeCommitTransaction(oTransaction)
+ MaybeCommitTransaction(oTransaction, TransactionMode)
End Try
Return oDatatable
diff --git a/ZUGFeRDTest/Form1.Designer.vb b/ZUGFeRDTest/Form1.Designer.vb
index 7ab7c806..2fa7fdf1 100644
--- a/ZUGFeRDTest/Form1.Designer.vb
+++ b/ZUGFeRDTest/Form1.Designer.vb
@@ -24,6 +24,7 @@ Partial Class Form1
Private Sub InitializeComponent()
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.Button1 = New System.Windows.Forms.Button()
+ Me.ListBox1 = New System.Windows.Forms.ListBox()
Me.SuspendLayout()
'
'OpenFileDialog1
@@ -39,11 +40,20 @@ Partial Class Form1
Me.Button1.Text = "Button1"
Me.Button1.UseVisualStyleBackColor = True
'
+ 'ListBox1
+ '
+ Me.ListBox1.FormattingEnabled = True
+ Me.ListBox1.Location = New System.Drawing.Point(378, 12)
+ Me.ListBox1.Name = "ListBox1"
+ Me.ListBox1.Size = New System.Drawing.Size(526, 407)
+ Me.ListBox1.TabIndex = 1
+ '
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(916, 435)
+ Me.Controls.Add(Me.ListBox1)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
@@ -53,4 +63,5 @@ Partial Class Form1
Friend WithEvents OpenFileDialog1 As OpenFileDialog
Friend WithEvents Button1 As Button
+ Friend WithEvents ListBox1 As ListBox
End Class
diff --git a/ZUGFeRDTest/Form1.vb b/ZUGFeRDTest/Form1.vb
index bb109ec2..58da1a08 100644
--- a/ZUGFeRDTest/Form1.vb
+++ b/ZUGFeRDTest/Form1.vb
@@ -72,7 +72,7 @@ Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim args As New WorkerArgs()
args = LoadFolderConfig(args)
- args = LoadPropertyMapFor(args, "ZUGFeRD-Invoice")
+ args = LoadPropertyMapFor(args, "DEFAULT")
Dim job As New Jobs.ImportZUGFeRDFiles(_logConfig, _firebird)