From c022872832d9f2369514ee081fa827e275a6c149 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Thu, 20 May 2021 16:13:16 +0200 Subject: [PATCH] EDMIAPI: Add DataWithFallback --- Modules.EDMIAPI/DataWithFallback.vb | 92 ++++++++++++++++++++ Modules.EDMIAPI/DataWithFallback/UserData.vb | 14 +++ Modules.EDMIAPI/EDMI.API.vbproj | 10 +++ 3 files changed, 116 insertions(+) create mode 100644 Modules.EDMIAPI/DataWithFallback.vb create mode 100644 Modules.EDMIAPI/DataWithFallback/UserData.vb diff --git a/Modules.EDMIAPI/DataWithFallback.vb b/Modules.EDMIAPI/DataWithFallback.vb new file mode 100644 index 00000000..7f2ea153 --- /dev/null +++ b/Modules.EDMIAPI/DataWithFallback.vb @@ -0,0 +1,92 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.EDMI.API +Imports DigitalData.Modules.EDMI.API.EDMIServiceReference +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Language.Utils + +Public Class DataWithFallback + Private _Logger As Logger + Private _Client As Client + Private _DatabaseEDM As MSSQLServer + Private _DatabaseIDB As MSSQLServer + Private _Type As DatabaseType + + Public Enum DatabaseType + ECM + IDB + End Enum + + 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(DataTable As String, FilterExpression As String, SortByColumn As String, FallbackSQL As String, FallbackType As DatabaseType, Optional ForceFallback As Boolean = False) As DataTable + Try + Dim oResult As DataTable = Nothing + + If ForceFallback = False Then + Dim oTableResult As TableResult = _Client.GetDatatableByName(DataTable, FilterExpression, SortByColumn) + + 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.") + End If + + Return oTableResult.Table + Else + Return GetDatatableFromDatabase(FallbackSQL, FallbackType) + 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 + + Public Function GetUserData(UserName As String, ModuleCode As String, Client As Integer) As UserData + Dim oSQL = $"SELECT * FROM FNDD_CHECK_USER_MODULE('{UserName}','{ModuleCode}',{Client})" + Dim oTable As DataTable = GetDatatable("TBDD_USER_MODULE", $"USERNAME = '{UserName.ToLower}' AND MODULE_SHORT = '{ModuleCode}'", "", oSQL, DatabaseType.ECM) + + If oTable Is Nothing Then + Return Nothing + End If + + If oTable.Rows.Count = 0 Then + Return Nothing + End If + + Dim oRow As DataRow = oTable.Rows.Item(0) + Dim oUserData As New UserData With { + .Id = NotNull(oRow, "USER_ID", -1), + .Surname = NotNull(oRow, "USER_SURNAME", String.Empty), + .Prename = NotNull(oRow, "USER_PRENAME", String.Empty), + .Shortname = NotNull(oRow, "USER_SHORTNAME", String.Empty), + .Email = NotNull(oRow, "USER_EMAIL", String.Empty), + .Language = NotNull(oRow, "USER_LANGUAGE", "de-DE"), + .DateFormat = NotNull(oRow, "USER_DATE_FORMAT", "dd.MM.yyyy") + } + End Function + +End Class + diff --git a/Modules.EDMIAPI/DataWithFallback/UserData.vb b/Modules.EDMIAPI/DataWithFallback/UserData.vb new file mode 100644 index 00000000..ae8e6120 --- /dev/null +++ b/Modules.EDMIAPI/DataWithFallback/UserData.vb @@ -0,0 +1,14 @@ +Public Class UserData + Public Id As Integer + Public Surname As String + Public Prename As String + Public Shortname As String + Public Email As String + Public Language As String + Public DateFormat As String + + Public IsAdmin As Boolean + Public HasAccess As Boolean + + Public ModuleName As String +End Class diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj index b81b7d70..5f7dbe71 100644 --- a/Modules.EDMIAPI/EDMI.API.vbproj +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -80,6 +80,7 @@ Reference.svcmap + True @@ -95,6 +96,7 @@ Settings.settings True + @@ -175,6 +177,14 @@ + + {eaf0ea75-5fa7-485d-89c7-b2d843b03a96} + Database + + + {d3c8cfed-d6f6-43a8-9bdf-454145d0352f} + Language + {903b2d7d-3b80-4be9-8713-7447b704e1b0} Logging