Imports DigitalData.Modules.Database Imports DigitalData.Modules.Language Imports DigitalData.Modules.Logging Imports DigitalData.Services.EDMIService.Methods.Database 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 GetDatatableFromCache.GetDatatableFromCacheMethod Public Sub New(pLogConfig As LogConfig, pDatabaseIDB As MSSQLServer, pDatabaseECM As MSSQLServer, pGlobalState As GlobalState) MyBase.New(pLogConfig) GetDatatable = New GetDatatableFromCache.GetDatatableFromCacheMethod(pLogConfig, pDatabaseIDB, pDatabaseECM, pGlobalState) End Sub ''' ''' Load Profiles for this Import ''' Public Function LoadProfile(pProfileId As Integer) As Profile Logger.Debug("Start of Method [LoadProfile]") Try Dim oProfile = GetDatatable.Run(New GetDatatableFromCache.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_FOLDER", "") } Logger.Debug("Name: [{0}]", oProfileObject.Name) Logger.Debug("Active: [{0}]", oProfileObject.IsActive) Logger.Debug("ObjectStore: [{0}]", oProfileObject.ObjectStore) Logger.Debug("ShortName: [{0}]", oProfileObject.ShortName) Logger.Debug("NameConvention: [{0}]", oProfileObject.NameConvention) Logger.Debug("DynamicPath: [{0}]", oProfileObject.DynamicPath) Return oProfileObject Catch ex As Exception LogAndThrow(ex, "Error while automatic loading profile!") Return Nothing End Try End Function ''' ''' Load automatic indexes for this Import ''' 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 GetDatatableFromCache.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 loading automatic indexes!") Return Nothing End Try End Function ''' ''' Load manual indexes for this Import ''' 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 GetDatatableFromCache.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)("DOK_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)("DATATYPE") } oIndexes.Add(oManualIndex) Next Logger.Info("Manual indexes loaded: [{0}]", oIndexes.Count) Return oIndexes Catch ex As Exception LogAndThrow(ex, $"Error while loading manual indizes [{ex.Message}]") Return Nothing End Try End Function Public Function LoadPostProcessingSteps(pManualIndexes As List(Of ManualIndex)) As List(Of PostProcessingStep) 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 GetDatatableFromCache.GetDatatableFromCacheRequest With { .DataTable = TABLE_POST_PROCESSING, .FilterExpression = $"IDXMAN_ID IN ({oIndexIds})" }) If oPostProcessingSteps.OK = False Then LogAndThrow(oPostProcessingSteps.ErrorMessage) End If Dim oSteps As New List(Of PostProcessingStep) For Each oRow As DataRow In oPostProcessingSteps.Table.Rows Dim oStep As New PostProcessingStep With { .Id = oRow.ItemEx(Of Integer)("GUID"), .IndexId = oRow.ItemEx(Of Integer)("IDXMAN_ID"), .[Variant] = oRow.ItemEx(Of String)("VARIANT"), .Type = oRow.ItemEx(Of String)("TYPE"), .Function1 = oRow.ItemEx(Of String)("FUNCTION1"), .Function2 = oRow.ItemEx(Of String)("FUNCTION2"), .Text1 = oRow.ItemEx(Of String)("Text1"), .Text2 = oRow.ItemEx(Of String)("Text2"), .Text3 = oRow.ItemEx(Of String)("Text3"), .Sequence = oRow.ItemEx(Of Integer)("SEQUENCE") } oSteps.Add(oStep) Next Return oSteps Catch ex As Exception LogAndThrow(ex, "Error while loading post processing steps!") Return Nothing End Try End Function End Class End Namespace