diff --git a/GUIs.Common/DocumentResultList/frmDocumentResultList.vb b/GUIs.Common/DocumentResultList/frmDocumentResultList.vb index 17ec85b7..57d774bc 100644 --- a/GUIs.Common/DocumentResultList/frmDocumentResultList.vb +++ b/GUIs.Common/DocumentResultList/frmDocumentResultList.vb @@ -210,16 +210,29 @@ Public Class frmDocumentResultList End Select End Sub - Private Sub GridView_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs) + Private Async Sub GridView_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs) _ActiveRowHandle = e.FocusedRowHandle - DocumentViewer1.CloseDocument() + If _IsLegacy Then + If e.FocusedRowHandle >= 0 Then + DocumentViewer1.CloseDocument() - If e.FocusedRowHandle >= 0 Then - Dim oRow = sender.GetDataRow(e.FocusedRowHandle) - Dim oFullPath = oRow.Item(COLUMN_FILEPATH) + Dim oRow = sender.GetDataRow(e.FocusedRowHandle) + Dim oFullPath = oRow.Item(COLUMN_FILEPATH) + + DocumentViewer1.LoadFile(oFullPath) + End If + + Else + If e.FocusedRowHandle >= 0 Then + DocumentViewer1.CloseDocument() + + Dim oRow = sender.GetDataRow(e.FocusedRowHandle) + Dim oObjectId = oRow.Item(COLUMN_DOCID) + + Dim oInfo = Await _IDBClient.GetDocumentInfo(_Environment.User.UserId, oObjectId) + End If - DocumentViewer1.LoadFile(oFullPath) End If End Sub diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index f1f6ad9f..4ed0ca7e 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -1,5 +1,6 @@ Imports DigitalData.Modules.Logging Imports DigitalData.Modules.EDMI.API.EDMIServiceReference +Imports DigitalData.Modules.EDMI.API.Rights Imports System.ServiceModel Imports System.IO @@ -17,6 +18,11 @@ Public Class Client Public Datatable As DataTable End Class + Public Class DocumentInfo + Public FullPath As String + Public AccessRight As AccessRight + End Class + ''' ''' Creates a new EDMIAPI object ''' @@ -151,16 +157,18 @@ Public Class Client End Try End Function - Public Async Function GetAccessRightAsync(UserId As Long, ObjectId As Long) As Task(Of Rights.AccessRight) + Public Async Function GetDocumentInfo(UserId As Long, ObjectId As Long) As Task(Of DocumentInfo) Try - Dim oResponse As AccessRightResult = Await _channel.GetAccessRightAsync(UserId, ObjectId) + Dim oParams = New DocumentInfoRequest With { + .ObjectId = ObjectId, + .UserId = UserId + } + Dim oResponse As DocumentInfoResponse = Await _channel.GetFileInfoByObjectIdAsync(oParams) - If oResponse.OK Then - Return oResponse.Right - Else - _logger.Warn("Rights from server could not be fetched for UserId [{0}] on Object [{1}]. Returning default Right View", UserId, ObjectId) - Return Rights.AccessRight.VIEW_ONLY - End If + Return New DocumentInfo With { + .AccessRight = oResponse.FileRight, + .FullPath = oResponse.FullPath + } Catch ex As Exception _logger.Error(ex) Throw ex diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.DocumentInfoResponse.datasource b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.DocumentInfoResponse.datasource new file mode 100644 index 00000000..0f899425 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.DocumentInfoResponse.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.EDMIServiceReference.DocumentInfoResponse, 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.AccessRightResult.datasource b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.RightsAccessRight.datasource similarity index 67% rename from Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult.datasource rename to Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.RightsAccessRight.datasource index 6b5713fa..b7dc0d4c 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult.datasource +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.RightsAccessRight.datasource @@ -5,6 +5,6 @@ Renaming the file extension or editing the content of this file may cause the file to be unrecognizable by the program. --> - - DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult, Connected Services.EDMIServiceReference.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + DigitalData.Modules.EDMI.API.EDMIServiceReference.RightsAccessRight, 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.Messages.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Messages.xsd index 6bbe67ac..943f1763 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Messages.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Messages.xsd @@ -1,6 +1,5 @@  - @@ -49,14 +48,4 @@ - - - - - - - - - - \ 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 186b4eab..0a4f00a0 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl @@ -7,8 +7,8 @@ - + @@ -77,12 +77,6 @@ - - - - - - @@ -98,6 +92,12 @@ + + + + + + @@ -147,10 +147,6 @@ - - - - @@ -159,6 +155,10 @@ + + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index 29204c42..d67b55ef 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -2,6 +2,7 @@ + @@ -156,21 +157,6 @@ - - - - - - - - - - - - - - - @@ -199,11 +185,27 @@ - + + + + + + + + + + + + + + + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap index 873b6dfc..317fffe7 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap @@ -29,8 +29,8 @@ - + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 42e51812..1b1c5bcc 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -23,7 +23,6 @@ Namespace EDMIServiceReference System.SerializableAttribute(), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ScalarResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NonQueryResult)), _ - System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.AccessRightResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.TableResult))> _ Partial Public Class BaseResult Inherits Object @@ -83,229 +82,206 @@ Namespace EDMIServiceReference End If End Sub End Class - - + + _ Partial Public Class ScalarResult Inherits EDMIServiceReference.BaseResult - - + + _ 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 + 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 NonQueryResult Inherits EDMIServiceReference.BaseResult End Class - - - Partial Public Class AccessRightResult - Inherits EDMIServiceReference.BaseResult - - - Private RightField As EDMIServiceReference.RightsAccessRight - - - Public Property Right() As EDMIServiceReference.RightsAccessRight - Get - Return Me.RightField - End Get - Set - If (Me.RightField.Equals(Value) <> True) Then - Me.RightField = Value - Me.RaisePropertyChanged("Right") - End If - End Set - End Property - End Class - - + + _ Partial Public Class TableResult Inherits EDMIServiceReference.BaseResult - - + + _ 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 + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value Me.RaisePropertyChanged("Table") End If End Set End Property End Class - - + + _ Public Enum RightsAccessRight As Integer - - + + _ VIEW_ONLY = 1 - - + + _ VIEW_EXPORT = 2 - - + + _ FULL = 4 End Enum - - + + _ Public Interface IEDMIService - - + + _ Function Heartbeat() As Boolean - - + + _ Function HeartbeatAsync() As System.Threading.Tasks.Task(Of Boolean) - - + + _ Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult - - + + _ Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) - - + + _ Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult - - + + _ Function ReturnDatatable_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) - - + + _ Function ReturnScalar_Firebird(ByVal SQL As String) As EDMIServiceReference.ScalarResult - - + + _ Function ReturnScalar_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) - - + + _ Function ExecuteNonQuery_Firebird(ByVal SQL As String) As EDMIServiceReference.NonQueryResult - - + + _ Function ExecuteNonQuery_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) - - + + _ Function ReturnDatatable_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.TableResult - - + + _ Function ReturnDatatable_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) - - + + _ Function ReturnScalar_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.ScalarResult - - + + _ Function ReturnScalar_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) - - + + _ Function ExecuteNonQuery_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.NonQueryResult - - + + _ Function ExecuteNonQuery_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) - - + + _ Function ReturnDatatable_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.TableResult - - + + _ Function ReturnDatatable_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) - - + + _ Function ReturnScalar_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.ScalarResult - - + + _ Function ReturnScalar_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) - - + + _ Function ExecuteNonQuery_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.NonQueryResult - - + + _ Function ExecuteNonQuery_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) - - - Function GetAccessRight(ByVal UserId As Long, ByVal ObjectId As Long) As EDMIServiceReference.AccessRightResult - - - Function GetAccessRightAsync(ByVal UserId As Long, ByVal ObjectId As Long) As System.Threading.Tasks.Task(Of EDMIServiceReference.AccessRightResult) - + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Wrappername (DocumentImportRequest) von Nachricht "DocumentImportRequest" nicht mit dem Standardwert (ImportFile) übereinstimmt. - + _ 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) - + + _ + Function GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse + + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang mehrere Rückgabewerte aufweist. + _ + 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 - - + + _ Function ListFilesForUserAsync(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) End Interface - + _ + Partial Public Class DocumentInfoRequest + + _ + Public ObjectId As Long + + _ + Public UserId As Long + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal ObjectId As Long, ByVal UserId As Long) + MyBase.New + Me.ObjectId = ObjectId + Me.UserId = UserId + End Sub + End Class + + _ + Partial Public Class DocumentInfoResponse + + _ + Public FileRight As EDMIServiceReference.RightsAccessRight + + _ + Public FullPath As String + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal FileRight As EDMIServiceReference.RightsAccessRight, ByVal FullPath As String) + MyBase.New + Me.FileRight = FileRight + Me.FullPath = FullPath + End Sub + End Class + _ Function EDMIServiceReference_IEDMIService_ImportFile(ByVal request As EDMIServiceReference.DocumentImportRequest) As EDMIServiceReference.DocumentImportResponse Implements EDMIServiceReference.IEDMIService.ImportFile Return MyBase.Channel.ImportFile(request) @@ -614,6 +626,24 @@ Namespace EDMIServiceReference Return CType(Me,EDMIServiceReference.IEDMIService).GetFileByObjectIdAsync(inValue) End Function + _ + Function EDMIServiceReference_IEDMIService_GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectId + Return MyBase.Channel.GetFileInfoByObjectId(request) + End Function + + Public Function GetFileInfoByObjectId(ByVal ObjectId As Long, ByVal UserId As Long, ByRef FullPath As String) As EDMIServiceReference.RightsAccessRight + Dim inValue As EDMIServiceReference.DocumentInfoRequest = New EDMIServiceReference.DocumentInfoRequest() + inValue.ObjectId = ObjectId + inValue.UserId = UserId + Dim retVal As EDMIServiceReference.DocumentInfoResponse = CType(Me,EDMIServiceReference.IEDMIService).GetFileInfoByObjectId(inValue) + FullPath = retVal.FullPath + Return retVal.FileRight + End Function + + Public Function GetFileInfoByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentInfoRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentInfoResponse) Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectIdAsync + Return MyBase.Channel.GetFileInfoByObjectIdAsync(request) + End Function + _ Function EDMIServiceReference_IEDMIService_ListFilesForUser(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As EDMIServiceReference.DocumentListResponse Implements EDMIServiceReference.IEDMIService.ListFilesForUser Return MyBase.Channel.ListFilesForUser(request) diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl index ab72cafa..1f3071f6 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl @@ -140,15 +140,6 @@ - - - - - - - - - @@ -168,6 +159,15 @@ + + + + + + + + + diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj index 62d7626b..bb970afc 100644 --- a/Modules.EDMIAPI/EDMI.API.vbproj +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -106,10 +106,10 @@ - + Reference.svcmap - + Reference.svcmap @@ -121,6 +121,9 @@ Reference.svcmap + + Reference.svcmap + Reference.svcmap diff --git a/Service.EDMIService/EDMIService.vb b/Service.EDMIService/EDMIService.vb index 9302901b..6bbe3664 100644 --- a/Service.EDMIService/EDMIService.vb +++ b/Service.EDMIService/EDMIService.vb @@ -104,7 +104,7 @@ Public Class EDMIService End If Catch ex As Exception _Logger.Error(ex) - Return New TableResult(ex.Message) + Throw New FaultException(ex.Message) End Try End Function #End Region @@ -269,7 +269,7 @@ Public Class EDMIService Dim oObjectId = MSSQL_IDB.GetScalarValue(oCommand, "@IDB_OBJ_ID") - Return New Messages.DocumentImportResponse() With {.ObjectId = oObjectId} + Return New DocumentImportResponse() With {.ObjectId = oObjectId} Catch ex As Exception _Logger.Error(ex) Throw New FaultException(ex.Message) @@ -315,12 +315,15 @@ Public Class EDMIService } Return oMessage + Catch ex As IOException _Logger.Error(ex) Throw New FaultException($"Object [{Data.ObjectId}] could not be streamed!") + Catch ex As Exception _Logger.Error(ex) Throw New FaultException(ex.Message) + End Try End Function @@ -333,47 +336,82 @@ Public Class EDMIService Return New DocumentListResponse() With { .Datatable = oDatatable } + Catch ex As Exception _Logger.Error(ex) Throw New FaultException(ex.Message) + End Try End Function -#End Region -#Region "=== Access Rights ===" - Public Function GetAccessRight(UserId As Long, ObjectId As Long) As AccessRightResult Implements IEDMIService.GetAccessRight + Public Function GetFileInfoByObjectId(Data As DocumentInfoRequest) As DocumentInfoResponse Implements IEDMIService.GetFileInfoByObjectId Try - Dim oTableName As String = "TBIDB_ACCESSRIGHT" + Dim oAccessRight = GetAccessRight(Data.UserId, Data.ObjectId) + Dim oFullPath = GetFullPath(Data.ObjectId) - If Not GlobalState.TableStore.Tables.Contains(oTableName) Then - _Logger.Warn("GetAccessRight: Access right table does not exist!") - Return New AccessRightResult(AccessRight.VIEW_ONLY) - End If + Return New DocumentInfoResponse With { + .FileRight = oAccessRight, + .FullPath = oFullPath + } - 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 New AccessRightResult(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) - End If - - Dim oRow As DataRow = oRows.First() - Dim oRightAsInt = oRow.Item("ACCESSRIGHT") - - oRight = Utils.ToEnum(Of AccessRight)(oRightAsInt) - End If - - Return New AccessRightResult(oRight) Catch ex As Exception - _Logger.Warn("GetAccessRight: Exception while getting access right for user [{0}] on object [{1}]", UserId, ObjectId) _Logger.Error(ex) - Return New AccessRightResult(ex) + Throw New FaultException(ex.Message) + 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) + End If + + Dim oRow As DataRow = oRows.First() + Dim oRightAsInt = oRow.Item("ACCESSRIGHT") + + oRight = Utils.ToEnum(Of AccessRight)(oRightAsInt) + End If + + Return oRight + End Function #End Region End Class \ No newline at end of file diff --git a/Service.EDMIService/IEDMIService.vb b/Service.EDMIService/IEDMIService.vb index e15fe05f..7a76c450 100644 --- a/Service.EDMIService/IEDMIService.vb +++ b/Service.EDMIService/IEDMIService.vb @@ -50,11 +50,6 @@ Interface IEDMIService Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult #End Region -#Region "Access Rights" - - Function GetAccessRight(UserId As Long, ObjectId As Long) As AccessRightResult -#End Region - #Region "Document (New)" Function ImportFile(Data As DocumentImportRequest) As DocumentImportResponse @@ -62,6 +57,9 @@ Interface IEDMIService 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/Messages.vb b/Service.EDMIService/Results/Messages.vb index bda16d0b..aa5c8d00 100644 --- a/Service.EDMIService/Results/Messages.vb +++ b/Service.EDMIService/Results/Messages.vb @@ -1,6 +1,7 @@ Imports System.IO Imports System.Runtime.Serialization Imports System.ServiceModel +Imports DigitalData.Modules.EDMI.API.Rights Namespace Messages @@ -43,6 +44,26 @@ Namespace Messages End Class #End Region +#Region "DocumentInfo" + + Public Class DocumentInfoRequest + + Public ObjectId As Long + + + Public UserId As Long + End Class + + + Public Class DocumentInfoResponse + + Public FullPath As String + + + Public FileRight As AccessRight + End Class +#End Region + #Region "DocumentList"