Imports DigitalData.Modules.Database Imports DigitalData.Modules.EDMI.API Imports DigitalData.Modules.EDMI.API.Constants Imports DigitalData.Modules.EDMI.API.EDMIServiceReference Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Language.Utils Public Class DatabaseWithFallback Private ReadOnly _Logger As Logger Private ReadOnly _Client As Client Private ReadOnly _DatabaseEDM As MSSQLServer Private ReadOnly _DatabaseIDB As MSSQLServer Public Enum TableType TBIDB_ATTRIBUTE End Enum Public Class Table Public TableName As String Public SQLCommand As String Public DatabaseType As Constants.DatabaseType End Class Public Property Tables As New List(Of Table) From { New Table With {.DatabaseType = DatabaseType.IDB, .TableName = "TBIDB_ATTRIBUTE", .SQLCommand = "SELECT * FROM TBIDB_ATTRIBUTE"} } Public Sub New(LogConfig As LogConfig, Client As Client, DatabaseECM As MSSQLServer, DatabaseIDB As MSSQLServer) _Logger = LogConfig.GetLogger() _Client = Client _DatabaseEDM = DatabaseECM _DatabaseIDB = DatabaseIDB End Sub Public Function GetDatatable(pDataTableName As String, pFallbackSQL As String, pFallbackType As Constants.DatabaseType, Optional pFilterExpression As String = "", Optional pSortByColumn As String = "", Optional pForceFallback As Boolean = False) As DataTable Try Dim oResult As DataTable = Nothing If pForceFallback = False Then Dim oTableResult As TableResult Try oTableResult = _Client.GetDatatableByName(pDataTableName, pFilterExpression, pSortByColumn) Catch ex As Exception _Logger.Error(ex) oTableResult = Nothing End Try If oTableResult Is Nothing OrElse oTableResult.OK = False Then _Logger.Warn("Datatable [{0}] could not be fetched from AppServer Cache. Falling back to direct Database Access.", pDataTableName) Return GetDatatableFromDatabase(pFallbackSQL, pFallbackType) End If Return oTableResult.Table Else Return GetDatatableFromDatabase(pFallbackSQL, pFallbackType) End If Catch ex As Exception _Logger.Error(ex) Return Nothing End Try End Function Private Function GetDatatableFromDatabase(SQLCommand As String, DatabaseType As DatabaseType) Try Select Case DatabaseType Case DatabaseType.ECM Return _DatabaseEDM.GetDatatable(SQLCommand) Case DatabaseType.IDB Return _DatabaseIDB.GetDatatable(SQLCommand) Case Else Return Nothing End Select Catch ex As Exception _Logger.Error(ex) Return Nothing End Try End Function End Class