diff --git a/MultiTool.Common/Constants.vb b/MultiTool.Common/Constants.vb
index f533c84..e03cc55 100644
--- a/MultiTool.Common/Constants.vb
+++ b/MultiTool.Common/Constants.vb
@@ -10,6 +10,9 @@
Public Const FUNCTION_FIELD = "FIELD"
Public Const FUNCTION_RUNNINGNUMBER = "RUNNINGNUMBER"
+ Public Const PLACEHOLDER_CONST = "CONST"
+ Public Const PLACEHOLDER_FIELD = "FIELD"
+
Public Const TEMPLATE_TYPE_DATE = "xs:date"
Public Const TEMPLATE_TYPE_INTEGER = "xs:integer"
Public Const TEMPLATE_TYPE_DECIMAL = "xs:decimal"
diff --git a/MultiTool.Common/Documents/Document.vb b/MultiTool.Common/Documents/Document.vb
index 11af63e..acb9889 100644
--- a/MultiTool.Common/Documents/Document.vb
+++ b/MultiTool.Common/Documents/Document.vb
@@ -43,6 +43,7 @@ Namespace Documents
Dim oDocumentErrors As List(Of String) = DocumentErrors.
Select(Function(err) err.ToString()).
ToList()
+
Return oDocumentErrors.
Concat(oRowErrors).
ToList()
diff --git a/MultiTool.Common/Patterns.vb b/MultiTool.Common/Patterns.vb
index 4347709..bf6449e 100644
--- a/MultiTool.Common/Patterns.vb
+++ b/MultiTool.Common/Patterns.vb
@@ -2,21 +2,29 @@
Imports DigitalData.Modules.Logging
Imports MultiTool.Common.Documents
Imports MultiTool.Common.Templates
+Imports MultiTool.Common.Constants
Imports MultiTool.Common.Winline.Entities
Public Class Patterns
Inherits BaseClass
Private ReadOnly GeneralConfig As GeneralConfig
+ Private ReadOnly Regex As New Regex("{#(\w+)#([\w\s_-]+)}+")
Public Sub New(pLogConfig As LogConfig, pGeneralConfig As GeneralConfig)
MyBase.New(pLogConfig)
GeneralConfig = pGeneralConfig
End Sub
- Public Function ReplaceForImport(pDocument As Documents.Document, pRow As DocumentRow, pReportFileName As String, oString As String)
- Dim oRegex = New Regex("{#(\w+)#([\w\s_-]+)}+")
- Dim oMatches As MatchCollection = oRegex.Matches(oString)
+ '''
+ ''' Replaces placeholders in an sql marked as final sql in the template.
+ '''
+ '''
+ ''' This SQL does not replace field-value placeholders!
+ ''' This is a globally applied function!
+ '''
+ Public Function ReplaceForImportFinalSQL(pDocument As Document, pReportFileName As String, pString As String) As String
+ Dim oMatches As MatchCollection = Regex.Matches(pString)
For Each oMatch As Match In oMatches
Dim oPlaceholderString As String = oMatch.Groups.Item(0)?.Value
@@ -24,56 +32,39 @@ Public Class Patterns
Dim oPlaceholderValue As String = oMatch.Groups.Item(2)?.Value
Select Case oPlaceholderType.ToUpper
- Case "FIELD"
- Dim oFieldName = oPlaceholderValue
- Dim oTargetField = pRow.Fields.
- Where(Function(field) field.Key = oFieldName).
- SingleOrDefault()
-
- oString = oString.Replace(oPlaceholderString, oTargetField.Value.Final)
-
- Case "CONST"
+ Case PLACEHOLDER_CONST
Dim oValue = ""
Select Case oPlaceholderValue.ToUpper
- Case "MESOYEAR"
- oValue = GeneralConfig.GetWinLineYear()
-
- Case "MESOCOMP"
- oValue = pDocument.Mandator.Id
-
- Case "USERNAME"
- oValue = Environment.UserName
-
- Case "CURRENTDATE"
- oValue = Now.ToString()
-
Case "FILENAME"
oValue = pDocument.FileName
Case "FILENAME_REPORT"
oValue = pReportFileName
- Case "MANDATORDB"
- oValue = pDocument.Mandator.Database
-
Case Else
- oValue = ""
+ oValue = ReplaceBasicValues(oPlaceholderValue, pDocument.Mandator)
End Select
If oValue <> "" Then
- oString = oString.Replace(oPlaceholderString, oValue)
+ pString = pString.Replace(oPlaceholderString, oValue)
End If
End Select
Next
- Return oString
+ Return pString
End Function
- Public Function ReplaceForExport(pDocument As ExportDocument, pMandator As Mandator, oString As String)
- Dim oRegex = New Regex("{#(\w+)#([\w\s_-]+)}+")
- Dim oMatches As MatchCollection = oRegex.Matches(oString)
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ Public Function ReplaceForImport(pDocument As Document, pRow As DocumentRow, pString As String)
+ Dim oMatches As MatchCollection = Regex.Matches(pString)
For Each oMatch As Match In oMatches
Dim oPlaceholderString As String = oMatch.Groups.Item(0)?.Value
@@ -81,22 +72,48 @@ Public Class Patterns
Dim oPlaceholderValue As String = oMatch.Groups.Item(2)?.Value
Select Case oPlaceholderType.ToUpper
- Case "CONST"
+ Case PLACEHOLDER_FIELD
+ Dim oFieldName = oPlaceholderValue
+ Dim oTargetField = pRow.Fields.
+ Where(Function(field) field.Key = oFieldName).
+ SingleOrDefault()
+
+ pString = pString.Replace(oPlaceholderString, oTargetField.Value.Final)
+
+ Case PLACEHOLDER_CONST
Dim oValue = ""
Select Case oPlaceholderValue.ToUpper
- Case "MESOYEAR"
- oValue = GeneralConfig.GetWinLineYear()
+ Case "FILENAME"
+ oValue = pDocument.FileName
- Case "MESOCOMP"
- oValue = pMandator.Id
+ Case Else
+ oValue = ReplaceBasicValues(oPlaceholderValue, pDocument.Mandator)
- Case "USERNAME"
- oValue = Environment.UserName
+ End Select
- Case "CURRENTDATE"
- oValue = Now.ToString()
+ If oValue <> "" Then
+ pString = pString.Replace(oPlaceholderString, oValue)
+ End If
+ End Select
+ Next
+ Return pString
+ End Function
+
+ Public Function ReplaceForExport(pDocument As ExportDocument, pMandator As Mandator, oString As String)
+ Dim oMatches As MatchCollection = Regex.Matches(oString)
+
+ For Each oMatch As Match In oMatches
+ Dim oPlaceholderString As String = oMatch.Groups.Item(0)?.Value
+ Dim oPlaceholderType As String = oMatch.Groups.Item(1)?.Value
+ Dim oPlaceholderValue As String = oMatch.Groups.Item(2)?.Value
+
+ Select Case oPlaceholderType.ToUpper
+ Case PLACEHOLDER_CONST
+ Dim oValue = ""
+
+ Select Case oPlaceholderValue.ToUpper
Case "FILENAME"
oValue = pDocument.FilenameExport
@@ -106,11 +123,9 @@ Public Class Patterns
Case "RUNNINGNUMBER"
oValue = pDocument.RunningNumber
- Case "MANDATORDB"
- oValue = pMandator.Database
Case Else
- oValue = ""
+ oValue = ReplaceBasicValues(oPlaceholderValue, pMandator)
End Select
@@ -122,4 +137,31 @@ Public Class Patterns
Return oString
End Function
+
+ '''
+ ''' Replaces basic values in the CONST namespace that only depend on the current mandator
+ '''
+ ''' Value that will be used to replaced the placeholder
+ Public Function ReplaceBasicValues(pPlaceholderValue As String, pMandator As Mandator) As String
+ Select Case pPlaceholderValue.ToUpper
+ Case "MESOYEAR"
+ Return GeneralConfig.GetWinLineYear()
+
+ Case "MESOCOMP"
+ Return pMandator.Id
+
+ Case "USERNAME"
+ Return Environment.UserName
+
+ Case "MANDATORDB"
+ Return pMandator.Database
+
+ Case "CURRENTDATE"
+ Return Now.ToString()
+
+ Case Else
+ Return String.Empty
+
+ End Select
+ End Function
End Class
diff --git a/MultiTool.Common/Winline/WinlineData.vb b/MultiTool.Common/Winline/WinlineData.vb
index 8086969..f640336 100644
--- a/MultiTool.Common/Winline/WinlineData.vb
+++ b/MultiTool.Common/Winline/WinlineData.vb
@@ -965,7 +965,7 @@ Namespace Winline
End If
End Function
- Public Async Function ExecuteFinalSQL(pDocument As ExportDocument, pTemplate As Template, pMandator As Mandator) As Task(Of Boolean)
+ Public Async Function ExecuteFinalSQLForExport(pDocument As ExportDocument, pTemplate As Template, pMandator As Mandator) As Task(Of Boolean)
Try
Dim oSql As String = Patterns.ReplaceForExport(pDocument, pMandator, pTemplate.FinalSQL)
Return Await Database.ExecuteNonQueryAsync(oSql)
@@ -976,6 +976,17 @@ Namespace Winline
End Try
End Function
+ Public Async Function ExecuteFinalSQLForImport(pDocument As Document, pTemplate As Template, pReportFilename As String) As Task(Of Boolean)
+ Try
+ Dim oSql As String = Patterns.ReplaceForImportFinalSQL(pDocument, pReportFilename, pTemplate.FinalSQL)
+ Return Await Database.ExecuteNonQueryAsync(oSql)
+
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
Private Function GetDocumentFromDataRow(pDataRow As DataRow) As ExportDocument
Dim oAccountNumber = pDataRow.Item("ACCOUNT_NUMBER")
Dim oRunningNumber As String = pDataRow.Item("RUNNING_NUMBER")
diff --git a/MultiTool.Form/frmExportMain.vb b/MultiTool.Form/frmExportMain.vb
index f5e303e..b65bc80 100644
--- a/MultiTool.Form/frmExportMain.vb
+++ b/MultiTool.Form/frmExportMain.vb
@@ -245,7 +245,7 @@ Public Class frmExportMain
SplashScreenManager.SetWaitFormDescription(oMessage)
Await WebService.ExportDocumentFromWinline(oDocument, CurrentTemplate, oMandator)
- Dim oFinalSqlResult = Await Winline.ExecuteFinalSQL(oDocument, CurrentTemplate, oMandator)
+ Dim oFinalSqlResult = Await Winline.ExecuteFinalSQLForExport(oDocument, CurrentTemplate, oMandator)
If oFinalSqlResult = False Then
Throw New DatabaseException("FinalSQL was not executed successfully!")