From 2800169251c092cca16c5b06fa816beff77a78b9 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 22 Dec 2020 15:34:57 +0100 Subject: [PATCH] EDMI: Add GetAccessRight, Add Init Jobs for EDMIService --- Modules.EDMIAPI/Client.vb | 16 + ...viceReference.AccessRightResult.datasource | 10 + .../DigitalData.Modules.EDMI.API.xsd | 30 ++ ...italData.Services.EDMIService.Messages.xsd | 11 + .../DigitalData.Services.EDMIService.wsdl | 11 + .../DigitalData.Services.EDMIService.xsd | 17 +- .../EDMIServiceReference/Reference.svcmap | 1 + .../EDMIServiceReference/Reference.vb | 284 +++++++++++------- .../EDMIServiceReference/service.wsdl | 9 + Modules.EDMIAPI/EDMI.API.vbproj | 6 + .../Results/AccessRightResult.vb | 3 + Service.EDMIService/Scheduler.vb | 46 ++- 12 files changed, 319 insertions(+), 125 deletions(-) create mode 100644 Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult.datasource create mode 100644 Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.xsd diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index 84f8f1b6..f1f6ad9f 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -151,6 +151,22 @@ Public Class Client End Try End Function + Public Async Function GetAccessRightAsync(UserId As Long, ObjectId As Long) As Task(Of Rights.AccessRight) + Try + Dim oResponse As AccessRightResult = Await _channel.GetAccessRightAsync(UserId, ObjectId) + + 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 + Catch ex As Exception + _logger.Error(ex) + Throw ex + End Try + End Function + ''' ''' Aborts the channel and creates a new connection ''' 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.AccessRightResult.datasource new file mode 100644 index 00000000..6b5713fa --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.EDMIServiceReference.AccessRightResult, 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.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.xsd new file mode 100644 index 00000000..b79942a2 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.xsd @@ -0,0 +1,30 @@ + + + + + + + + + 1 + + + + + + + 2 + + + + + + + 4 + + + + + + + \ 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 943f1763..6bbe67ac 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Messages.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Messages.xsd @@ -1,5 +1,6 @@  + @@ -48,4 +49,14 @@ + + + + + + + + + + \ 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 49a6e750..186b4eab 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl @@ -7,6 +7,7 @@ + @@ -76,6 +77,12 @@ + + + + + + @@ -140,6 +147,10 @@ + + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index 333e0f84..29204c42 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -156,6 +156,21 @@ + + + + + + + + + + + + + + + @@ -184,7 +199,7 @@ - + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap index 8b05869e..873b6dfc 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 e1e3d13a..42e51812 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -23,6 +23,7 @@ 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 @@ -82,182 +83,229 @@ 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) - + '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 - + _ Function EDMIServiceReference_IEDMIService_ImportFile(ByVal request As EDMIServiceReference.DocumentImportRequest) As EDMIServiceReference.DocumentImportResponse Implements EDMIServiceReference.IEDMIService.ImportFile Return MyBase.Channel.ImportFile(request) diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl index 8057e4f2..ab72cafa 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl @@ -140,6 +140,15 @@ + + + + + + + + + diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj index 2e00b6e9..62d7626b 100644 --- a/Modules.EDMIAPI/EDMI.API.vbproj +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -106,6 +106,9 @@ + + Reference.svcmap + Reference.svcmap @@ -124,6 +127,9 @@ Reference.svcmap + + Designer + Designer diff --git a/Service.EDMIService/Results/AccessRightResult.vb b/Service.EDMIService/Results/AccessRightResult.vb index d8640d49..d38239ff 100644 --- a/Service.EDMIService/Results/AccessRightResult.vb +++ b/Service.EDMIService/Results/AccessRightResult.vb @@ -3,9 +3,12 @@ Imports DigitalData.Modules.Language Imports DigitalData.Modules.EDMI.API.Rights Namespace Messages + + Public Class AccessRightResult Inherits BaseResult + Public Property Right As AccessRight = AccessRight.VIEW_ONLY Public Sub New(AccessRight As AccessRight) diff --git a/Service.EDMIService/Scheduler.vb b/Service.EDMIService/Scheduler.vb index 795cd335..bcd86946 100644 --- a/Service.EDMIService/Scheduler.vb +++ b/Service.EDMIService/Scheduler.vb @@ -52,26 +52,49 @@ Public Class Scheduler Dim oTitle As String = oRow.Item("TITLE") Dim oGuid As Integer = oRow.Item("GUID") - Dim oTrigger As ITrigger + Dim oCronTrigger As ITrigger + Dim oInitTrigger As ITrigger + Dim oJob As IJobDetail + Dim oInitJob As IJobDetail + + Dim oJobData As New JobDataMap From { + {"LogConfig", _LogConfig}, + {"MSSQL", _MSSQL}, + {"CronJobId", oGuid}, + {"CronJobTitle", oTitle} + } + Dim oIdentity As String = $"CRON-JOB-{oGuid}" - oTrigger = TriggerBuilder.Create(). - WithIdentity(oIdentity, JOB_GROUP). + oCronTrigger = TriggerBuilder.Create(). + WithIdentity(oIdentity & "-TRIGGER", JOB_GROUP). WithCronSchedule(oDefinition). Build() oJob = JobBuilder.Create(Of DatatableJob)(). WithIdentity(oIdentity, JOB_GROUP). - UsingJobData(New JobDataMap From { - {"LogConfig", _LogConfig}, - {"MSSQL", _MSSQL}, - {"CronJobId", oGuid}, - {"CronJobTitle", oTitle} - }). + UsingJobData(oJobData). Build() - Await _Scheduler.ScheduleJob(oJob, oTrigger) + Await _Scheduler.ScheduleJob(oJob, oCronTrigger) + + ' Also create variant of the job that runs immediately, once + + Dim oInitIdentity As String = $"CRON-JOB-INIT-{oGuid}" + + oInitTrigger = TriggerBuilder.Create(). + WithIdentity(oInitIdentity & "-TRIGGER", JOB_GROUP). + StartNow(). + Build() + + oInitJob = JobBuilder.Create(Of DatatableJob)(). + WithIdentity(oInitIdentity, JOB_GROUP). + UsingJobData(oJobData). + Build() + + Await _Scheduler.ScheduleJob(oInitJob, oInitTrigger) + _Logger.Debug("Scheduled a new job for Cron Job [{0}]", oTitle) Next Else @@ -83,6 +106,9 @@ Public Class Scheduler End Try End Sub + + + Public Async Function GetCronJobs() As Task(Of DataTable) Try Dim oSQL As String = "SELECT * FROM TBAPPSERV_CRON_JOB WHERE ACTIVE = 1"