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