7 Commits

Author SHA1 Message Date
Jonathan Jenne
b3d8b2d6cf Merge branch 'master' of http://dd-vmp07-com04:3000/AppStd/Monorepo 2021-12-09 14:37:58 +01:00
Jonathan Jenne
f137922516 ZUGFeRDTest: Update 2021-12-09 14:31:56 +01:00
Jonathan Jenne
3e550121b9 Jobs: Make Xml Document an Object to support new variable ZUGFeRD Schemata 2021-12-09 14:30:54 +01:00
Jonathan Jenne
2a90f21b03 Interfaces: Version 1.6.0.0 2021-12-09 14:30:03 +01:00
Jonathan Jenne
5aa41d2b9f Interfaces: Support ZUGFeRD 1.0 - 2.1.1 2021-12-09 14:29:42 +01:00
Jonathan Jenne
39483efe4d Zooflow: WIP globix 2021-12-09 13:31:36 +01:00
Jonathan Jenne
42db951c93 EDMIService: Add dynamic file path 2021-12-09 13:31:25 +01:00
22 changed files with 11576 additions and 3370 deletions

View File

@@ -68,18 +68,18 @@ Partial Class Form1
'
Me.Button2.Location = New System.Drawing.Point(6, 19)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(221, 23)
Me.Button2.Size = New System.Drawing.Size(246, 23)
Me.Button2.TabIndex = 2
Me.Button2.Text = "Validate PDF"
Me.Button2.Text = "Validate and Serialize PDF"
Me.Button2.UseVisualStyleBackColor = True
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(6, 48)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(221, 23)
Me.Button3.Size = New System.Drawing.Size(246, 23)
Me.Button3.TabIndex = 3
Me.Button3.Text = "Validate and Serialize PDF"
Me.Button3.Text = "Validate and Serialize PDF and Parse Props"
Me.Button3.UseVisualStyleBackColor = True
'
'Button4
@@ -136,7 +136,7 @@ Partial Class Form1
'
Me.Button7.Location = New System.Drawing.Point(6, 77)
Me.Button7.Name = "Button7"
Me.Button7.Size = New System.Drawing.Size(221, 23)
Me.Button7.Size = New System.Drawing.Size(246, 23)
Me.Button7.TabIndex = 3
Me.Button7.Text = "Extract PDF Attachments"
Me.Button7.UseVisualStyleBackColor = True

View File

@@ -102,9 +102,13 @@ Public Class Form1
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim oResult = OpenFileDialog1.ShowDialog()
Dim oArgs As New WorkerArgs()
If oResult = DialogResult.OK Then
_zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName)
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName)
Dim oZUGFERD = _zugferd.SerializeZUGFeRDDocument(oDoc)
Console.WriteLine()
End If
End Sub
@@ -161,7 +165,7 @@ Public Class Form1
If oResult = DialogResult.OK Then
Dim oDoc = _zugferd.ValidateZUGFeRDFileWithGDPicture(OpenFileDialog1.FileName)
Dim oZUGFERD As CrossIndustryDocumentType = _zugferd.SerializeZUGFeRDDocument(oDoc)
Dim oZUGFERD = _zugferd.SerializeZUGFeRDDocument(oDoc)
Dim oPropName As String = txtPropName.Text
Try

View File

@@ -10,7 +10,7 @@ Public Class ClassHelpers
Public Function GetValueFromDatatable(pDatatable As DataTable, pFilterString As String, pCheckColumn As String, pSortString As String) As Object
Try
If pDatatable.Rows.Count = 0 Then
If pDatatable Is Nothing OrElse pDatatable.Rows.Count = 0 Then
Return Nothing
End If

View File

@@ -52,10 +52,7 @@ Public Class ClassValidator
Return False
End If
End If
End If
' ========================= COMBO BOX =========================
If oControl.Name.StartsWith("cmbSingle") Then
ElseIf oControl.Name.StartsWith("cmbSingle") Then
Dim cmbSingle As TextBox = oControl
If cmbSingle.Text = "" Then
@@ -68,9 +65,8 @@ Public Class ClassValidator
Return False
End If
End If
End If
If oControl.Name.StartsWith("cmb") Then
ElseIf oControl.Name.StartsWith("cmb") Then
Dim cmb As ComboBox = oControl
If cmb.Text = "" Then
Dim oIndexName = GetIndexName(cmb, "cmb")
@@ -82,6 +78,7 @@ Public Class ClassValidator
Return False
End If
End If
End If
' ========================= DATE PICKER =========================
@@ -159,10 +156,9 @@ Public Class ClassValidator
.AttributeValues = WrapIndexValue(oValues),
.ControlName = oLookup.Name
})
End If
' ========================= COMBO BOX =========================
If oControl.Name.StartsWith("cmbSingle") Then
ElseIf oControl.Name.StartsWith("cmbSingle") Then
Dim cmbSingle As TextBox = oControl
Dim oIndexName = GetIndexName(cmbSingle, "cmbSingle")
@@ -174,9 +170,8 @@ Public Class ClassValidator
.AttributeValues = WrapIndexValue(cmbSingle.Text),
.ControlName = cmbSingle.Name
})
End If
If oControl.Name.StartsWith("cmb") Then
ElseIf oControl.Name.StartsWith("cmb") Then
Dim cmb As ComboBox = oControl
Dim oIndexName = GetIndexName(cmb, "cmb")

View File

@@ -12,6 +12,7 @@ Imports DigitalData.Controls.LookupGrid
Imports Independentsoft
Imports DevExpress.XtraEditors.Controls
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Database
Public Class frmGlobix_Index
#Region "+++++ Variablen ++++++"
@@ -588,6 +589,7 @@ Public Class frmGlobix_Index
End Sub
Private Function GetLookupData(pLookup As LookupControl3, pSQLCommand As String, pConnectionId As Integer)
Dim oConnectionString = GetConnectionString(pConnectionId)
oConnectionString = MSSQLServer.DecryptConnectionString(oConnectionString)
If oConnectionString IsNot Nothing And pSQLCommand.Length > 0 Then
_Logger.Debug("Connection String (redacted): [{0}]", oConnectionString.Substring(0, 30))

View File

@@ -109,11 +109,13 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="ZUGFeRDInterface\CrossIndustryDocumentType.vb" />
<Compile Include="ZUGFeRDInterface\Version1.0\CrossIndustryDocumentType.vb" />
<Compile Include="ZUGFeRDInterface.vb" />
<Compile Include="ZUGFeRDInterface\FileGroups.vb" />
<Compile Include="ZUGFeRDInterface\PDFEmbeds.vb" />
<Compile Include="ZUGFeRDInterface\PropertyValues.vb" />
<Compile Include="ZUGFeRDInterface\Version2.0\CrossIndustryInvoiceType.vb" />
<Compile Include="ZUGFeRDInterface\Version2.1.1\CrossIndustryInvoiceType.vb" />
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
</ItemGroup>
<ItemGroup>

View File

@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.5.10.0")>
<Assembly: AssemblyFileVersion("1.5.10.0")>
<Assembly: AssemblyVersion("1.6.0.0")>
<Assembly: AssemblyFileVersion("1.6.0.0")>

View File

@@ -11,9 +11,6 @@ Public Class ZUGFeRDInterface
Private _logConfig As LogConfig
Private _logger As Logger
Private Const ZUGFERD_CONVERTER_EXE = "ZUGFeRDInterface\pdf_zugferd_test.exe" 'ZUGFeRDInterface\pdf_zugferd_lib\pdf_zugferd_test.exe
Private Const ZUGFERD_CONVERTER_SUCCESS_MESSAGE = "Document contains ZUGFeRD data."
Public Enum ErrorType
NoValidFile
NoZugferd
@@ -46,7 +43,7 @@ Public Class ZUGFeRDInterface
''' <param name="Path"></param>
''' <exception cref="ZUGFeRDExecption"></exception>
''' <returns></returns>
Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As CrossIndustryDocumentType
Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As Object
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Path)
If IsNothing(oXmlDocument) Then
@@ -62,7 +59,7 @@ Public Class ZUGFeRDInterface
''' <param name="Stream"></param>
''' <exception cref="ZUGFeRDExecption"></exception>
''' <returns></returns>
Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As CrossIndustryDocumentType
Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As Object
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Stream)
If IsNothing(oXmlDocument) Then
@@ -164,16 +161,45 @@ Public Class ZUGFeRDInterface
End Try
End Function
Public Function SerializeZUGFeRDDocument(Document As XPathDocument) As CrossIndustryDocumentType
Public Function SerializeZUGFeRDDocument(Document As XPathDocument) As Object
Try
Dim oNavigator As XPathNavigator = Document.CreateNavigator()
Dim oReader = oNavigator.ReadSubtree()
Dim oSerializer As New XmlSerializer(GetType(CrossIndustryDocumentType))
Dim oReader As XmlReader
Dim oResult = Nothing
Dim oTypes As New List(Of Type) From {
GetType(ZUGFeRD.Version1_0.CrossIndustryDocumentType),
GetType(ZUGFeRD.Version2_0.CrossIndustryInvoiceType),
GetType(ZUGFeRD.Version2_1_1.CrossIndustryInvoiceType)
}
For Each oType In oTypes
_logger.Debug("Trying Type [{0}]", oType.FullName)
Dim oSerializer As New XmlSerializer(oType)
Try
oReader = oNavigator.ReadSubtree()
oResult = oSerializer.Deserialize(oReader)
_logger.Debug("Serializing with type [{0}] succeeded", oType.FullName)
Exit For
Catch ex As Exception
_logger.Debug("Serializing with type [{0}] failed", oType.FullName)
_logger.Debug(ex.Message)
_logger.Error(ex.InnerException?.Message)
End Try
Next
If oResult Is Nothing Then
Throw New ApplicationException("No Types matched the given document. Document could not be serialized.")
End If
Return oResult
Return oSerializer.Deserialize(oReader)
Catch ex As Exception
_logger.Error(ex)
Throw New ZUGFeRDExecption(ErrorType.NoValidZugferd, "Datei ist eine ungültige ZUGFeRD Datei.")
End Try
End Function
End Class

View File

@@ -31,7 +31,7 @@ Public Class PropertyValues
Public Value As String
End Class
Public Function CheckPropertyValues(Document As CrossIndustryDocumentType, PropertyMap As Dictionary(Of String, XmlItemProperty), MessageId As String) As CheckPropertyValuesResult
Public Function CheckPropertyValues(Document As Object, PropertyMap As Dictionary(Of String, XmlItemProperty), MessageId As String) As CheckPropertyValuesResult
Dim oGlobalGroupCounter = 0
Dim oMissingProperties As New List(Of String)
Dim oResult As New CheckPropertyValuesResult()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -197,7 +197,10 @@ Public Class ImportZUGFeRDFiles
Try
For Each oFile In oFileGroupFiles
Dim oDocument As CrossIndustryDocumentType
' 09.12.2021: oDocument is now an Object, because have different classes corresponding to the
' different versions of ZUGFeRD and the type is unknown at compile-time.
Dim oDocument As Object
' Start a global group counter for each file
Dim oGlobalGroupCounter = 0
' Clear missing properties for the new file

View File

@@ -11,11 +11,19 @@ Public Class BaseClass
Logger = pLogConfig.GetLogger(oClassName)
End Sub
''' <summary>
'''
''' </summary>
''' <exception cref="ApplicationException"></exception>
Public Sub LogAndThrow(pMessage As String)
Logger.Warn(pMessage)
Throw New ApplicationException(pMessage)
End Sub
''' <summary>
'''
''' </summary>
''' <exception cref="ApplicationException"></exception>
Public Sub LogAndThrow(pException As Exception, pMessage As String)
Logger.Error(pException)
Throw New ApplicationException(pMessage, pException)

View File

@@ -145,7 +145,9 @@
<Compile Include="Methods\GlobalIndexer\ImportFile\ImportFileRequest.vb" />
<Compile Include="Methods\GlobalIndexer\ImportFile\ImportFileResponse.vb" />
<Compile Include="Methods\GlobalIndexer\ImportFile\Steps\PostProcessing.vb" />
<Compile Include="Methods\GlobalIndexer\Loader.vb" />
<Compile Include="Methods\GlobalIndexer\ManualIndex.vb" />
<Compile Include="Methods\GlobalIndexer\Profile.vb" />
<Compile Include="Methods\NewFile\NewFileMethod.vb" />
<Compile Include="Methods\NewFile\NewFileRequest.vb" />
<Compile Include="Methods\NewFile\NewFileResponse.vb" />
@@ -160,7 +162,7 @@
<Compile Include="Exceptions.vb" />
<Compile Include="Messages\DatabaseResult.vb" />
<Compile Include="EDMIService.vb" />
<Compile Include="Methods\UserAttributeValue.vb" />
<Compile Include="Methods\AttributeValue.vb" />
<Compile Include="Scheduler\Scheduler.vb" />
<Compile Include="Scheduler\DatatableJob.vb" />
<Compile Include="Scheduler\JobListener.vb" />

View File

@@ -37,6 +37,10 @@ Namespace IDB
End Function
Public Function UserAttributesToDictionary(pUserAttributes As List(Of UserAttributeValue)) As Dictionary(Of String, List(Of String))
If pUserAttributes Is Nothing OrElse pUserAttributes.Count = 0 Then
Return New Dictionary(Of String, List(Of String))
End If
Return pUserAttributes.ToDictionary(
Function(attr) attr.AttributeName,
Function(attr) attr.AttributeValues)

View File

@@ -1,9 +1,16 @@
Namespace Methods
Public MustInherit Class BaseAttributeValue
End Class
''' <summary>
''' Attribute values supplied by the user
''' </summary>
Public Class UserAttributeValue
Public Property AttributeId As Integer
Public Property AttributeName As String
Public Property AttributeValues As List(Of String)
Public Property AttributeId As Integer
Public Property ControlName As String
Public Overrides Function ToString() As String
@@ -11,4 +18,12 @@
End Function
End Class
Public Class AutoAttributeValue
Inherits BaseAttributeValue
End Class
Public Class SystemAttributeValue
Inherits BaseAttributeValue
End Class
End Namespace

View File

@@ -10,24 +10,19 @@ Namespace Methods.GlobalIndexer.ImportFile
Public Class ImportFileMethod
Inherits BaseMethod
Private ReadOnly Loader As Loader
Private ReadOnly Patterns As Patterns2
Private ReadOnly GetDatatable As GetDatatableFromCacheMethod
Private ReadOnly Connection As SqlClient.SqlConnection
Private ReadOnly Transaction As SqlClient.SqlTransaction
Private User As UserState
Private Profile As DataRow
Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB"
Private Const VIEW_INDEX_MANUAL = "VWDDINDEX_MAN"
Private Const VIEW_INDEX_AUTOMATIC = "VWDDINDEX_AUTOM"
Private Const TABLE_POST_PROCESSING = "TBDD_INDEX_MAN_POSTPROCESSING"
Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer, pGlobalState As GlobalState)
MyBase.New(pLogConfig, pMSSQLServer, pGlobalState)
Patterns = New Patterns2(pLogConfig)
GetDatatable = New GetDatatableFromCacheMethod(LogConfig, Database, GlobalState)
Loader = New Loader(pLogConfig, Database, pGlobalState)
Connection = Database.GetConnection()
Transaction = Connection.BeginTransaction()
End Sub
@@ -47,10 +42,10 @@ Namespace Methods.GlobalIndexer.ImportFile
' TODO: Add missing user properties in UserState from TBDD_USER
'pData.User = ResolveUserFromUserName(pData.User.UserName)
Dim oManualIndexes = LoadManualIndexes(pData.ProfileId)
Dim oAutomaticIndexes = LoadAutomaticIndexes(pData.ProfileId)
Dim oPostProcessingSteps As DataTable = LoadPostProcessingSteps(oManualIndexes)
LoadProfile(pData.ProfileId)
Dim oManualIndexes = Loader.LoadManualIndexes(pData.ProfileId)
Dim oAutomaticIndexes = Loader.LoadAutomaticIndexes(pData.ProfileId)
Dim oPostProcessingSteps As DataTable = Loader.LoadPostProcessingSteps(oManualIndexes)
Dim oProfile = Loader.LoadProfile(pData.ProfileId)
Dim oUserAttributes = pData.AttributeValues
Dim oAutoAttributes As List(Of UserAttributeValue) = Nothing
@@ -79,15 +74,19 @@ Namespace Methods.GlobalIndexer.ImportFile
Throw New ApplicationException(oResponse.ErrorMessage)
End If
Logger.Info("Generating display filename for file [{0}]", pData.File.FileName)
' Generate display Filename from nameconvention
Dim oDisplayFilename = GetFilenameByNameconvention(
pData.File.FileInfoRaw, oProfile.NameConvention, User, oUserAttributes, oAutoAttributes)
Dim oNameconvention As String = Profile.ItemEx(Of String)("NAMENKONVENTION")
Dim oDisplayFilename = GetFilenameByNameconvention(pData.File.FileInfoRaw, oNameconvention, User, oUserAttributes, oAutoAttributes)
' Generate virtual path from profile
Dim oDynamicFilePath = GetVirtualPath(
pData.File.FileInfoRaw, oProfile.DynamicPath, User, oUserAttributes, oAutoAttributes)
Logger.Info("Collecting Attributes for ObjectId [{0}]", oResponse.ObjectId)
Dim oFinalAttributes As New Dictionary(Of String, List(Of String)) From {
{"DisplayFileName", New List(Of String) From {oDisplayFilename}}
{"DisplayFileName", New List(Of String) From {oDisplayFilename}},
{"Dynamic Folder", New List(Of String) From {oDynamicFilePath}}
}
oFinalAttributes = oFinalAttributes.
Concat(Helpers.UserAttributesToDictionary(oUserAttributes)).
@@ -113,7 +112,25 @@ Namespace Methods.GlobalIndexer.ImportFile
End Try
End Function
Private Function GetVirtualPath(pFileInfo As FileInfo, pPathConvention As String, pUser As UserState, pAttributes As List(Of UserAttributeValue), pAutoAttributes As List(Of UserAttributeValue))
Logger.Info("Generating virtual path for file [{0}]", pFileInfo.Name)
Dim oAttributeDict = Helpers.UserAttributesToDictionary(pAttributes)
Dim oAutoAttributeDict = Helpers.UserAttributesToDictionary(pAutoAttributes)
If pPathConvention Is Nothing OrElse pPathConvention = String.Empty Then
Logger.Warn("Virtual path template for File [{0}] was empty. Returning empty string.", pFileInfo.Name)
Return String.Empty
End If
Dim oVirtualPath As String = Helpers.GetPlaceholderValue(pPathConvention, pFileInfo, pUser, oAttributeDict, oAutoAttributeDict)
Return oVirtualPath
End Function
Private Function GetFilenameByNameconvention(pFileInfo As FileInfo, pNameconvention As String, pUser As UserState, pAttributes As List(Of UserAttributeValue), pAutoAttributes As List(Of UserAttributeValue)) As String
Logger.Info("Generating display filename for file [{0}]", pFileInfo.Name)
Dim oAttributeDict = Helpers.UserAttributesToDictionary(pAttributes)
Dim oAutoAttributeDict = Helpers.UserAttributesToDictionary(pAutoAttributes)
@@ -150,148 +167,6 @@ Namespace Methods.GlobalIndexer.ImportFile
End Try
Next
End Sub
''' <summary>
''' Load Profiles for this Import
''' </summary>
Private Sub LoadProfile(pProfileId As Integer)
Logger.Debug("Start of Method [LoadAutomaticIndexes]")
Try
Dim oProfile = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_PROFILE,
.FilterExpression = $"DOCTYPE_ID = {pProfileId}"
})
If oProfile.OK = False Then
LogAndThrow(oProfile.ErrorMessage)
End If
Profile = oProfile.Table.Rows.Item(0)
Catch ex As Exception
LogAndThrow(ex, "Error while automatic loading indexes!")
End Try
End Sub
''' <summary>
''' Load automatic indexes for this Import
''' </summary>
Private Function LoadAutomaticIndexes(pProfileId As Integer) As List(Of AutomaticIndex)
Logger.Debug("Start of Method [LoadAutomaticIndexes]")
Try
' Load automatic Indexes for this Import
Dim oAutomaticIndexes = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_INDEX_AUTOMATIC,
.FilterExpression = $"DOCTYPE_ID = {pProfileId}"
})
If oAutomaticIndexes.OK = False Then
LogAndThrow(oAutomaticIndexes.ErrorMessage)
End If
Dim oIndexes As New List(Of AutomaticIndex)
For Each oRow As DataRow In oAutomaticIndexes.Table.Rows
Dim oAutomaticIndex As New AutomaticIndex With {
.Id = oRow.ItemEx(Of Integer)("GUID"),
.Name = oRow.ItemEx(Of String)("INDEXNAME"),
.ProfileId = oRow.ItemEx(Of Integer)("DOCTYPE_ID"),
.SQLCommand = oRow.ItemEx(Of String)("SQL_RESULT"),
.SQLConnectionId = oRow.ItemEx(Of Integer)("CONNECTION_ID"),
.Sequence = oRow.ItemEx(Of String)("SEQUENCE"),
.Value = oRow.ItemEx(Of String)("VALUE")
}
oIndexes.Add(oAutomaticIndex)
Next
Logger.Info("Automatic indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception
LogAndThrow(ex, "Error while automatic loading indexes!")
End Try
End Function
''' <summary>
''' Load manual indexes for this Import
''' </summary>
Private Function LoadManualIndexes(pProfileId As Integer) As List(Of ManualIndex)
Logger.Debug("Start of Method [LoadManualIndexes]")
Try
' Load manual Indexes for this Import
Dim oManualIndexes = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_INDEX_MANUAL,
.FilterExpression = $"DOK_ID = {pProfileId}"
})
If oManualIndexes.OK = False Then
LogAndThrow(oManualIndexes.ErrorMessage)
End If
Dim oIndexes As New List(Of ManualIndex)
For Each oRow As DataRow In oManualIndexes.Table.Rows
Dim oManualIndex As New ManualIndex With {
.Id = oRow.ItemEx(Of Integer)("GUID"),
.Name = oRow.ItemEx(Of String)("INDEXNAME"),
.ProfileId = oRow.ItemEx(Of Integer)("DOCTYPE_ID"),
.IsOptional = oRow.ItemEx(Of Boolean)("OPTIONAL"),
.IsMultiselect = oRow.ItemEx(Of String)("MULTISELECT"),
.SQLCommand = oRow.ItemEx(Of String)("SQL_RESULT"),
.SQLConnectionId = oRow.ItemEx(Of Integer)("CONNECTION_ID"),
.DefaultValue = oRow.ItemEx(Of String)("DEFAULT_VALUE"),
.DataType = oRow.ItemEx(Of String)("DATA_TYPE")
}
oIndexes.Add(oManualIndex)
Next
Logger.Info("Manual indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception
LogAndThrow(ex, "Error while loading indexes!")
End Try
End Function
Private Function LoadPostProcessingSteps(pManualIndexes As List(Of ManualIndex)) As DataTable
Logger.Debug("Start of Method [LoadPostProcessingSteps]")
Try
' Generate a string containing all index ids joined into a string
Dim oIndexIdList As List(Of Integer) = pManualIndexes.
Select(Function(index) index.Id).
ToList()
Dim oIndexIds As String = String.Join(",", oIndexIdList)
If oIndexIdList.Count = 0 Then
Logger.Debug("No Postprocessing steps found for this profile. Exiting.")
Return Nothing
End If
' Load all relevant postprocessing steps
Dim oPostProcessingSteps = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = TABLE_POST_PROCESSING,
.FilterExpression = $"IDXMAN_ID IN ({oIndexIds})"
})
If oPostProcessingSteps.OK = False Then
LogAndThrow(oPostProcessingSteps.ErrorMessage)
End If
Return oPostProcessingSteps.Table
Catch ex As Exception
LogAndThrow(ex, "Error while loading post processing steps!")
End Try
End Function
End Class
End Namespace

View File

@@ -0,0 +1,181 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Language
Imports DigitalData.Modules.Logging
Imports DigitalData.Services.EDMIService.Methods.GetDatatableFromCache
Namespace Methods.GlobalIndexer
Public Class Loader
Inherits BaseClass
Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB"
Private Const VIEW_INDEX_MANUAL = "VWDDINDEX_MAN"
Private Const VIEW_INDEX_AUTOMATIC = "VWDDINDEX_AUTOM"
Private Const TABLE_POST_PROCESSING = "TBDD_INDEX_MAN_POSTPROCESSING"
Private GetDatatable As GetDatatableFromCacheMethod
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pGlobalState As GlobalState)
MyBase.New(pLogConfig)
GetDatatable = New GetDatatableFromCacheMethod(pLogConfig, pDatabase, pGlobalState)
End Sub
''' <summary>
''' Load Profiles for this Import
''' </summary>
Public Function LoadProfile(pProfileId As Integer) As Profile
Logger.Debug("Start of Method [LoadAutomaticIndexes]")
Try
Dim oProfile = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_PROFILE,
.FilterExpression = $"DOCTYPE_ID = {pProfileId}"
})
If oProfile.OK = False Then
LogAndThrow(oProfile.ErrorMessage)
End If
Dim oRow As DataRow = oProfile.Table.Rows.Item(0)
Dim oProfileObject As New Profile With {
.Id = oRow.ItemEx("DOCTYPE_ID", 0),
.Name = oRow.ItemEx("DOCTYPE", "Missing Profile Name"),
.IsActive = oRow.ItemEx("AKTIV", False),
.NameConvention = oRow.ItemEx("NAMENKONVENTION", ""),
.ObjectStore = oRow.ItemEx("OBJECT_STORE", "Work"),
.ShortName = oRow.ItemEx("KURZNAME", ""),
.DynamicPath = oRow.ItemEx("DYNAMIC_PATH", "")
}
Return oProfileObject
Catch ex As Exception
LogAndThrow(ex, "Error while automatic loading indexes!")
Return Nothing
End Try
End Function
''' <summary>
''' Load automatic indexes for this Import
''' </summary>
Public Function LoadAutomaticIndexes(pProfileId As Integer) As List(Of AutomaticIndex)
Logger.Debug("Start of Method [LoadAutomaticIndexes]")
Try
' Load automatic Indexes for this Import
Dim oAutomaticIndexes = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_INDEX_AUTOMATIC,
.FilterExpression = $"DOCTYPE_ID = {pProfileId}"
})
If oAutomaticIndexes.OK = False Then
LogAndThrow(oAutomaticIndexes.ErrorMessage)
End If
Dim oIndexes As New List(Of AutomaticIndex)
For Each oRow As DataRow In oAutomaticIndexes.Table.Rows
Dim oAutomaticIndex As New AutomaticIndex With {
.Id = oRow.ItemEx(Of Integer)("GUID"),
.Name = oRow.ItemEx(Of String)("INDEXNAME"),
.ProfileId = oRow.ItemEx(Of Integer)("DOCTYPE_ID"),
.SQLCommand = oRow.ItemEx(Of String)("SQL_RESULT"),
.SQLConnectionId = oRow.ItemEx(Of Integer)("CONNECTION_ID"),
.Sequence = oRow.ItemEx(Of String)("SEQUENCE"),
.Value = oRow.ItemEx(Of String)("VALUE")
}
oIndexes.Add(oAutomaticIndex)
Next
Logger.Info("Automatic indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception
LogAndThrow(ex, "Error while automatic loading indexes!")
Return Nothing
End Try
End Function
''' <summary>
''' Load manual indexes for this Import
''' </summary>
Public Function LoadManualIndexes(pProfileId As Integer) As List(Of ManualIndex)
Logger.Debug("Start of Method [LoadManualIndexes]")
Try
' Load manual Indexes for this Import
Dim oManualIndexes = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = VIEW_INDEX_MANUAL,
.FilterExpression = $"DOK_ID = {pProfileId}"
})
If oManualIndexes.OK = False Then
LogAndThrow(oManualIndexes.ErrorMessage)
End If
Dim oIndexes As New List(Of ManualIndex)
For Each oRow As DataRow In oManualIndexes.Table.Rows
Dim oManualIndex As New ManualIndex With {
.Id = oRow.ItemEx(Of Integer)("GUID"),
.Name = oRow.ItemEx(Of String)("INDEXNAME"),
.ProfileId = oRow.ItemEx(Of Integer)("DOCTYPE_ID"),
.IsOptional = oRow.ItemEx(Of Boolean)("OPTIONAL"),
.IsMultiselect = oRow.ItemEx(Of String)("MULTISELECT"),
.SQLCommand = oRow.ItemEx(Of String)("SQL_RESULT"),
.SQLConnectionId = oRow.ItemEx(Of Integer)("CONNECTION_ID"),
.DefaultValue = oRow.ItemEx(Of String)("DEFAULT_VALUE"),
.DataType = oRow.ItemEx(Of String)("DATA_TYPE")
}
oIndexes.Add(oManualIndex)
Next
Logger.Info("Manual indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception
LogAndThrow(ex, "Error while loading indexes!")
Return Nothing
End Try
End Function
Public Function LoadPostProcessingSteps(pManualIndexes As List(Of ManualIndex)) As DataTable
Logger.Debug("Start of Method [LoadPostProcessingSteps]")
Try
' Generate a string containing all index ids joined into a string
Dim oIndexIdList As List(Of Integer) = pManualIndexes.
Select(Function(index) index.Id).
ToList()
Dim oIndexIds As String = String.Join(",", oIndexIdList)
If oIndexIdList.Count = 0 Then
Logger.Debug("No Postprocessing steps found for this profile. Exiting.")
Return Nothing
End If
' Load all relevant postprocessing steps
Dim oPostProcessingSteps = GetDatatable.Run(
New GetDatatableFromCacheRequest With {
.DataTable = TABLE_POST_PROCESSING,
.FilterExpression = $"IDXMAN_ID IN ({oIndexIds})"
})
If oPostProcessingSteps.OK = False Then
LogAndThrow(oPostProcessingSteps.ErrorMessage)
End If
Return oPostProcessingSteps.Table
Catch ex As Exception
LogAndThrow(ex, "Error while loading post processing steps!")
Return Nothing
End Try
End Function
End Class
End Namespace

View File

@@ -0,0 +1,11 @@
Namespace Methods.GlobalIndexer
Public Class Profile
Public Property Id As Integer
Public Property Name As String
Public Property ShortName As String
Public Property DynamicPath As String
Public Property IsActive As Boolean
Public Property NameConvention As String
Public Property ObjectStore As String
End Class
End Namespace

View File

@@ -106,8 +106,6 @@ Public Class Scheduler
_Logger.Warn("Unexpected Error while setting up scheduler: " & ex.Message)
End Try
End Sub
Public Async Function GetCronJobs() As Task(Of DataTable)
Try
Dim oSQL As String = "SELECT * FROM TBAPPSERV_CRON_JOB WHERE ACTIVE = 1"