EDMIService: Automatic indexing, more consolidation of globix logic
This commit is contained in:
@@ -12,8 +12,8 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
Private ReadOnly GetDatatable As GetDatatableFromCacheMethod
|
||||
|
||||
Private Profile As DataRow
|
||||
Private ManualIndexes As DataTable
|
||||
Private AutomaticIndexes As DataTable
|
||||
Private ManualIndexes As List(Of ManualIndex)
|
||||
Private AutomaticIndexes As List(Of AutomaticIndex)
|
||||
Private ManualIndexesPostProcessing As DataTable
|
||||
|
||||
Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB"
|
||||
@@ -21,10 +21,6 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
Private Const VIEW_INDEX_AUTOMATIC = "VWDDINDEX_AUTOM"
|
||||
Private Const TABLE_POST_PROCESSING = "TBDD_INDEX_MAN_POSTPROCESSING"
|
||||
|
||||
Private Const TYPE_VBSPLIT = "VBSPLIT"
|
||||
Private Const TYPE_VBREPLACE = "VBREPLACE"
|
||||
Private Const TYPE_REGEXPRESSION = "REG. EXPRESSION"
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer, pGlobalState As GlobalState)
|
||||
MyBase.New(pLogConfig, pMSSQLServer, pGlobalState)
|
||||
|
||||
@@ -42,17 +38,25 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
''' </remarks>
|
||||
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 the post processing
|
||||
oFinalAttributes = ApplyManualPostprocessing(oFinalAttributes, ManualIndexesPostProcessing)
|
||||
' Apply post processing
|
||||
Dim oPostProcessing = New Steps.PostProcessing(LogConfig, ManualIndexesPostProcessing)
|
||||
oFinalAttributes = oPostProcessing.ApplyManualPostprocessing(oFinalAttributes)
|
||||
|
||||
' TODO: apply the manual attributes
|
||||
oFinalAttributes = ApplyAutomaticeAttributes(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)
|
||||
@@ -60,9 +64,8 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
.File = pData.File,
|
||||
.BusinessEntity = pData.BusinessEntity,
|
||||
.KindType = pData.KindType,
|
||||
.Language = pData.Language,
|
||||
.Who = pData.Who,
|
||||
.StoreName = pData.StoreName
|
||||
.StoreName = pData.StoreName,
|
||||
.User = pData.User
|
||||
})
|
||||
|
||||
If oResponse.OK Then
|
||||
@@ -76,95 +79,12 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Function ApplyManualPostprocessing(pManualAttributes As List(Of UserAttributeValue), pPostprocessingSteps As DataTable) As List(Of UserAttributeValue)
|
||||
Logger.Debug("Start of Method [ApplyManualPostprocessing]")
|
||||
Dim oAttributes = pManualAttributes
|
||||
|
||||
For Each oProcessingRow As DataRow In pPostprocessingSteps.Rows
|
||||
|
||||
Dim oIndexId = oProcessingRow.ItemEx(Of Integer)("IDXMAN_ID")
|
||||
Dim oIndexRow As DataRow = ManualIndexes.Select($"GUID = {oIndexId}").FirstOrDefault()
|
||||
Dim oIndex As UserAttributeValue = pManualAttributes.
|
||||
Where(Function(attr) attr.AttributeId = oProcessingRow.ItemEx(Of Integer)("IDXMAN_ID")).
|
||||
FirstOrDefault()
|
||||
|
||||
Dim oValue = GetPostprocessingValue(oIndex.AttributeValues, oIndexRow)
|
||||
|
||||
oAttributes.Add(New UserAttributeValue With {
|
||||
.AttributeId = oIndexId,
|
||||
.AttributeName = oIndex.AttributeName,
|
||||
.AttributeValues = oIndex.AttributeValues,
|
||||
.ControlName = oIndex.ControlName
|
||||
})
|
||||
Next
|
||||
|
||||
Return oAttributes
|
||||
End Function
|
||||
|
||||
Private Function ApplyAutomaticeAttributes(pManualAttributes As List(Of UserAttributeValue)) As List(Of UserAttributeValue)
|
||||
Logger.Debug("Start of Method [ApplyAutomaticeAttributes]")
|
||||
|
||||
Return pManualAttributes
|
||||
End Function
|
||||
|
||||
Private Function GetPostprocessingValue(pValues As List(Of String), pRow As DataRow)
|
||||
Logger.Debug("Start of Method [GetPostprocessingValue]")
|
||||
|
||||
Dim oType = pRow.Item("TYPE")
|
||||
Dim oResult As New List(Of String)
|
||||
|
||||
Logger.Debug("Type of Postprocessing is [{0}]", oType)
|
||||
|
||||
Select Case oType
|
||||
Case TYPE_VBREPLACE
|
||||
Dim oFindString = pRow.Item("TEXT1")
|
||||
Dim oReplaceString = pRow.Item("TEXT2")
|
||||
|
||||
Logger.Debug("Replacing [{0}] with [{1}]", oFindString, oReplaceString)
|
||||
|
||||
For Each oIndexValue In pValues
|
||||
Dim oReplaceResult = oIndexValue.Replace(oFindString, oReplaceString)
|
||||
If oReplaceResult.Equals(oIndexValue) Then
|
||||
Logger.Debug("Replace did not succeed, ReplaceString was not found.")
|
||||
Else
|
||||
Logger.Debug("Replace successful for [{0}].", oIndexValue)
|
||||
End If
|
||||
|
||||
oResult.Add(oReplaceResult)
|
||||
Next
|
||||
|
||||
Case TYPE_VBSPLIT
|
||||
Dim oSeparator As String = pRow.Item("TEXT1")
|
||||
Dim oSplitIndex As Integer = 0
|
||||
Integer.TryParse(pRow.Item("TEXT2"), oSplitIndex)
|
||||
|
||||
Logger.Debug("Splitting String at Separator [{0}] and Index [{1}]", oSeparator, oSplitIndex)
|
||||
|
||||
For Each oIndexValue In pValues
|
||||
Dim oSplitted As List(Of String) = oIndexValue.Split(oSeparator).ToList()
|
||||
Logger.Debug("Split succeeded, resulting list has [{0}] items.", oSplitted.Count)
|
||||
|
||||
If oSplitIndex < oSplitted.Count Then
|
||||
Dim oValue = oSplitted.Item(oSplitIndex)
|
||||
Logger.Debug("Saving value [{0}] from Index [{1}]", oValue, oSplitIndex)
|
||||
oResult.Add(oValue)
|
||||
Else
|
||||
Logger.Debug("SplitIndex(TEXT2) was out of array bounds. Skipping.")
|
||||
End If
|
||||
|
||||
Next
|
||||
|
||||
Case Else
|
||||
LogAndThrow($"Postprocessing type [{oType}] is not supported!")
|
||||
End Select
|
||||
|
||||
Return oResult
|
||||
End Function
|
||||
|
||||
Private Function GetFilenameByNameconvention(pFileName As String, pNameconvention As String) As String
|
||||
|
||||
|
||||
|
||||
Private Function GetFilenameByNameconvention(pFileName As String, pNameconvention As String) As String
|
||||
Return pFileName
|
||||
End Function
|
||||
|
||||
Private Sub LoadIndexes(pProfileId As Integer)
|
||||
@@ -213,7 +133,21 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
LogAndThrow(oAutomaticIndexes.ErrorMessage)
|
||||
End If
|
||||
|
||||
AutomaticIndexes = oAutomaticIndexes.Table
|
||||
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
|
||||
@@ -234,7 +168,23 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
LogAndThrow(oManualIndexes.ErrorMessage)
|
||||
End If
|
||||
|
||||
ManualIndexes = oManualIndexes.Table
|
||||
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!")
|
||||
@@ -246,10 +196,7 @@ Namespace Methods.GlobalIndexer.ImportFile
|
||||
|
||||
Try
|
||||
' Generate a string containing all index ids joined into a string
|
||||
Dim oIndexIdList As New List(Of Integer)
|
||||
For Each oRow As DataRow In ManualIndexes.Rows
|
||||
oIndexIdList.Add(oRow.ItemEx(Of Integer)("GUID"))
|
||||
Next
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user