Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Patterns Imports DigitalData.Modules.Language Imports DigitalData.Services.EDMIService.Methods.GetDatatableFromCache Namespace Methods.GlobalIndexer.ImportFile Public Class ImportFileMethod Inherits BaseMethod Private ReadOnly Patterns As Patterns2 Private ReadOnly GetDatatable As GetDatatableFromCacheMethod Private Profile As DataRow Private ManualIndexes As List(Of ManualIndex) Private AutomaticIndexes As List(Of AutomaticIndex) Private ManualIndexesPostProcessing As DataTable 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) End Sub ''' ''' ''' ''' ''' ''' ''' ''' Public Function Run(pData As ImportFileRequest) Try ' TODO: Add missing user properties in UserState from TBDD_USER 'pData.User = ResolveUserFromUserName(pData.User.UserName) LoadIndexes(pData.ProfileId) LoadProfile(pData.ProfileId) Dim oFinalAttributes = pData.AttributeValues Dim oFileName As String = GetFilenameByNameconvention(pData.File.FileName, Profile.Item("NAMENKONVENTION")) ' Apply post processing Dim oPostProcessing = New Steps.PostProcessing(LogConfig, ManualIndexesPostProcessing) oFinalAttributes = oPostProcessing.ApplyManualPostprocessing(oFinalAttributes) ' Apply automatic attributes Dim oAutomaticIndexing = New Steps.AutomaticIndexing(LogConfig, Database, AutomaticIndexes, GlobalState) oFinalAttributes = oAutomaticIndexing.ApplyAutomaticeAttributes(oFinalAttributes, pData.File.FileInfoRaw, pData.User) ' Import the file Dim oNewFile As New NewFileMethod(LogConfig, Database, GlobalState) Dim oResponse = oNewFile.Run(New NewFile.NewFileRequest With { .File = pData.File, .BusinessEntity = pData.BusinessEntity, .KindType = pData.KindType, .StoreName = pData.StoreName, .User = pData.User }) If oResponse.OK Then Return New ImportFileResponse(oResponse.ObjectId) Else Throw New ApplicationException(oResponse.ErrorMessage) End If Catch ex As Exception Return New ImportFileResponse(ex) End Try End Function Private Function GetFilenameByNameconvention(pFileName As String, pNameconvention As String) As String Return pFileName End Function Private Sub LoadIndexes(pProfileId As Integer) Logger.Debug("Start of Method [LoadIndexes]") LoadManualIndexes(pProfileId) LoadAutomaticIndexes(pProfileId) LoadPostProcessingSteps() End Sub ''' ''' Load Profiles for this Import ''' 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 Private Sub LoadAutomaticIndexes(pProfileId As Integer) Logger.Debug("Start of Method [LoadAutomaticIndexes]") Try ' Load automatic Indexes for this Import Dim oAutomaticIndexes = GetDatatable.Run( New GetDatatableFromCacheRequest With { .DataTable = VIEW_INDEX_MANUAL, .FilterExpression = $"DOK_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") } Next AutomaticIndexes = oIndexes Catch ex As Exception LogAndThrow(ex, "Error while automatic loading indexes!") End Try End Sub Private Sub LoadManualIndexes(pProfileId As Integer) 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") } Next ManualIndexes = oIndexes Catch ex As Exception LogAndThrow(ex, "Error while loading indexes!") End Try End Sub Private Sub LoadPostProcessingSteps() Logger.Debug("Start of Method [LoadPostProcessingSteps]") Try ' Generate a string containing all index ids joined into a string Dim oIndexIdList As List(Of Integer) = ManualIndexes.Select(Function(index) index.Id).ToList() Dim oIndexIds As String = String.Join(",", oIndexIdList) ' 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 ManualIndexesPostProcessing = oPostProcessingSteps.Table Catch ex As Exception LogAndThrow(ex, "Error while loading post processing steps!") End Try End Sub End Class End Namespace