diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Exceptions.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Exceptions.xsd
new file mode 100644
index 00000000..1b35f58a
--- /dev/null
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Exceptions.xsd
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl
index 0a4f00a0..b1d36f6e 100644
--- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl
@@ -4,6 +4,7 @@
+
@@ -23,66 +24,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -92,16 +129,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -110,58 +159,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap
index 317fffe7..2d855184 100644
--- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap
@@ -29,6 +29,7 @@
+
diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb
index 1b1c5bcc..ba1f7fdb 100644
--- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb
@@ -92,6 +92,11 @@ Namespace EDMIServiceReference
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.BaseResult)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NonQueryResult)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(System.DBNull)), _
+ System.Runtime.Serialization.KnownTypeAttribute(GetType(System.Exception)), _
+ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault)), _
+ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.BaseFault)), _
+ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.DataTableDoesNotExistFault)), _
+ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ObjectDoesNotExistFault)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.RightsAccessRight))> _
Partial Public Class ScalarResult
Inherits EDMIServiceReference.BaseResult
@@ -147,6 +152,116 @@ Namespace EDMIServiceReference
End Property
End Class
+ _
+ Partial Public Class UnexpectedErrorFault
+ Inherits EDMIServiceReference.BaseFault
+ End Class
+
+ _
+ Partial Public Class BaseFault
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private InnerExceptionField As System.Exception
+
+ _
+ Private IsRecoverableField As Boolean
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property InnerException() As System.Exception
+ Get
+ Return Me.InnerExceptionField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.InnerExceptionField, value) <> true) Then
+ Me.InnerExceptionField = value
+ Me.RaisePropertyChanged("InnerException")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property IsRecoverable() As Boolean
+ Get
+ Return Me.IsRecoverableField
+ End Get
+ Set
+ If (Me.IsRecoverableField.Equals(value) <> true) Then
+ Me.IsRecoverableField = value
+ Me.RaisePropertyChanged("IsRecoverable")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class DataTableDoesNotExistFault
+ Inherits EDMIServiceReference.BaseFault
+ End Class
+
+ _
+ Partial Public Class ObjectDoesNotExistFault
+ Inherits EDMIServiceReference.BaseFault
+ End Class
+
_
Public Enum RightsAccessRight As Integer
@@ -172,7 +287,13 @@ Namespace EDMIServiceReference
Function HeartbeatAsync() As System.Threading.Tasks.Task(Of Boolean)
_
+ "onse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnDatatableFromCacheUnex"& _
+ "pectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.DataTableDoesNotExistFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnDatatableFromCacheData"& _
+ "TableDoesNotExistFaultFault", Name:="DataTableDoesNotExistFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult
_
+ "onse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnDatatable_FirebirdUnex"& _
+ "pectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult
_
+ "e"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnScalar_FirebirdUnexpec"& _
+ "tedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnScalar_Firebird(ByVal SQL As String) As EDMIServiceReference.ScalarResult
_
+ "onse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ExecuteNonQuery_FirebirdUnex"& _
+ "pectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ExecuteNonQuery_Firebird(ByVal SQL As String) As EDMIServiceReference.NonQueryResult
_
+ "ponse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnDatatable_MSSQL_IDBUne"& _
+ "xpectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnDatatable_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.TableResult
_
+ "se"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnScalar_MSSQL_IDBUnexpe"& _
+ "ctedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnScalar_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.ScalarResult
_
+ "ponse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ExecuteNonQuery_MSSQL_IDBUne"& _
+ "xpectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ExecuteNonQuery_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.NonQueryResult
_
+ "ponse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnDatatable_MSSQL_ECMUne"& _
+ "xpectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnDatatable_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.TableResult
_
+ "se"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ReturnScalar_MSSQL_ECMUnexpe"& _
+ "ctedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ReturnScalar_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.ScalarResult
_
+ "ponse"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/ExecuteNonQuery_MSSQL_ECMUne"& _
+ "xpectedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function ExecuteNonQuery_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.NonQueryResult
_
+ _
Function ImportFile(ByVal request As EDMIServiceReference.DocumentImportRequest) As EDMIServiceReference.DocumentImportResponse
_
Function ImportFileAsync(ByVal request As EDMIServiceReference.DocumentImportRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentImportResponse)
'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Wrappername (DocumentStreamRequest) von Nachricht "DocumentStreamRequest" nicht mit dem Standardwert (GetFileByObjectId) übereinstimmt.
- _
+ _
Function GetFileByObjectId(ByVal request As EDMIServiceReference.DocumentStreamRequest) As EDMIServiceReference.DocumentStreamResponse
_
Function GetFileByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentStreamRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse)
_
+ "e"), _
+ System.ServiceModel.FaultContractAttribute(GetType(EDMIServiceReference.UnexpectedErrorFault), Action:="http://DigitalData.Services.EDMIService/IEDMIService/GetFileInfoByObjectIdUnexpec"& _
+ "tedErrorFaultFault", Name:="UnexpectedErrorFault", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Exceptio"& _
+ "ns")> _
Function GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse
'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang mehrere Rückgabewerte aufweist.
@@ -275,7 +435,10 @@ Namespace EDMIServiceReference
Function GetFileInfoByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentInfoRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentInfoResponse)
'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang ListFilesForUser weder in RPC noch in einem Dokument eingeschlossen ist.
- _
+ _
Function ListFilesForUser(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As EDMIServiceReference.DocumentListResponse
_
diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/System.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/System.xsd
index 554d75bc..bdecebdc 100644
--- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/System.xsd
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/System.xsd
@@ -1,7 +1,15 @@
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl
index 1f3071f6..7331e682 100644
--- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl
+++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl
@@ -58,6 +58,12 @@
+
+
+
+
+
+
@@ -67,6 +73,9 @@
+
+
+
@@ -76,6 +85,9 @@
+
+
+
@@ -85,6 +97,9 @@
+
+
+
@@ -94,6 +109,9 @@
+
+
+
@@ -103,6 +121,9 @@
+
+
+
@@ -112,6 +133,9 @@
+
+
+
@@ -121,6 +145,9 @@
+
+
+
@@ -130,6 +157,9 @@
+
+
+
@@ -139,6 +169,9 @@
+
+
+
@@ -148,6 +181,9 @@
+
+
+
@@ -158,6 +194,12 @@
+
+
+
+
+
+
@@ -167,6 +209,9 @@
+
+
+
@@ -176,6 +221,9 @@
+
+
+
diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj
index bb970afc..e6fb780c 100644
--- a/Modules.EDMIAPI/EDMI.API.vbproj
+++ b/Modules.EDMIAPI/EDMI.API.vbproj
@@ -133,6 +133,9 @@
Designer
+
+ Designer
+
Designer
diff --git a/Service.EDMIService/EDMIService.vb b/Service.EDMIService/EDMIService.vb
index 6bbe3664..a64eb0ca 100644
--- a/Service.EDMIService/EDMIService.vb
+++ b/Service.EDMIService/EDMIService.vb
@@ -8,6 +8,7 @@ Imports System.Data.SqlClient
Imports System.ServiceModel.Description
Imports DigitalData.Services.EDMIService.Messages
Imports DigitalData.Modules.EDMI.API.Rights
+Imports DigitalData.Services.EDMIService.Exceptions
Public Class EDMIService
@@ -23,6 +24,9 @@ Public Class EDMIService
Public Shared GlobalState As GlobalState
Public Shared Scheduler As Scheduler
+ Public Const TBIDB_DOC_INFO = "TBIDB_DOC_INFO"
+ Public Const TBIDB_ACCESSRIGHT = "TBIDB_ACCESSRIGHT"
+
Private ReadOnly _Logger As Logger
Private ReadOnly _Debug As Boolean = False
Private ReadOnly _Username As String
@@ -100,11 +104,20 @@ Public Class EDMIService
Return New TableResult(oFilteredTable)
Else
- Throw New ApplicationException($"DataTable {Name} does not exist")
+ _Logger.Warn($"Datatable {Name} does not exist")
+ Dim oDetails As New DataTableDoesNotExistFault(Name)
+ Throw New FaultException(Of DataTableDoesNotExistFault)(oDetails)
End If
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Throw New FaultException(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
#End Region
@@ -115,9 +128,16 @@ Public Class EDMIService
_Logger.Info($"ReturnDatatable_MSSQL_IDB, SQL: {SQL}")
Dim oResult As DataTable = MSSQL_IDB.GetDatatable(SQL)
Return New TableResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New TableResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -126,9 +146,16 @@ Public Class EDMIService
_Logger.Info($"ReturnScalar_MSSQL_IDB, SQL: {SQL}")
Dim oResult As Object = MSSQL_IDB.GetScalarValue(SQL)
Return New ScalarResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New ScalarResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -137,9 +164,16 @@ Public Class EDMIService
_Logger.Info($"ExecuteNonQuery_MSSQL_IDB, SQL: {SQL}")
Dim oResult As Boolean = MSSQL_IDB.ExecuteNonQuery(SQL)
Return New NonQueryResult()
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New NonQueryResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
#End Region
@@ -150,9 +184,16 @@ Public Class EDMIService
_Logger.Info($"ReturnDatatable_MSSQL_ECM, SQL: {SQL}")
Dim oResult As DataTable = MSSQL_ECM.GetDatatable(SQL)
Return New TableResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New TableResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -161,9 +202,16 @@ Public Class EDMIService
_Logger.Info($"ReturnScalar_MSSQL_ECM, SQL: {SQL}")
Dim oResult As Object = MSSQL_ECM.GetScalarValue(SQL)
Return New ScalarResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New ScalarResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -172,9 +220,16 @@ Public Class EDMIService
_Logger.Info($"ExecuteNonQuery_MSSQL_ECM, SQL: {SQL}")
Dim oResult As Boolean = MSSQL_ECM.ExecuteNonQuery(SQL)
Return New NonQueryResult()
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New NonQueryResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
#End Region
@@ -185,9 +240,16 @@ Public Class EDMIService
_Logger.Info($"ReturnDatatable, SQL: {SQL}")
Dim oResult As DataTable = Firebird.GetDatatable(SQL)
Return New TableResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New TableResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -196,9 +258,16 @@ Public Class EDMIService
_Logger.Info($"ReturnScalar, SQL: {SQL}")
Dim oResult As Object = Firebird.GetScalarValue(SQL)
Return New ScalarResult(oResult)
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New ScalarResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
@@ -207,9 +276,16 @@ Public Class EDMIService
_Logger.Info($"ExecuteNonQuery, SQL: {SQL}")
Dim oResult As Boolean = Firebird.ExecuteNonQuery(SQL)
Return New NonQueryResult()
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Return New NonQueryResult(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
#End Region
@@ -220,14 +296,7 @@ Public Class EDMIService
'''
'''
Public Function ImportFile(Data As DocumentImportRequest) As DocumentImportResponse Implements IEDMIService.ImportFile
- Dim oObjectStore = GlobalState.ObjectStores.
- Where(Function(s) s.Id = Data.ObjectStoreId).
- FirstOrDefault()
-
- If oObjectStore Is Nothing Then
- Throw New FaultException($"Object Store with Id [{Data.ObjectStoreId}] does not exist!")
- End If
-
+ Dim oObjectStore = GlobalState.ObjectStores.First()
Dim EDMIPath = New EDMI.File.Path(LogConfig, oObjectStore.Path)
' TODO:
@@ -244,12 +313,7 @@ Public Class EDMIService
Try
Directory.CreateDirectory(oDirectoryPath)
- Catch ex As Exception
- _Logger.Error(ex)
- Throw New FaultException(ex.Message)
- End Try
- Try
Dim oVersionedFileName As String = Filesystem.GetVersionedFilename(oAbsolutePath)
_Logger.Info("ImportFile: Saving file [{0}] to path [{1}]", Data.FileName, oVersionedFileName)
@@ -270,37 +334,37 @@ Public Class EDMIService
Dim oObjectId = MSSQL_IDB.GetScalarValue(oCommand, "@IDB_OBJ_ID")
Return New DocumentImportResponse() With {.ObjectId = oObjectId}
+
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Throw New FaultException(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
+
End Try
End Function
Public Function GetFileByObjectId(Data As DocumentStreamRequest) As DocumentStreamResponse Implements IEDMIService.GetFileByObjectId
Try
- Dim oSQL As String = $"SELECT ObjectStoreId FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}"
- Dim oObjectStoreId = MSSQL_IDB.GetScalarValue(oSQL)
+ Dim oFullPath = GetFullPathForObjectId(Data.ObjectId)
- Dim oObjectStore = GlobalState.ObjectStores.
- Where(Function(s) s.Id = oObjectStoreId).
- FirstOrDefault()
-
- Dim oSQL2 As String = $"SELECT DocRelativePath FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}"
- Dim oPath As String = MSSQL_IDB.GetScalarValue(oSQL2)
-
- If IsNothing(oPath) Then
- Throw New FaultException($"Object [{Data.ObjectId}] does not exist in database!")
+ If oFullPath = String.Empty Then
+ Dim oDetails As New ObjectDoesNotExistFault(Data.ObjectId)
+ _Logger.Warn("GetFileByObjectId: " & oDetails.ErrorMessage)
+ Throw New FaultException(Of ObjectDoesNotExistFault)(oDetails, oDetails.ErrorMessage)
End If
- Dim EDMIPath As New EDMI.File.Path(LogConfig, oObjectStore.Path)
- Dim oFullPath = EDMIPath.GetFullPathFromRelativePath(oPath)
-
_Logger.Debug("GetFileByObjectId: Loading file [{0}]", oFullPath)
Dim oFileInfo As New FileInfo(oFullPath)
If Not oFileInfo.Exists Then
- Throw New FaultException($"Object [{Data.ObjectId}] does not exist on filesystem!")
+ Dim oDetails As New ObjectDoesNotExistFault(Data.ObjectId)
+ _Logger.Warn("GetFileByObjectId: " & oDetails.ErrorMessage)
+ Throw New FaultException(Of ObjectDoesNotExistFault)(oDetails, oDetails.ErrorMessage)
End If
Dim oDestination As New MemoryStream()
@@ -309,109 +373,145 @@ Public Class EDMIService
End Using
oDestination.Seek(0, SeekOrigin.Begin)
- Dim oMessage As New Messages.DocumentStreamResponse() With {
+ Dim oMessage As New DocumentStreamResponse() With {
.FileName = oFileInfo.Name,
.FileContents = oDestination
}
Return oMessage
- Catch ex As IOException
+ Catch ex As FaultException
_Logger.Error(ex)
- Throw New FaultException($"Object [{Data.ObjectId}] could not be streamed!")
+ Throw ex
Catch ex As Exception
_Logger.Error(ex)
- Throw New FaultException(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
End Try
End Function
Public Function ListFilesForUser() As DocumentListResponse Implements IEDMIService.ListFilesForUser
Try
- Dim oSQL = $"SELECT * FROM VWIDB_DOC_DATA"
- Dim oDatatable As DataTable = MSSQL_IDB.GetDatatable(oSQL)
- oDatatable.TableName = "DocumentList"
+ Dim oDatatable = GetFileList()
Return New DocumentListResponse() With {
.Datatable = oDatatable
}
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Throw New FaultException(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
End Try
End Function
Public Function GetFileInfoByObjectId(Data As DocumentInfoRequest) As DocumentInfoResponse Implements IEDMIService.GetFileInfoByObjectId
Try
- Dim oAccessRight = GetAccessRight(Data.UserId, Data.ObjectId)
- Dim oFullPath = GetFullPath(Data.ObjectId)
+ Dim oAccessRight = GetAccessRightForObjectId(Data.UserId, Data.ObjectId)
+ Dim oFullPath = GetFullPathForObjectId(Data.ObjectId)
+
+ If oFullPath = String.Empty Then
+ Dim oDetails As New ObjectDoesNotExistFault(Data.ObjectId)
+ Throw New FaultException(Of ObjectDoesNotExistFault)(oDetails)
+ End If
Return New DocumentInfoResponse With {
.FileRight = oAccessRight,
.FullPath = oFullPath
}
+ Catch ex As FaultException
+ _Logger.Error(ex)
+ Throw ex
+
Catch ex As Exception
_Logger.Error(ex)
- Throw New FaultException(ex.Message)
+ Dim oDetails As New UnexpectedErrorFault(ex)
+ Throw New FaultException(Of UnexpectedErrorFault)(oDetails, oDetails.ErrorMessage)
End Try
End Function
- Private Function GetFullPath(ObjectId As Long) As String
- Dim oTableName As String = "TBIDB_DOC_INFO"
-
- If Not GlobalState.TableStore.Tables.Contains(oTableName) Then
- _Logger.Warn("GetFullPath: Document info table does not exist!")
- Return String.Empty
- End If
-
- Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(oTableName)
- Dim oRows As List(Of DataRow) = oTable.Select($"IDB_OBJ_ID = {ObjectId}").ToList()
-
- Dim oFullPath As String
-
- If oRows.Count = 0 Then
- _Logger.Warn("GetFullPath: Full path does not exist for on object [{1}]", ObjectId)
- oFullPath = String.Empty
- Else
- Dim oRow As DataRow = oRows.First()
- oFullPath = oRow.Item("FULL_PATH")
- End If
-
- Return oFullPath
- End Function
-
- Private Function GetAccessRight(UserId As Long, ObjectId As Long) As AccessRight
- Dim oTableName As String = "TBIDB_ACCESSRIGHT"
-
- If Not GlobalState.TableStore.Tables.Contains(oTableName) Then
- _Logger.Warn("GetAccessRight: Access right table does not exist!")
- Return AccessRight.VIEW_ONLY
- End If
-
- Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(oTableName)
- Dim oRows As List(Of DataRow) = oTable.Select($"IDB_OBJ_ID = {ObjectId} AND USR_ID = {UserId}").ToList()
- Dim oRight As AccessRight = AccessRight.VIEW_ONLY
-
- If oRows.Count = 0 Then
- _Logger.Warn("GetAccessRight: Access right assignment does not exist for user [{0}] on object [{1}]", UserId, ObjectId)
- Return AccessRight.VIEW_ONLY
- Else
- If oRows.Count > 1 Then
- _Logger.Warn("GetAccessRight: More than one access right assignment found for user [{0}] on object [{1}]", UserId, ObjectId)
+ Public Function GetFileList() As DataTable
+ Try
+ If Not GlobalState.TableStore.Tables.Contains(TBIDB_DOC_INFO) Then
+ _Logger.Warn("GetFileList: Document info table does not exist!")
+ Return Nothing
End If
- Dim oRow As DataRow = oRows.First()
- Dim oRightAsInt = oRow.Item("ACCESSRIGHT")
+ Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(TBIDB_DOC_INFO)
+ Return oTable
+ Catch ex As Exception
+ _Logger.Warn("GetFileList: Unexpected Error while getting file list.")
+ _Logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+ Private Function GetFullPathForObjectId(ObjectId As Long) As String
+ Try
+ If Not GlobalState.TableStore.Tables.Contains(TBIDB_DOC_INFO) Then
+ _Logger.Warn("GetFullPathForObjectId: Document info table does not exist!")
+ Return String.Empty
+ End If
- oRight = Utils.ToEnum(Of AccessRight)(oRightAsInt)
- End If
+ Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(TBIDB_DOC_INFO)
+ Dim oRows As List(Of DataRow) = oTable.Select($"IDB_OBJ_ID = {ObjectId}").ToList()
- Return oRight
+ Dim oFullPath As String
+
+ If oRows.Count = 0 Then
+ _Logger.Warn("GetFullPathForObjectId: Full path does not exist for on object [{1}]", ObjectId)
+ oFullPath = String.Empty
+ Else
+ Dim oRow As DataRow = oRows.First()
+ oFullPath = oRow.Item("FULL_PATH")
+ End If
+
+ Return oFullPath
+ Catch ex As Exception
+ _Logger.Warn("GetFullPathForObjectId: Unexpected Error while getting full path for object [{0}].", ObjectId)
+ _Logger.Error(ex)
+ Return String.Empty
+ End Try
+ End Function
+ Private Function GetAccessRightForObjectId(UserId As Long, ObjectId As Long) As AccessRight
+ Try
+ If Not GlobalState.TableStore.Tables.Contains(TBIDB_ACCESSRIGHT) Then
+ _Logger.Warn("GetAccessRightForObjectId: Access right table does not exist!")
+ Return AccessRight.VIEW_ONLY
+ End If
+
+ Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(TBIDB_ACCESSRIGHT)
+ Dim oRows As List(Of DataRow) = oTable.Select($"IDB_OBJ_ID = {ObjectId} AND USR_ID = {UserId}").ToList()
+ Dim oRight As AccessRight
+
+ If oRows.Count = 0 Then
+ _Logger.Warn("GetAccessRightForObjectId: Access right assignment does not exist for user [{0}] on object [{1}]", UserId, ObjectId)
+ Return AccessRight.VIEW_ONLY
+ Else
+ If oRows.Count > 1 Then
+ _Logger.Warn("GetAccessRightForObjectId: More than one access right assignment found for user [{0}] on object [{1}]", UserId, ObjectId)
+ End If
+
+ Dim oRow As DataRow = oRows.First()
+ Dim oRightAsInt = oRow.Item("ACCESSRIGHT")
+
+ oRight = Utils.ToEnum(Of AccessRight)(oRightAsInt)
+ End If
+
+ Return oRight
+ Catch ex As Exception
+ _Logger.Warn("GetAccessRightForObjectId: Unexpected Error while getting access right for object [{0}].", ObjectId)
+ _Logger.Error(ex)
+ Return AccessRight.VIEW_ONLY
+ End Try
End Function
#End Region
End Class
\ No newline at end of file
diff --git a/Service.EDMIService/EDMIService.vbproj b/Service.EDMIService/EDMIService.vbproj
index b77d578f..244edba0 100644
--- a/Service.EDMIService/EDMIService.vbproj
+++ b/Service.EDMIService/EDMIService.vbproj
@@ -126,14 +126,13 @@
-
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/Service.EDMIService/Exceptions.vb b/Service.EDMIService/Exceptions.vb
deleted file mode 100644
index 750f7df2..00000000
--- a/Service.EDMIService/Exceptions.vb
+++ /dev/null
@@ -1,13 +0,0 @@
-Imports System.ServiceModel
-
-Public Class Exceptions
-
- Public Class BaseException
- Inherits FaultException
- End Class
-
- Public Class NoRequestException
- Inherits BaseException
- End Class
-
-End Class
diff --git a/Service.EDMIService/Results/AccessRightResult.vb b/Service.EDMIService/Helpers/AccessRightResult.vb
similarity index 100%
rename from Service.EDMIService/Results/AccessRightResult.vb
rename to Service.EDMIService/Helpers/AccessRightResult.vb
diff --git a/Service.EDMIService/Results/BaseResult.vb b/Service.EDMIService/Helpers/BaseResult.vb
similarity index 100%
rename from Service.EDMIService/Results/BaseResult.vb
rename to Service.EDMIService/Helpers/BaseResult.vb
diff --git a/Service.EDMIService/Results/DatabaseResult.vb b/Service.EDMIService/Helpers/DatabaseResult.vb
similarity index 100%
rename from Service.EDMIService/Results/DatabaseResult.vb
rename to Service.EDMIService/Helpers/DatabaseResult.vb
diff --git a/Service.EDMIService/Helpers/Exceptions.vb b/Service.EDMIService/Helpers/Exceptions.vb
new file mode 100644
index 00000000..a5dc9735
--- /dev/null
+++ b/Service.EDMIService/Helpers/Exceptions.vb
@@ -0,0 +1,71 @@
+Imports System.Runtime.Serialization
+Imports System.ServiceModel
+
+Namespace Exceptions
+
+
+ Public Class UnexpectedErrorException(Of UnexpectedErrorFault)
+ Inherits FaultException
+
+ Public Sub New()
+ MyBase.New()
+ End Sub
+ End Class
+
+
+
+
+
+
+ Public Class BaseFault
+ '''
+ ''' The human readable error message
+ '''
+
+ Public Property ErrorMessage As String
+
+
+ Public Property InnerException As Exception
+
+
+ Public Property IsRecoverable As Boolean = True
+ End Class
+
+
+ Public Class UnexpectedErrorFault
+ Inherits BaseFault
+
+ Public Sub New(Exception As Exception)
+ MyBase.New()
+ ErrorMessage = "Unexpected Error"
+ IsRecoverable = True
+ InnerException = Exception
+
+ End Sub
+ End Class
+
+
+ Public Class DataTableDoesNotExistFault
+ Inherits BaseFault
+
+ Public Sub New(Name As String)
+ MyBase.New()
+ ErrorMessage = $"Datatable {Name} does not exist"
+ IsRecoverable = True
+ InnerException = Nothing
+ End Sub
+ End Class
+
+
+ Public Class ObjectDoesNotExistFault
+ Inherits BaseFault
+
+ Public Sub New(ObjectId As Long)
+ MyBase.New()
+ ErrorMessage = $"Object with Id {ObjectId} does not exist"
+ IsRecoverable = True
+ InnerException = Nothing
+ End Sub
+ End Class
+
+End Namespace
diff --git a/Service.EDMIService/Results/Messages.vb b/Service.EDMIService/Helpers/Messages.vb
similarity index 100%
rename from Service.EDMIService/Results/Messages.vb
rename to Service.EDMIService/Helpers/Messages.vb
diff --git a/Service.EDMIService/IEDMIService.vb b/Service.EDMIService/IEDMIService.vb
index 7a76c450..8aa325d3 100644
--- a/Service.EDMIService/IEDMIService.vb
+++ b/Service.EDMIService/IEDMIService.vb
@@ -1,8 +1,8 @@
Imports System.IO
Imports System.ServiceModel
Imports DigitalData.Modules.Filesystem
+Imports DigitalData.Services.EDMIService.Exceptions
Imports DigitalData.Services.EDMIService.Messages
-Imports DigitalData.Services.EDMIService.Results
Interface IEDMIService
@@ -14,53 +14,69 @@ Interface IEDMIService
#Region "Database"
+
+
Function ReturnDatatableFromCache(Name As String, FilterExpression As String, SortByColumn As String) As TableResult
#End Region
#Region "Database (Firebird)"
+
Function ReturnDatatable_Firebird(SQL As String) As TableResult
+
Function ReturnScalar_Firebird(SQL As String) As ScalarResult
+
Function ExecuteNonQuery_Firebird(SQL As String) As NonQueryResult
#End Region
#Region "Database (MSSQL IDB)"
+
Function ReturnDatatable_MSSQL_IDB(SQL As String) As TableResult
+
Function ReturnScalar_MSSQL_IDB(SQL As String) As ScalarResult
+
Function ExecuteNonQuery_MSSQL_IDB(SQL As String) As NonQueryResult
#End Region
#Region "Database (MSSQL ECM)"
+
Function ReturnDatatable_MSSQL_ECM(SQL As String) As TableResult
+
Function ReturnScalar_MSSQL_ECM(SQL As String) As ScalarResult
+
Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult
#End Region
#Region "Document (New)"
+
Function ImportFile(Data As DocumentImportRequest) As DocumentImportResponse
+
+
Function GetFileByObjectId(Data As DocumentStreamRequest) As DocumentStreamResponse
+
Function GetFileInfoByObjectId(Data As DocumentInfoRequest) As DocumentInfoResponse
+
Function ListFilesForUser() As DocumentListResponse
#End Region
diff --git a/Service.EDMIService/Results.vb b/Service.EDMIService/Results.vb
deleted file mode 100644
index 12c058df..00000000
--- a/Service.EDMIService/Results.vb
+++ /dev/null
@@ -1,2 +0,0 @@
-Friend Class Results
-End Class
diff --git a/Service.EDMIService/Scheduler/DatatableJob.vb b/Service.EDMIService/Scheduler/DatatableJob.vb
index e327fad0..f5636425 100644
--- a/Service.EDMIService/Scheduler/DatatableJob.vb
+++ b/Service.EDMIService/Scheduler/DatatableJob.vb
@@ -64,7 +64,7 @@ Public Class DatatableJob
oResultTable.TableRelationColumn = oParentColumn
End If
- oLogger.Info("Fetched Datatable [{0}]", oDatatableName)
+ oLogger.Debug("Fetched Datatable [{0}]", oDatatableName)
oResult.Tables.Add(oResultTable)
Catch ex As Exception
oLogger.Warn("Execute: Error while saving Table: [{0}]", oDatatableName)
@@ -72,6 +72,8 @@ Public Class DatatableJob
End Try
Next
+ oLogger.Info("Fetched [{0}] Datatables", oResult.Tables.Count)
+
' Das Ergebnis speichern
context.Result = oResult
@@ -81,60 +83,5 @@ Public Class DatatableJob
End Try
Return Task.FromResult(True)
-
-#Region "OLD"
- 'Dim oJobData = context.MergedJobDataMap
- 'Dim oLogConfig As LogConfig = oJobData.Item("LogConfig")
- 'Dim oLogger As Logger = oLogConfig.GetLogger()
- 'Dim oDetailRow As DataRow = oJobData.Item("CronJobDetails")
- 'Dim oDatatableName As String = NotNull(oDetailRow.Item("DT_NAME"), String.Empty)
-
- 'Try
- ' Dim oCronJobTitle As String = oJobData.Item("CronJobTitle")
- ' Dim oMSSQL As MSSQLServer = oJobData.Item("MSSQL")
-
- ' Dim oConnectionId As Integer = NotNull(oDetailRow.Item("CON_ID"), String.Empty)
- ' Dim oTitle As String = NotNull(oDetailRow.Item("TITLE"), String.Empty)
- ' Dim oSQL As String = NotNull(oDetailRow.Item("COMMAND"), String.Empty)
-
- ' oLogger.Debug("Running Command-Job [{0}]", oTitle)
- ' oLogger.Debug("Datatable Name: {0}", oDatatableName)
- ' oLogger.Debug("Connection Id: {0}", oConnectionId)
-
- ' Dim oConnectionString = oMSSQL.Get_ConnectionStringforID(oConnectionId)
-
- ' Dim oTable = oMSSQL.GetDatatableWithConnection(oSQL, oConnectionString)
- ' oTable.TableName = oDatatableName
- ' oLogger.Debug("Result Datatable [{0}] contains [{1}] rows", oTable.TableName, oTable.Rows.Count)
-
- ' Dim oResult = New JobResult() With {
- ' .Table = oTable
- ' }
-
- ' Dim oChildTableNAme As String = NotNull(oDetailRow.Item("CHILD_DT_NAME"), String.Empty)
-
- ' If oChildTableNAme <> String.Empty Then
- ' Dim oParentColumn As String = NotNull(oDetailRow.Item("DT_COLUMN"), String.Empty)
- ' Dim oChildColumn As String = NotNull(oDetailRow.Item("CHILD_DT_COLUMN"), String.Empty)
- ' oLogger.Debug("Child Datatable [{0}] defined, Relation: Parent [{1}] -> Child [{2}]", oChildTableName, oParentColumn, oChildColumn)
-
- ' Dim oChildTable As DataTable = oMSSQL.GetDatatableWithConnection($"SELECT * FROM {oChildTableName}", oConnectionString)
- ' oChildTable.TableName = oChildTableName
- ' oLogger.Debug("Child Datatable [{0}] contains [{1}] rows", oChildTable.TableName, oChildTable.Rows.Count)
-
- ' oResult.ChildTable = oChildTable
- ' oResult.ChildRelationColumn = oChildColumn
- ' oResult.TableRelationColumn = oParentColumn
- ' End If
-
- ' ' Das Ergebnis speichern
- ' context.Result = oResult
- 'Catch ex As Exception
- ' oLogger.Error(ex)
- ' oLogger.Warn("Unhandled exception while executing SQL for Datatable {0}", oDatatableName)
- 'End Try
-
- 'Return Task.FromResult(True)
-#End Region
End Function
End Class
diff --git a/Service.EDMIService/Scheduler/JobListener.vb b/Service.EDMIService/Scheduler/JobListener.vb
index 50714c6b..42f2d4f6 100644
--- a/Service.EDMIService/Scheduler/JobListener.vb
+++ b/Service.EDMIService/Scheduler/JobListener.vb
@@ -167,8 +167,8 @@ Public Class JobListener
Dim oDatatableNameTemp As String = oName & "-TEMP"
' Used for debugging relations and constraints
- _Logger.Debug("Dataset BEFORE saving datatables")
- ListTables(Dataset)
+ '_Logger.Debug("Dataset BEFORE saving datatables")
+ 'ListTables(Dataset)
If Dataset.Tables.Contains(oName) Then
' Replace existing table
@@ -193,14 +193,9 @@ Public Class JobListener
_Logger.Debug(oDataTable.TableName)
Next
- _Logger.Debug("Listing Relations in Dataset")
- For Each oRelation As DataRelation In Dataset.Relations
- _Logger.Debug(oRelation.RelationName)
- Next
-
' Used for debugging relations and constraints
- _Logger.Debug("Dataset AFTER saving datatables")
- ListTables(Dataset)
+ '_Logger.Debug("Dataset AFTER saving datatables")
+ 'ListTables(Dataset)
_MSSQL.ExecuteNonQuery($"INSERT INTO TBAPPSERV_CRON_DETAIL_HISTORY (DETAIL_ID) VALUES ({oDetailId})")
Catch ex As Exception
diff --git a/Service.EDMIService/Scheduler.vb b/Service.EDMIService/Scheduler/Scheduler.vb
similarity index 100%
rename from Service.EDMIService/Scheduler.vb
rename to Service.EDMIService/Scheduler/Scheduler.vb