diff --git a/GUIs.ZooFlow/ClassIDBData.vb b/GUIs.ZooFlow/ClassIDBData.vb index b7e77477..25f11204 100644 --- a/GUIs.ZooFlow/ClassIDBData.vb +++ b/GUIs.ZooFlow/ClassIDBData.vb @@ -144,11 +144,11 @@ Public Class ClassIDBData oOldAttributeResult = GetVariableValue(pAttributeName, oIDBTyp) oTypeOldResult = oOldAttributeResult.GetType.ToString If oTypeOldResult = "System.Data.DataTable" Then - Dim myOldValues As DataTable = oOldAttributeResult - If myOldValues.Rows.Count > 1 Then + Dim oOldValues As DataTable = oOldAttributeResult + If oOldValues.Rows.Count > 1 Then 'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues - For Each oOldValueRow As DataRow In myOldValues.Rows + For Each oOldValueRow As DataRow In oOldValues.Rows Dim oExists As Boolean = False For Each oNewValueRow As DataRow In oDTMyNewValues.Rows Dim oInfo1 = $"Checking oldValue[{oOldValueRow.Item(0)}] vs NewValue [{oNewValueRow.Item(1)}]" diff --git a/GUIs.ZooFlow/ClassInit.vb b/GUIs.ZooFlow/ClassInit.vb index 6b1da8d5..9c727941 100644 --- a/GUIs.ZooFlow/ClassInit.vb +++ b/GUIs.ZooFlow/ClassInit.vb @@ -45,12 +45,12 @@ Public Class ClassInit ' === Init Schritte definieren _Loader.AddStep("Initializing Database (1/2)", AddressOf InitializeDatabase, True) - _Loader.AddStep("Initializing Service", AddressOf InitializeService, True) + _Loader.AddStep("Initializing EDMI Service", AddressOf InitializeService, True) _Loader.AddStep("Initializing Database (2/2)", AddressOf InitializeDatabaseWithFallback, True) - _Loader.AddStep("Initializing User..", AddressOf InitializeUser, True) - _Loader.AddStep("Initializing Language..", AddressOf InitializeLanguage, False) - _Loader.AddStep("Loading 3rd-party licenses..", AddressOf Initialize3rdParty, False) - _Loader.AddStep("Loading Basic Configs..", AddressOf InitBasicData, False) + _Loader.AddStep("Initializing User", AddressOf InitializeUser, True) + _Loader.AddStep("Initializing Language", AddressOf InitializeLanguage, False) + _Loader.AddStep("Initializing 3rd-party licenses", AddressOf Initialize3rdParty, False) + _Loader.AddStep("Initializing Basic Config", AddressOf InitBasicData, False) ' === Init Schritte definieren AddHandler _Loader.ProgressChanged, AddressOf ProgressChanged @@ -156,8 +156,7 @@ Public Class ClassInit Private Sub Initialize3rdParty(MyApplication As My.MyApplication) Try Dim oSql = "Select LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'" - Dim oDatatable As DataTable = _DataASorDB.GetDatatable("DD_ECM", oSql, "TBDD_3RD_PARTY_MODULES", "", "") - + Dim oDatatable As DataTable = My.DatabaseECM.GetDatatable(oSql) If oDatatable.Rows.Count = 0 Then Throw New InitException("Konfiguration konnte nicht geladen werden!") diff --git a/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb b/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb index b908d151..f6f4643c 100644 --- a/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb +++ b/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb @@ -1,15 +1,16 @@ -Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.EDMI.API +Imports DigitalData.Modules.Logging Namespace ClipboardWatcher Public Class ClassProfileLoader Private ReadOnly LogConfig As LogConfig Private ReadOnly Logger As Logger - Private Database As ClassDataASorDB + Private ReadOnly Database As DatabaseWithFallback - Public Sub New(LogConfig As LogConfig, AppServerOrDB As ClassDataASorDB) + Public Sub New(LogConfig As LogConfig, Database As DatabaseWithFallback) Me.LogConfig = LogConfig Me.Logger = LogConfig.GetLogger() - Me.Database = AppServerOrDB + Me.Database = Database End Sub Public Function LoadProfiles() As Boolean @@ -22,10 +23,10 @@ Namespace ClipboardWatcher Dim oWindowSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_WINDOW T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" Dim oControlSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_CONTROL T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" - Dim oUserProfiles = Database.GetDatatable("DD_ECM", oProfileSQL, "VWCW_USER_PROFILE", "", "", "DB") - Dim oProfileProcesses = Database.GetDatatable("DD_ECM", oProcessSQL, "TBCW_PROFILE_PROCESS", "", "", "DB") - Dim oProfileWindows = Database.GetDatatable("DD_ECM", oWindowSQL, "VWCW_PROFILE_REL_WINDOW", "", "", "DB") - Dim oProfileControls = Database.GetDatatable("DD_ECM", oControlSQL, "VWCW_PROFILE_REL_CONTROL", "", "", "DB") + Dim oUserProfiles = Database.GetDatatable("VWCW_USER_PROFILE", oProfileSQL, Constants.DatabaseType.ECM) + Dim oProfileProcesses = Database.GetDatatable("VWCW_PROFILE_REL_WINDOW", oProcessSQL, Constants.DatabaseType.ECM) + Dim oProfileWindows = Database.GetDatatable("VWCW_PROFILE_REL_WINDOW", oWindowSQL, Constants.DatabaseType.ECM) + Dim oProfileControls = Database.GetDatatable("VWCW_PROFILE_REL_CONTROL", oControlSQL, Constants.DatabaseType.ECM) My.Application.ClipboardWatcher.UserProfiles = oUserProfiles My.Application.ClipboardWatcher.ProfileProcesses = oProfileProcesses diff --git a/GUIs.ZooFlow/frmFlowForm.vb b/GUIs.ZooFlow/frmFlowForm.vb index 1c780955..e981e38e 100644 --- a/GUIs.ZooFlow/frmFlowForm.vb +++ b/GUIs.ZooFlow/frmFlowForm.vb @@ -247,7 +247,7 @@ Public Class frmFlowForm AddHandler HotkeyClass.HotKeyPressed, AddressOf HotkeyClass_HotKeyPressed - ProfileLoader = New ClassProfileLoader(My.LogConfig, AppServerOrDB) + ProfileLoader = New ClassProfileLoader(My.LogConfig, My.Database) ProfileLoader.LoadProfiles() Catch ex As Exception ShowErrorMessage(ex) diff --git a/GUIs.ZooFlow/frmtest.vb b/GUIs.ZooFlow/frmtest.vb index 0ca0bb49..3faa371e 100644 --- a/GUIs.ZooFlow/frmtest.vb +++ b/GUIs.ZooFlow/frmtest.vb @@ -101,7 +101,7 @@ Public Class frmtest DateTimePicker1.Value, cmbObjectStoreType.Text, "DEFAULT", - New Client.ImportFileOptions With { + New Client.NewFileOptions With { .KeepExtension = True } ) diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index bc965558..dfc067f9 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -1,8 +1,10 @@ -Imports DigitalData.Modules.Logging +Imports System.IO +Imports System.ServiceModel +Imports DigitalData.Modules.EDMI.API.Constants Imports DigitalData.Modules.EDMI.API.EDMIServiceReference Imports DigitalData.Modules.EDMI.API.Rights -Imports System.ServiceModel -Imports System.IO +Imports DigitalData.Modules.Language.Utils +Imports DigitalData.Modules.Logging Public Class Client Private Const INVALID_OBEJCT_ID As Long = 0 @@ -105,12 +107,7 @@ Public Class Client End Try End Function - ''' - ''' Import options for NewFileAsync. Contains default values for all options - ''' - Public Class ImportFileOptions - Public KeepExtension As Boolean = True - End Class + ''' ''' TODO: Creates a new object @@ -120,6 +117,15 @@ Public Class Client Throw New NotImplementedException() End Function + ''' + ''' Import options for NewFileAsync. Contains default values for all options + ''' + Public Class NewFileOptions + Public KeepExtension As Boolean = True + Public Username As String = String.Empty + Public Language As String = String.Empty + End Class + ''' ''' Imports a file from a filepath, creating a IDB ObjectId and Filesystem Object ''' @@ -132,8 +138,12 @@ Public Class Client ''' When local filepath was not found ''' When there was a error in the Service ''' The ObjectId of the newly generated filesystem object - Public Async Function NewFileAsync(pFilePath As String, pAddedWho As String, pAddedWhen As Date, pObjectStoreType As String, pBusinessEntity As String, pImportOptions As ImportFileOptions) As Task(Of Long) + Public Async Function NewFileAsync(pFilePath As String, pAddedWho As String, pAddedWhen As Date, pObjectStoreType As String, pBusinessEntity As String, Optional pImportOptions As NewFileOptions = Nothing) As Task(Of Long) Try + If pImportOptions Is Nothing Then + pImportOptions = New NewFileOptions() + End If + If File.Exists(pFilePath) = False Then Throw New FileNotFoundException("ImportFileAsync: Path does not exist") End If @@ -189,90 +199,288 @@ Public Class Client End Try End Function - Public Function CreateObjectId(pKindType As String, pWho As String, pBusinessEntity As String) As Long - Try - Dim oResponse = _channel.NewObjectId(New NewObjectIdRequest With { - .KindType = pKindType, - .BusinessEntity = pBusinessEntity, - .Who = pWho - }) - Return oResponse.ObjectId - Catch ex As Exception - _logger.Error(ex) - Throw ex - End Try - End Function + Public Class SetVariableValueOptions + Public CheckDeleted As Boolean = False + Public Username As String = String.Empty + Public Language As String = String.Empty + End Class - Public Function CreateFileStoreObject(pObjectId As Long, pStoreType As String, pDate As String, pExtension As String, pKeepExtension As String) As String + ''' + ''' Sets a value to an attribute + ''' + ''' + ''' + ''' + ''' + ''' + Public Function SetVariableValue(pObjectId As Long, pAttributeName As String, pAttributeType As AttributeType, pValue As Object, Optional pOptions As SetVariableValueOptions = Nothing) As Boolean Try - ' Remove dot in Extension - If pExtension.StartsWith(".") Then - pExtension = pExtension.Substring(1) + If pOptions Is Nothing Then + pOptions = New SetVariableValueOptions() End If - Dim oArgs As New NewFileObjectRequest With { - .ObjectId = pObjectId, - .StoreType = pStoreType, - .DateImported = pDate, - .Extension = pExtension, - .KeepExtension = pKeepExtension - } - Dim oResponse = _channel.NewFileObject(oArgs) - Return oResponse.FileObjectPath - Catch ex As Exception - _logger.Error(ex) - Throw ex - End Try - End Function + Dim oLanguage = NotNull(pOptions.Language, GetUserLanguage()) + Dim oUsername = NotNull(pOptions.Username, Environment.UserName) - Public Async Function ImportFileObjectAsync(pContent As Byte(), pWho As String, pObjectId As Long, pObjectStoreType As String, pFileObjectPath As String) As Task(Of Boolean) - Try - Dim oData As New ImportFileIntoFileObjectRequest() With { - .Contents = pContent, - .Who = pWho, - .FilePath = pFileObjectPath, - .ObjectId = pObjectId, - .ObjectStoreType = pObjectStoreType - } + Dim oType = pValue.GetType.Name + + If oType = GetType(DataTable).Name Then + Dim oDTMyNewValues As DataTable = pValue + Dim oOldAttributeResult As Object + Dim oTypeOldResult As Object + + If pOptions.CheckDeleted = True Then + oOldAttributeResult = GetVariableValue(pAttributeName, pAttributeType) + oTypeOldResult = oOldAttributeResult.GetType.Name + If oTypeOldResult = GetType(DataTable).Name Then + Dim oOldValues As DataTable = oOldAttributeResult + If oOldValues.Rows.Count > 1 Then + + 'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues + For Each oOldValueRow As DataRow In oOldValues.Rows + Dim oExists As Boolean = False + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oInfo = $"Checking oldValue[{oOldValueRow.Item(0)}] vs NewValue [{oNewValueRow.Item(1)}]" + If oNewValueRow.Item(1).ToString.ToUpper = oOldValueRow.Item(0).ToString.ToUpper Then + oExists = True + Exit For + End If + Next + + If oExists = False Then + Dim oInfo = $"Value [{oOldValueRow.Item(0)}] no longer existing in Vector-Attribute [{pAttributeName}] - will be deleted!" + _logger.Debug(oInfo) + SetVariableValue(pObjectId, My.Application.Globix.CURRENT_PROFILE_LOG_INDEX, AttributeType.Varchar, oInfo) + DeleteTermObjectFromMetadata(pObjectId, pAttributeName, oOldValueRow.Item(0)) + End If + + Next + End If + Else + If oDTMyNewValues.Rows.Count > 1 Then + Dim oExists As Boolean = False + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oInfo1 = $"Checking oldValue[{oOldAttributeResult}] vs NewValue [{oNewValueRow.Item(1)}]" + If oNewValueRow.Item(1).ToString.ToUpper = oOldAttributeResult.ToString.ToUpper Then + oExists = True + Exit For + End If + Next + If oExists = False Then + Dim oInfo = $"Value [{oOldAttributeResult}] no longer existing in Vector-Attribute [{pAttributeName}] - will be deleted!" + _logger.Debug(oInfo) + SetVariableValue(pObjectId, My.Application.Globix.CURRENT_PROFILE_LOG_INDEX, AttributeType.Varchar, oInfo) + DeleteTermObjectFromMetadata(pObjectId, pAttributeName, oOldAttributeResult) + End If + Else + Dim oInfo = $"Value [{oOldAttributeResult}] of Attribute [{pAttributeName}] obviously was updated during runtime - will be deleted!" + _logger.Debug(oInfo) + SetVariableValue(pObjectId, My.Application.Globix.CURRENT_PROFILE_LOG_INDEX, AttributeType.Varchar, oInfo) + DeleteTermObjectFromMetadata(pObjectId, pAttributeName, oOldAttributeResult) + End If + + End If + + End If + + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oSuccess As Boolean = False + Dim oSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT + EXEC PRIDB_NEW_OBJ_DATA({pObjectId}, '{pAttributeName}', '{oUsername}', '{oNewValueRow.Item(1)}', '{oLanguage}', 0, @OMD_ID = @NEW_OBJ_MD_ID OUTPUT)" + + Dim oResult = _channel.ExecuteNonQuery_MSSQL_IDB(oSQL) + + If Not oResult.OK Then + Return False + End If + Next + Return True + Else + Dim oSql = $"DECLARE @NEW_OBJ_MD_ID BIGINT + EXEC PRIDB_NEW_OBJ_DATA({pObjectId}, '{pAttributeName}', '{oUsername}', '{pValue}', '{oLanguage}', 0, @OMD_ID = @NEW_OBJ_MD_ID OUTPUT)" + + Dim oResult = _channel.ExecuteNonQuery_MSSQL_IDB(oSql) + + Return oResult.OK + End If - Dim oResponse = Await _channel.ImportFileIntoFileObjectAsync(oData) - Return oResponse.Result Catch ex As Exception _logger.Error(ex) Return False End Try End Function - Public Async Function GetFileByObjectIdAsync(ObjectId As Long) As Task(Of StreamedFile) - Try - Dim oData As New DocumentStreamRequest() With {.ObjectId = ObjectId} - Dim oResponse As DocumentStreamResponse = Await _channel.GetFileByObjectIdAsync(oData) - Dim oMemoryStream As New MemoryStream() - oResponse.FileContents.CopyTo(oMemoryStream) - oMemoryStream.Position = 0 + Public Class GetVariableValueOptions + Public FromIDB As Boolean = False + Public Username As String = String.Empty + Public Language As String = String.Empty + End Class - Return New StreamedFile() With { - .Stream = oMemoryStream, - .FileName = oResponse.FileName - } + Public Function GetVariableValue(pObjectId As Long, pAttributeName As String, pAttributeType As AttributeType, Optional pOptions As GetVariableValueOptions = Nothing) As Object + If pOptions Is Nothing Then + pOptions = New GetVariableValueOptions() + End If + + Dim oLanguage = NotNull(pOptions.Language, GetUserLanguage()) + Dim oUsername = NotNull(pOptions.Username, Environment.UserName) + + Try + Dim oSingleAttribute As Boolean + Select Case pAttributeType + Case AttributeType.VectorInteger + oSingleAttribute = False + Case AttributeType.VectorString + oSingleAttribute = False + Case Else + oSingleAttribute = True + End Select + + Dim oAttributeValue As Object = Nothing + + If Not IsNothing(My.Tables.DTIDB_DOC_DATA) Then + If oSingleAttribute = True And My.Tables.DTIDB_DOC_DATA.Rows.Count = 1 And pOptions.FromIDB = False Then + Try + If pAttributeName = "IDBCreatedWhen" Then + pAttributeName = "ADDED_WHEN" + ElseIf pAttributeName = "IDBCreatedWho" Then + pAttributeName = "ADDED_WHO" + ElseIf pAttributeName = "IDBChangedWhen" Then + pAttributeName = "CHANGED_WHEN" + ElseIf pAttributeName = "IDBChangedWho" Then + pAttributeName = "CHANGED_WHO" + End If + + oAttributeValue = My.Tables.DTIDB_DOC_DATA.Rows(0).Item(pAttributeName) + Catch ex As Exception + _logger.Debug($"Error getting Attribute from IDB_DT_DOC_DATA: {ex.Message}") + End Try + + End If + End If + + If Not IsNothing(oAttributeValue) Then + Return oAttributeValue + Else + _logger.Debug($"oAttributeValue for Attribute [{pAttributeName}] is so far nothing..Now trying FNIDB_PM_GET_VARIABLE_VALUE ") + End If + Dim oFNSQL = $"SELECT * FROM [dbo].[FNIDB_PM_GET_VARIABLE_VALUE] ({pObjectId},'{pAttributeName}','{oLanguage}',CONVERT(BIT,'0'))" + Dim oDatatable As TableResult = _channel.ReturnDatatable_MSSQL_IDB(oFNSQL) + + If oDatatable.OK = False Then + _logger.Warn(oDatatable.ErrorMessage) + Return Nothing + End If + + If oDatatable.Table.Rows.Count = 1 Then + oAttributeValue = oDatatable.Table.Rows.Item(0).Item(0) + End If + Return oAttributeValue Catch ex As Exception _logger.Error(ex) - Throw ex + Return Nothing End Try End Function - Public Async Function ListFilesForUserAsync() As Task(Of FileList) + Private Function DeleteTermObjectFromMetadata(pObjectId As Long, pAttributeName As String, pTerm2Delete As String, Optional pUsername As String = "", Optional pLanguage As String = "") As Boolean Try - Dim oResponse As DocumentListResponse = Await _channel.ListFilesForUserAsync(New ListFilesForUserRequest()) - Return New FileList() With { - .Datatable = oResponse.Datatable - } + Dim oLanguage = NotNull(pLanguage, GetUserLanguage()) + Dim oUsername = NotNull(pUsername, Environment.UserName) + + Dim oIdIsForeign As Integer = 1 + Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {pObjectId},'{pAttributeName}','{pTerm2Delete}','{oUsername}','{oLanguage}',{oIdIsForeign}" + Dim oResult = _channel.ExecuteNonQuery_MSSQL_IDB(oDELSQL) + + Return oResult.OK Catch ex As Exception _logger.Error(ex) - Throw ex + Return False End Try End Function + 'Public Function CreateObjectId(pKindType As String, pWho As String, pBusinessEntity As String) As Long + ' Try + ' Dim oResponse = _channel.NewObjectId(New NewObjectIdRequest With { + ' .KindType = pKindType, + ' .BusinessEntity = pBusinessEntity, + ' .Who = pWho + ' }) + ' Return oResponse.ObjectId + ' Catch ex As Exception + ' _logger.Error(ex) + ' Throw ex + ' End Try + 'End Function + + 'Public Function CreateFileStoreObject(pObjectId As Long, pStoreType As String, pDate As String, pExtension As String, pKeepExtension As String) As String + ' Try + ' ' Remove dot in Extension + ' If pExtension.StartsWith(".") Then + ' pExtension = pExtension.Substring(1) + ' End If + + ' Dim oArgs As New NewFileObjectRequest With { + ' .ObjectId = pObjectId, + ' .StoreType = pStoreType, + ' .DateImported = pDate, + ' .Extension = pExtension, + ' .KeepExtension = pKeepExtension + ' } + ' Dim oResponse = _channel.NewFileObject(oArgs) + ' Return oResponse.FileObjectPath + ' Catch ex As Exception + ' _logger.Error(ex) + ' Throw ex + ' End Try + 'End Function + + 'Public Async Function ImportFileObjectAsync(pContent As Byte(), pWho As String, pObjectId As Long, pObjectStoreType As String, pFileObjectPath As String) As Task(Of Boolean) + ' Try + ' Dim oData As New ImportFileIntoFileObjectRequest() With { + ' .Contents = pContent, + ' .Who = pWho, + ' .FilePath = pFileObjectPath, + ' .ObjectId = pObjectId, + ' .ObjectStoreType = pObjectStoreType + ' } + + ' Dim oResponse = Await _channel.ImportFileIntoFileObjectAsync(oData) + ' Return oResponse.Result + ' Catch ex As Exception + ' _logger.Error(ex) + ' Return False + ' End Try + 'End Function + + 'Public Async Function GetFileByObjectIdAsync(ObjectId As Long) As Task(Of StreamedFile) + ' Try + ' Dim oData As New DocumentStreamRequest() With {.ObjectId = ObjectId} + ' Dim oResponse As DocumentStreamResponse = Await _channel.GetFileByObjectIdAsync(oData) + ' Dim oMemoryStream As New MemoryStream() + ' oResponse.FileContents.CopyTo(oMemoryStream) + ' oMemoryStream.Position = 0 + + ' Return New StreamedFile() With { + ' .Stream = oMemoryStream, + ' .FileName = oResponse.FileName + ' } + ' Catch ex As Exception + ' _logger.Error(ex) + ' Throw ex + ' End Try + 'End Function + + 'Public Async Function ListFilesForUserAsync() As Task(Of FileList) + ' Try + ' Dim oResponse As DocumentListResponse = Await _channel.ListFilesForUserAsync(New ListFilesForUserRequest()) + ' Return New FileList() With { + ' .Datatable = oResponse.Datatable + ' } + ' Catch ex As Exception + ' _logger.Error(ex) + ' Throw ex + ' End Try + 'End Function + Public Function GetDatatableFromIDB(SQL As String) As TableResult Try Dim oResponse = _channel.ReturnDatatable_MSSQL_IDB(SQL) @@ -324,23 +532,20 @@ Public Class Client End Try End Function - Public Async Function GetDatatableByNameAsync(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As Task(Of TableResult) - Try - Dim oResponse = Await _channel.ReturnDatatableFromCacheAsync(DatatableName, FilterExpression, SortByColumn) - Return oResponse - Catch ex As Exception - _logger.Error(ex) - Throw ex - End Try - End Function + + ''' + ''' Return infos about a file object + ''' + ''' + ''' + ''' Public Function GetDocumentInfo(UserId As Long, ObjectId As Long) As DocumentInfo Try - Dim oParams = New DocumentInfoRequest With { + Dim oResponse As DocumentInfoResponse = _channel.GetFileInfoByObjectId(New DocumentInfoRequest With { .ObjectId = ObjectId, .UserId = UserId - } - Dim oResponse As DocumentInfoResponse = _channel.GetFileInfoByObjectId(oParams) + }) Return New DocumentInfo With { .AccessRight = oResponse.FileRight, @@ -413,5 +618,8 @@ Public Class Client End Try End Function + Private Function GetUserLanguage() As String + Return Threading.Thread.CurrentThread.CurrentUICulture.Name + End Function End Class diff --git a/Modules.EDMIAPI/Constants.vb b/Modules.EDMIAPI/Constants.vb index 70a6e7e7..3ed6326d 100644 --- a/Modules.EDMIAPI/Constants.vb +++ b/Modules.EDMIAPI/Constants.vb @@ -3,4 +3,16 @@ ECM IDB End Enum + + Public Enum AttributeType + Varchar = 1 + BigInteger = 2 + Float = 3 + [Decimal] = 4 + [Date] = 5 + [DateTime] = 6 + Bit = 7 + VectorString = 8 + VectorInteger = 9 + End Enum End Class