diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index 62e57d6e..6042c700 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -115,6 +115,21 @@ Public Class Client End Try End Function + ''' + ''' Aborts the channel and creates a new connection + ''' + Public Sub Reconnect() + _logger.Warn("Connection faulted. Trying to reconnect..") + + Try + _channel.Abort() + _channel = GetChannel() + _channel.Open() + Catch ex As Exception + _logger.Error(ex) + End Try + End Sub + ''' ''' Imports a file from a filepath, creating a IDB ObjectId and Filesystem Object ''' @@ -220,7 +235,6 @@ Public Class Client End Try End Function - ''' ''' Sets a value to an attribute ''' @@ -520,9 +534,13 @@ Public Class Client End Try End Function - Public Function GetDatatableFromIDB(SQL As String) As TableResult + Public Function GetDatatableFromIDB(pSQL As String, Optional pConnectionId As Integer = 0) As GetDatatableResponse Try - Dim oResponse = _channel.ReturnDatatable_MSSQL_IDB(SQL) + Dim oResponse = _channel.ReturnDatatable(New GetDatatableRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB, + .ConnectionId = pConnectionId + }) Return oResponse Catch ex As Exception _logger.Error(ex) @@ -530,9 +548,13 @@ Public Class Client End Try End Function - Public Async Function GetDatatableFromIDBAsync(SQL As String) As Task(Of TableResult) + Public Async Function GetDatatableFromIDBAsync(pSQL As String, Optional pConnectionId As Integer = 0) As Task(Of GetDatatableResponse) Try - Dim oResponse = Await _channel.ReturnDatatable_MSSQL_IDBAsync(SQL) + Dim oResponse = Await _channel.ReturnDatatableAsync(New GetDatatableRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB, + .ConnectionId = pConnectionId + }) Return oResponse Catch ex As Exception _logger.Error(ex) @@ -540,9 +562,13 @@ Public Class Client End Try End Function - Public Function GetScalarValueFromIDB(SQL As String) As ScalarResult + Public Function GetScalarValueFromIDB(pSQL As String, Optional pConnectionId As Integer = 0) As GetScalarValueResponse Try - Dim oResponse = _channel.ReturnScalar_MSSQL_IDB(SQL) + Dim oResponse = _channel.ReturnScalarValue(New GetScalarValueRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB, + .ConnectionId = pConnectionId + }) Return oResponse Catch ex As Exception _logger.Error(ex) @@ -550,9 +576,13 @@ Public Class Client End Try End Function - Public Async Function GetScalarValueFromIDBAsync(SQL As String) As Task(Of ScalarResult) + Public Async Function GetScalarValueFromIDBAsync(pSQL As String, Optional pConnectionId As Integer = 0) As Task(Of GetScalarValueResponse) Try - Dim oResponse = Await _channel.ReturnScalar_MSSQL_IDBAsync(SQL) + Dim oResponse = Await _channel.ReturnScalarValueAsync(New GetScalarValueRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB, + .ConnectionId = pConnectionId + }) Return oResponse Catch ex As Exception _logger.Error(ex) @@ -631,21 +661,8 @@ Public Class Client End Try End Function - ''' - ''' Aborts the channel and creates a new connection - ''' - Public Sub Reconnect() - _logger.Warn("Connection faulted. Trying to reconnect..") - - Try - _channel.Abort() - _channel = GetChannel() - _channel.Open() - Catch ex As Exception - _logger.Error(ex) - End Try - End Sub +#Region "Private Functions" ''' ''' Creates a channel and adds a Faulted-Handler ''' @@ -671,8 +688,7 @@ Public Class Client Private Function GetUserName(pOverrideName) As String Return NotNull(pOverrideName, Environment.UserName) End Function - - +#End Region #Region "Response Classes" Public Class StreamedFile diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetDatatableResponse.datasource b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetDatatableResponse.datasource new file mode 100644 index 00000000..47b7add3 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetDatatableResponse.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.EDMIServiceReference.GetDatatableResponse, Connected Services.EDMIServiceReference.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetScalarValueResponse.datasource b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetScalarValueResponse.datasource new file mode 100644 index 00000000..4df80cb8 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetScalarValueResponse.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.EDMIServiceReference.GetScalarValueResponse, Connected Services.EDMIServiceReference.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetDatatable.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetDatatable.xsd new file mode 100644 index 00000000..68b9405d --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetDatatable.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetScalarValue.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetScalarValue.xsd new file mode 100644 index 00000000..2453f626 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.GetScalarValue.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.xsd new file mode 100644 index 00000000..bdacc43e --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.Database.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ 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 a5f4ff8e..8c7c0df6 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl @@ -8,6 +8,9 @@ + + + @@ -38,6 +41,18 @@ + + + + + + + + + + + + @@ -194,6 +209,14 @@ + + + + + + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index 38cca34e..526cecdd 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -1,6 +1,8 @@  + + @@ -35,6 +37,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,7 +75,7 @@ - + @@ -59,7 +89,7 @@ - + @@ -73,7 +103,7 @@ - + @@ -87,7 +117,7 @@ - + @@ -101,7 +131,7 @@ - + @@ -115,7 +145,7 @@ - + @@ -129,7 +159,7 @@ - + @@ -143,7 +173,7 @@ - + @@ -157,63 +187,63 @@ - + - + - + - + - + - + - + - + - + @@ -227,7 +257,7 @@ - + @@ -243,7 +273,7 @@ - + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap index 3fd71f59..96647e1a 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap @@ -30,6 +30,9 @@ + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 732d3ae2..07209323 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -23,6 +23,8 @@ Namespace EDMIServiceReference System.SerializableAttribute(), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ScalarResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NonQueryResult)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetDatatableResponse)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetScalarValueResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NewFileResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.SetAttributeValueResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ImportFileResponse)), _ @@ -117,6 +119,12 @@ Namespace EDMIServiceReference 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.GetDatatableRequest)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetDatatableResponse)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.DatabaseType)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.DatabaseName)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetScalarValueRequest)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetScalarValueResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NewFileRequest)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NewFileResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.FileProperties)), _ @@ -163,6 +171,88 @@ Namespace EDMIServiceReference Inherits EDMIServiceReference.BaseResponse End Class + _ + Partial Public Class GetDatatableResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private TableField As System.Data.DataTable + + _ + Public Property Table() As System.Data.DataTable + Get + Return Me.TableField + End Get + Set + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value + Me.RaisePropertyChanged("Table") + End If + End Set + End Property + End Class + + _ + Partial Public Class GetScalarValueResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ScalarField As Object + + _ + Public Property Scalar() As Object + Get + Return Me.ScalarField + End Get + Set + If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then + Me.ScalarField = value + Me.RaisePropertyChanged("Scalar") + End If + End Set + End Property + End Class + _ + Partial Public Class GetDatatableRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionIdField As Integer + + _ + Private DatabaseTypeField As EDMIServiceReference.DatabaseType + + _ + Private NamedDatabaseField As EDMIServiceReference.DatabaseName + + _ + Private SqlCommandField As String + + _ + 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 ConnectionId() As Integer + Get + Return Me.ConnectionIdField + End Get + Set + If (Me.ConnectionIdField.Equals(value) <> true) Then + Me.ConnectionIdField = value + Me.RaisePropertyChanged("ConnectionId") + End If + End Set + End Property + + _ + Public Property DatabaseType() As EDMIServiceReference.DatabaseType + Get + Return Me.DatabaseTypeField + End Get + Set + If (Me.DatabaseTypeField.Equals(value) <> true) Then + Me.DatabaseTypeField = value + Me.RaisePropertyChanged("DatabaseType") + End If + End Set + End Property + + _ + Public Property NamedDatabase() As EDMIServiceReference.DatabaseName + Get + Return Me.NamedDatabaseField + End Get + Set + If (Me.NamedDatabaseField.Equals(value) <> true) Then + Me.NamedDatabaseField = value + Me.RaisePropertyChanged("NamedDatabase") + End If + End Set + End Property + + _ + Public Property SqlCommand() As String + Get + Return Me.SqlCommandField + End Get + Set + If (Object.ReferenceEquals(Me.SqlCommandField, value) <> true) Then + Me.SqlCommandField = value + Me.RaisePropertyChanged("SqlCommand") + 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 + + _ + Public Enum DatabaseType As Integer + + _ + MSSQL = 0 + + _ + Oracle = 1 + + _ + ODBC = 2 + End Enum + + _ + Public Enum DatabaseName As Integer + + _ + None = 0 + + _ + ECM = 1 + + _ + IDB = 2 + End Enum + + _ + Partial Public Class GetScalarValueRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionIdField As Integer + + _ + Private DatabaseTypeField As EDMIServiceReference.DatabaseType + + _ + Private NamedDatabaseField As EDMIServiceReference.DatabaseName + + _ + Private SqlCommandField As String + + _ + 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 ConnectionId() As Integer + Get + Return Me.ConnectionIdField + End Get + Set + If (Me.ConnectionIdField.Equals(value) <> true) Then + Me.ConnectionIdField = value + Me.RaisePropertyChanged("ConnectionId") + End If + End Set + End Property + + _ + Public Property DatabaseType() As EDMIServiceReference.DatabaseType + Get + Return Me.DatabaseTypeField + End Get + Set + If (Me.DatabaseTypeField.Equals(value) <> true) Then + Me.DatabaseTypeField = value + Me.RaisePropertyChanged("DatabaseType") + End If + End Set + End Property + + _ + Public Property NamedDatabase() As EDMIServiceReference.DatabaseName + Get + Return Me.NamedDatabaseField + End Get + Set + If (Me.NamedDatabaseField.Equals(value) <> true) Then + Me.NamedDatabaseField = value + Me.RaisePropertyChanged("NamedDatabase") + End If + End Set + End Property + + _ + Public Property SqlCommand() As String + Get + Return Me.SqlCommandField + End Get + Set + If (Object.ReferenceEquals(Me.SqlCommandField, value) <> true) Then + Me.SqlCommandField = value + Me.RaisePropertyChanged("SqlCommand") + 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 + _ Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + _ + Function ReturnDatatable(ByVal pData As EDMIServiceReference.GetDatatableRequest) As EDMIServiceReference.GetDatatableResponse + + _ + Function ReturnDatatableAsync(ByVal pData As EDMIServiceReference.GetDatatableRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetDatatableResponse) + + _ + Function ReturnScalarValue(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As EDMIServiceReference.GetScalarValueResponse + + _ + Function ReturnScalarValueAsync(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetScalarValueResponse) + + + + + + + + + + + + + + + + + + + diff --git a/Modules.EDMIAPI/DatabaseWithFallback.vb b/Modules.EDMIAPI/DatabaseWithFallback.vb index 63dea9d3..60e145cc 100644 --- a/Modules.EDMIAPI/DatabaseWithFallback.vb +++ b/Modules.EDMIAPI/DatabaseWithFallback.vb @@ -22,7 +22,11 @@ Public Class DatabaseWithFallback 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"} + New Table With { + .DatabaseType = Constants.DatabaseType.IDB, + .TableName = "TBIDB_ATTRIBUTE", + .SQLCommand = "SELECT * FROM TBIDB_ATTRIBUTE" + } } @@ -62,7 +66,7 @@ Public Class DatabaseWithFallback End Try End Function - Private Function GetDatatableFromDatabase(SQLCommand As String, DatabaseType As DatabaseType) + Private Function GetDatatableFromDatabase(SQLCommand As String, DatabaseType As Constants.DatabaseType) Try Select Case DatabaseType Case DatabaseType.ECM diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj index 2090e205..757851e6 100644 --- a/Modules.EDMIAPI/EDMI.API.vbproj +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -125,9 +125,15 @@ Reference.svcmap + + Reference.svcmap + Reference.svcmap + + Reference.svcmap + Reference.svcmap @@ -164,6 +170,15 @@ Designer + + Designer + + + Designer + + + Designer + Designer diff --git a/Service.EDMIService/Methods/Database/DatabaseName.vb b/Service.EDMIService/Methods/Database/DatabaseName.vb new file mode 100644 index 00000000..96d583fb --- /dev/null +++ b/Service.EDMIService/Methods/Database/DatabaseName.vb @@ -0,0 +1,7 @@ +Namespace Methods.Database + Public Enum DatabaseName + None + ECM + IDB + End Enum +End Namespace diff --git a/Service.EDMIService/Methods/Database/DatabaseType.vb b/Service.EDMIService/Methods/Database/DatabaseType.vb new file mode 100644 index 00000000..dc272f5c --- /dev/null +++ b/Service.EDMIService/Methods/Database/DatabaseType.vb @@ -0,0 +1,7 @@ +Namespace Methods.Database + Public Enum DatabaseType + MSSQL + Oracle + ODBC + End Enum +End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableMethod.vb b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableMethod.vb new file mode 100644 index 00000000..f44a8c70 --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableMethod.vb @@ -0,0 +1,70 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging + +Namespace Methods.Database.GetDatatable + ''' + ''' Database method for retrieving a Datatable from an SQL Command and a Connection Id. + ''' + Public Class GetDatatableMethod + Inherits BaseMethod + + Public Sub New(pLogConfig As LogConfig, pDatabaseIDB As MSSQLServer, pDatabaseECM As MSSQLServer, pGlobalState As GlobalState) + MyBase.New(pLogConfig, pDatabaseIDB, pDatabaseECM, pGlobalState) + End Sub + + ''' + ''' Returns a Datatable. If ConnectionId is empty, uses the configured DD_ECM Database. + ''' + Public Function Run(pData As GetDatatableRequest) As GetDatatableResponse + Try + Dim oDatatable As DataTable = Nothing + + Select Case pData.DatabaseType + Case DatabaseType.MSSQL + If pData.NamedDatabase = DatabaseName.None Then + oDatatable = GetDatatableByConnectionId(pData.SqlCommand, pData.ConnectionId) + + ElseIf pData.NamedDatabase = DatabaseName.ECM Then + oDatatable = DatabaseECM.GetDatatable(pData.SqlCommand) + + ElseIf pData.NamedDatabase = DatabaseName.IDB Then + oDatatable = DatabaseIDB.GetDatatable(pData.SqlCommand) + + Else + LogAndThrow($"Unsupported Named Database supplied. SQL Command [{pData.SqlCommand}] was not executed!") + + End If + + Case Else + LogAndThrow($"Only MSSQL Server is supported at this time. SQL Command [{pData.SqlCommand}] was not executed!") + + End Select + + If oDatatable Is Nothing Then + LogAndThrow($"SQL Command did not return any results: [{pData.SqlCommand}]!") + End If + + Return New GetDatatableResponse(oDatatable) + Catch ex As Exception + Logger.Warn("Error occurred while getting database table!") + Return New GetDatatableResponse(ex) + End Try + End Function + + Private Function GetDatatableByConnectionId(pSQLCommand As String, pConnectionId As Integer) As DataTable + If pConnectionId = 0 Then + Return DatabaseECM.GetDatatable(pSQLCommand) + Else + Dim oConnectionString = DatabaseECM.Get_ConnectionStringforID(pConnectionId) + If oConnectionString <> "" Then + + Return DatabaseIDB.GetDatatableWithConnection(pSQLCommand, oConnectionString) + Else + Logger.Warn("ConnectionId [{0}] could not be translated into ConnectionString. Exiting.") + Return Nothing + End If + End If + End Function + End Class + +End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableRequest.vb b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableRequest.vb new file mode 100644 index 00000000..04d7a6e5 --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableRequest.vb @@ -0,0 +1,8 @@ +Namespace Methods.Database.GetDatatable + Public Class GetDatatableRequest + Public Property SqlCommand As String = "" + Public Property ConnectionId As Integer = 0 + Public Property DatabaseType As DatabaseType = DatabaseType.MSSQL + Public Property NamedDatabase As DatabaseName = DatabaseName.ECM + End Class +End Namespace diff --git a/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableResponse.vb b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableResponse.vb new file mode 100644 index 00000000..9de6c5ba --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetDatatable/GetDatatableResponse.vb @@ -0,0 +1,24 @@ +Imports System.Runtime.Serialization + +Namespace Methods.Database.GetDatatable + + + + Public Class GetDatatableResponse + Inherits Messages.BaseResponse + + + Public Property Table As DataTable + + Public Sub New(pTable As DataTable) + MyBase.New() + Table = pTable + End Sub + + Public Sub New(pException As Exception, Optional pDetails As String = "") + MyBase.New(pException, pDetails) + End Sub + End Class + +End Namespace + diff --git a/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueMethod.vb b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueMethod.vb new file mode 100644 index 00000000..0236321c --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueMethod.vb @@ -0,0 +1,70 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging + +Namespace Methods.Database.GetScalarValue + ''' + ''' Database method for retrieving a Single Value from an SQL Command and a Connection Id. + ''' + Public Class GetScalarValueMethod + Inherits BaseMethod + + Public Sub New(pLogConfig As LogConfig, pDatabaseIDB As MSSQLServer, pDatabaseECM As MSSQLServer, pGlobalState As GlobalState) + MyBase.New(pLogConfig, pDatabaseIDB, pDatabaseECM, pGlobalState) + End Sub + + ''' + ''' Returns a Single Value. If ConnectionId is empty, uses the configured DD_ECM Database. + ''' + Public Function Run(pData As GetScalarValueRequest) As GetScalarValueResponse + Try + Dim oDatatable As DataTable = Nothing + + Select Case pData.DatabaseType + Case DatabaseType.MSSQL + If pData.NamedDatabase = DatabaseName.None Then + oDatatable = GetScalarValueByConnectionId(pData.SqlCommand, pData.ConnectionId) + + ElseIf pData.NamedDatabase = DatabaseName.ECM Then + oDatatable = DatabaseECM.GetScalarValue(pData.SqlCommand) + + ElseIf pData.NamedDatabase = DatabaseName.IDB Then + oDatatable = DatabaseIDB.GetScalarValue(pData.SqlCommand) + + Else + LogAndThrow($"Unsupported Named Database supplied. SQL Command [{pData.SqlCommand}] was not executed!") + + End If + + Case Else + LogAndThrow($"Only MSSQL Server is supported at this time. SQL Command [{pData.SqlCommand}] was not executed!") + + End Select + + If oDatatable Is Nothing Then + LogAndThrow($"SQL Command did not return any results: [{pData.SqlCommand}]!") + End If + + Return New GetScalarValueResponse(oDatatable) + Catch ex As Exception + Logger.Warn("Error occurred while getting database scalar value!") + Return New GetScalarValueResponse(ex) + End Try + End Function + + Private Function GetScalarValueByConnectionId(pSQLCommand As String, pConnectionId As Integer) As DataTable + If pConnectionId = 0 Then + Return DatabaseECM.GetScalarValue(pSQLCommand) + Else + Dim oConnectionString = DatabaseECM.Get_ConnectionStringforID(pConnectionId) + If oConnectionString <> "" Then + + Return DatabaseIDB.GetScalarValueWithConnection(pSQLCommand, oConnectionString) + Else + Logger.Warn("ConnectionId [{0}] could not be translated into ConnectionString. Exiting.") + Return Nothing + End If + End If + End Function + End Class + +End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueRequest.vb b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueRequest.vb new file mode 100644 index 00000000..bca7bc9e --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueRequest.vb @@ -0,0 +1,8 @@ +Namespace Methods.Database.GetScalarValue + Public Class GetScalarValueRequest + Public Property SqlCommand As String = "" + Public Property ConnectionId As Integer = 0 + Public Property DatabaseType As DatabaseType = DatabaseType.MSSQL + Public Property NamedDatabase As DatabaseName = DatabaseName.ECM + End Class +End Namespace diff --git a/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueResponse.vb b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueResponse.vb new file mode 100644 index 00000000..c9993276 --- /dev/null +++ b/Service.EDMIService/Methods/Database/GetScalarValue/GetScalarValueResponse.vb @@ -0,0 +1,24 @@ +Imports System.Runtime.Serialization + +Namespace Methods.Database.GetScalarValue + + + + Public Class GetScalarValueResponse + Inherits Messages.BaseResponse + + + Public Property Scalar As Object + + Public Sub New(pScalarValue As Object) + MyBase.New() + Scalar = pScalarValue + End Sub + + Public Sub New(pException As Exception, Optional pDetails As String = "") + MyBase.New(pException, pDetails) + End Sub + End Class + +End Namespace +