From cb0068508520e6702eacc574d7958642d062b8d4 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 17 Dec 2021 10:25:14 +0100 Subject: [PATCH] EDMIService: Update client and fix wrnog extension at import --- Modules.EDMIAPI/Client.vb | 46 +++- ...Reference.GetFileObjectResponse.datasource | 10 + ...ices.EDMIService.Methods.GetFileObject.xsd | 31 +++ .../DigitalData.Services.EDMIService.wsdl | 11 + .../DigitalData.Services.EDMIService.xsd | 19 +- .../EDMIServiceReference/Reference.svcmap | 1 + .../EDMIServiceReference/Reference.vb | 214 ++++++++++++++++++ .../EDMIServiceReference/service.wsdl | 9 + Modules.EDMIAPI/EDMI.API.vbproj | 7 + .../Modules/ZooFlow/GetFileObject.vb | 44 ++++ .../Methods/GetFileObject/FileObject.vb | 12 +- .../GetFileObject/GetFileObjectMethod.vb | 50 +++- .../GetFileObject/GetFileObjectRequest.vb | 2 + .../Methods/NewFile/NewFileMethod.vb | 7 +- 14 files changed, 444 insertions(+), 19 deletions(-) create mode 100644 Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetFileObjectResponse.datasource create mode 100644 Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.GetFileObject.xsd create mode 100644 Modules.EDMIAPI/Modules/ZooFlow/GetFileObject.vb diff --git a/Modules.EDMIAPI/Client.vb b/Modules.EDMIAPI/Client.vb index b9d98da5..0b008467 100644 --- a/Modules.EDMIAPI/Client.vb +++ b/Modules.EDMIAPI/Client.vb @@ -11,25 +11,27 @@ Public Class Client Private Const KIND_TYPE_DOC = "DOC" + Private ReadOnly _LogConfig As LogConfig Private ReadOnly _logger As Logger Private ReadOnly _channelFactory As ChannelFactory(Of IEDMIServiceChannel) Private ReadOnly _IPAddressServer As String + Private ReadOnly _PortServer As Integer Private _dummy_table_attributes As DataTable Private _channel As IEDMIServiceChannel Private _FileEx As Filesystem.File - ''' ''' Creates a new EDMI Client object ''' - ''' LogConfig object - ''' The IP address/hostname and port, separated by semicolon or colon, ex localhost:9000 - Public Sub New(LogConfig As LogConfig, ServiceAdress As String) - _logger = LogConfig.GetLogger() - _FileEx = New Filesystem.File(LogConfig) - - Dim oServiceAddress As String = ServiceAdress + ''' LogConfig object + ''' The IP address/hostname and port, separated by semicolon or colon, ex. 1.2.3.4:9000 + Public Sub New(pLogConfig As LogConfig, pServiceAdress As String) + _LogConfig = pLogConfig + _logger = pLogConfig.GetLogger() + _FileEx = New Filesystem.File(pLogConfig) + + Dim oServiceAddress As String = pServiceAdress Dim oAddressArray() As String If oServiceAddress.Contains(";") Then @@ -40,8 +42,10 @@ Public Class Client Try _IPAddressServer = oAddressArray(0) + _PortServer = oAddressArray(1) + Dim oBinding = Channel.GetBinding() - Dim oAddress = New EndpointAddress($"net.tcp://{oAddressArray(0)}:{oAddressArray(1)}/DigitalData/Services/Main") + Dim oAddress = New EndpointAddress($"net.tcp://{_IPAddressServer}:{_PortServer}/DigitalData/Services/Main") Dim oFactory = New ChannelFactory(Of IEDMIServiceChannel)(oBinding, oAddress) _channelFactory = oFactory @@ -243,6 +247,29 @@ Public Class Client End Try End Function + Public Function GetFileObject(pObjectId As Long) As FileObject + Try + Dim oGetFileObject As New Modules.Zooflow.GetFileObject(_LogConfig, Me) + Dim oFileObject = oGetFileObject.Run(pObjectId) + Return oFileObject + Catch ex As Exception + _logger.Error(ex) + Return Nothing + End Try + End Function + + Public Async Function GetFileObjectAsync(pObjectId As Long) As Task(Of FileObject) + Try + Dim oGetFileObject As New Modules.Zooflow.GetFileObject(_LogConfig, Me) + Dim oFileObject = Await oGetFileObject.RunAsync(pObjectId) + Return oFileObject + Catch ex As Exception + _logger.Error(ex) + Return Nothing + End Try + End Function + + ''' ''' Sets a value to an attribute ''' @@ -466,7 +493,6 @@ Public Class Client End Try End Function - Private Function GetAttributesForObject(pObjectId As Long, pLanguage As String) As List(Of ObjectAttribute) Dim oAttributes As New List(Of ObjectAttribute) diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetFileObjectResponse.datasource b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetFileObjectResponse.datasource new file mode 100644 index 00000000..df13dd7d --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMI.API.EDMIServiceReference.GetFileObjectResponse.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.EDMIServiceReference.GetFileObjectResponse, 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.GetFileObject.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.GetFileObject.xsd new file mode 100644 index 00000000..c0bd799b --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.Methods.GetFileObject.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 b5182607..a5f4ff8e 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.wsdl @@ -15,6 +15,7 @@ + @@ -136,6 +137,12 @@ + + + + + + @@ -244,6 +251,10 @@ + + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index 84c580cb..38cca34e 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -4,6 +4,7 @@ + @@ -202,6 +203,20 @@ + + + + + + + + + + + + + + @@ -212,7 +227,7 @@ - + @@ -228,7 +243,7 @@ - + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap index 08a1ba92..3fd71f59 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap @@ -37,6 +37,7 @@ + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 33d0d301..f9f6c6da 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -26,6 +26,7 @@ Namespace EDMIServiceReference System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NewFileResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.SetAttributeValueResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ImportFileResponse)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetFileObjectResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.TableResult))> _ Partial Public Class BaseResponse Inherits Object @@ -129,6 +130,9 @@ Namespace EDMIServiceReference System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ImportFileRequest)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ImportFileResponse)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(String())), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetFileObjectRequest)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.GetFileObjectResponse)), _ + System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.FileObject)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.RightsAccessRight))> _ Partial Public Class ScalarResult Inherits EDMIServiceReference.BaseResponse @@ -234,6 +238,31 @@ Namespace EDMIServiceReference End Property End Class + _ + Partial Public Class GetFileObjectResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private FileObjectField As EDMIServiceReference.FileObject + + _ + Public Property FileObject() As EDMIServiceReference.FileObject + Get + Return Me.FileObjectField + End Get + Set + If (Object.ReferenceEquals(Me.FileObjectField, value) <> true) Then + Me.FileObjectField = value + Me.RaisePropertyChanged("FileObject") + End If + End Set + End Property + End Class + _ + Partial Public Class GetFileObjectRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private LoadFileContentsField As Boolean + + _ + Private ObjectIdField As Long + + _ + 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 LoadFileContents() As Boolean + Get + Return Me.LoadFileContentsField + End Get + Set + If (Me.LoadFileContentsField.Equals(value) <> true) Then + Me.LoadFileContentsField = value + Me.RaisePropertyChanged("LoadFileContents") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + 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 FileObject + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + Private _AccessRightsField As String + + Private _FileContentsField() As Byte + + Private _FileHashField As String + + Private _FileSizeField As Long + + Private _ObjectIdField As Long + + _ + 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 _AccessRights() As String + Get + Return Me._AccessRightsField + End Get + Set + If (Object.ReferenceEquals(Me._AccessRightsField, value) <> true) Then + Me._AccessRightsField = value + Me.RaisePropertyChanged("_AccessRights") + End If + End Set + End Property + + _ + Public Property _FileContents() As Byte() + Get + Return Me._FileContentsField + End Get + Set + If (Object.ReferenceEquals(Me._FileContentsField, value) <> true) Then + Me._FileContentsField = value + Me.RaisePropertyChanged("_FileContents") + End If + End Set + End Property + + _ + Public Property _FileHash() As String + Get + Return Me._FileHashField + End Get + Set + If (Object.ReferenceEquals(Me._FileHashField, value) <> true) Then + Me._FileHashField = value + Me.RaisePropertyChanged("_FileHash") + End If + End Set + End Property + + _ + Public Property _FileSize() As Long + Get + Return Me._FileSizeField + End Get + Set + If (Me._FileSizeField.Equals(value) <> true) Then + Me._FileSizeField = value + Me.RaisePropertyChanged("_FileSize") + End If + End Set + End Property + + _ + Public Property _ObjectId() As Long + Get + Return Me._ObjectIdField + End Get + Set + If (Me._ObjectIdField.Equals(value) <> true) Then + Me._ObjectIdField = value + Me.RaisePropertyChanged("_ObjectId") + 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 RightsAccessRight As Integer @@ -1353,6 +1553,12 @@ Namespace EDMIServiceReference _ Function ImportFileAsync(ByVal Data As EDMIServiceReference.ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ImportFileResponse) + _ + Function GetFileObject(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As EDMIServiceReference.GetFileObjectResponse + + _ + Function GetFileObjectAsync(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetFileObjectResponse) + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Wrappername (DocumentStreamRequest) von Nachricht "DocumentStreamRequest" nicht mit dem Standardwert (GetFileByObjectId) übereinstimmt. _ Function EDMIServiceReference_IEDMIService_GetFileByObjectId(ByVal request As EDMIServiceReference.DocumentStreamRequest) As EDMIServiceReference.DocumentStreamResponse Implements EDMIServiceReference.IEDMIService.GetFileByObjectId Return MyBase.Channel.GetFileByObjectId(request) diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl index 28c3fba3..2719bd87 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/service.wsdl @@ -200,6 +200,15 @@ + + + + + + + + + diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj index d5ef560c..453e7b8d 100644 --- a/Modules.EDMIAPI/EDMI.API.vbproj +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -76,6 +76,7 @@ + True True @@ -122,6 +123,9 @@ Reference.svcmap + + Reference.svcmap + Reference.svcmap @@ -158,6 +162,9 @@ Designer + + Designer + Designer diff --git a/Modules.EDMIAPI/Modules/ZooFlow/GetFileObject.vb b/Modules.EDMIAPI/Modules/ZooFlow/GetFileObject.vb new file mode 100644 index 00000000..73f05eb6 --- /dev/null +++ b/Modules.EDMIAPI/Modules/ZooFlow/GetFileObject.vb @@ -0,0 +1,44 @@ +Imports DigitalData.Modules.EDMI.API.EDMIServiceReference +Imports DigitalData.Modules.Logging + +Namespace Modules.Zooflow + Public Class GetFileObject + Private ReadOnly LogConfig As LogConfig + Private ReadOnly Logger As Logger + Private ReadOnly Channel As IEDMIServiceChannel + + Public Sub New(pLogConfig As LogConfig, pChannel As IEDMIServiceChannel) + LogConfig = pLogConfig + Logger = pLogConfig.GetLogger() + Channel = pChannel + End Sub + + Public Async Function RunAsync(pObjectId As Long) As Task(Of FileObject) + Try + Dim oResult = Await Channel.GetFileObjectAsync(New GetFileObjectRequest With {.ObjectId = pObjectId}) + If oResult.OK Then + Return oResult.FileObject + Else + Return Nothing + End If + Catch ex As Exception + Logger.Error(ex) + Return Nothing + End Try + End Function + + Public Function Run(pObjectId As Long) As FileObject + Try + Dim oResult = Channel.GetFileObject(New GetFileObjectRequest With {.ObjectId = pObjectId}) + If oResult.OK Then + Return oResult.FileObject + Else + Return Nothing + End If + Catch ex As Exception + Logger.Error(ex) + Return Nothing + End Try + End Function + End Class +End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/GetFileObject/FileObject.vb b/Service.EDMIService/Methods/GetFileObject/FileObject.vb index 616adc7f..6ffed104 100644 --- a/Service.EDMIService/Methods/GetFileObject/FileObject.vb +++ b/Service.EDMIService/Methods/GetFileObject/FileObject.vb @@ -1,10 +1,20 @@ -Namespace Methods.GetFileObject +Imports System.Runtime.Serialization + +Namespace Methods.GetFileObject Public Class FileObject + Public Property ObjectId As Long + Public Property AccessRights As String + + Public Property FileExtension As String + Public Property FileHash As String + Public Property FileSize As Long + + Public Property FileContents As Byte() End Class End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/GetFileObject/GetFileObjectMethod.vb b/Service.EDMIService/Methods/GetFileObject/GetFileObjectMethod.vb index b8b3eba0..be5d6102 100644 --- a/Service.EDMIService/Methods/GetFileObject/GetFileObjectMethod.vb +++ b/Service.EDMIService/Methods/GetFileObject/GetFileObjectMethod.vb @@ -1,6 +1,7 @@ Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Language +Imports System.IO Namespace Methods.GetFileObject Public Class GetFileObjectMethod @@ -16,7 +17,6 @@ Namespace Methods.GetFileObject LogAndThrow("ObjectId does not exist!") End If - Dim oSQL = $"SELECT * FROM VWIDB_FILE_OBJECT WHERE IDB_OBJ_ID = {pData.ObjectId}" Dim oTable = Database.GetDatatable(oSQL) @@ -25,20 +25,64 @@ Namespace Methods.GetFileObject End If Dim oRow As DataRow = oTable.First() + Dim oFileHash As String = oRow.ItemEx("FILE_HASH", "") + Dim oFileSize As Long = oRow.ItemEx(Of Long)("FILE_SIZE", 0) + Dim oFileObject As New FileObject With { .ObjectId = pData.ObjectId, - .FileHash = oRow.ItemEx("FILE_HASH", ""), - .FileSize = oRow.ItemEx(Of Long)("FILE_SIZE", 0) + .FileHash = oFileHash, + .FileSize = oFileSize } + If pData.LoadFileContents = True Then + Dim oFilePath = oRow.ItemEx("RELPATH", "") + Dim oFileName = oRow.ItemEx("Filename", "") + Dim oFullFileName = Path.Combine(oFilePath, oFileName) + + If File.Exists(oFullFileName) = False Then + Throw New FileNotFoundException("FileObject not Found!", oFullFileName) + End If + + Dim oContents As Byte() = LoadFileContents(oFullFileName) + + If oContents Is Nothing Then + Throw New FileNotFoundException("FileObject not Found!", oFullFileName) + End If + + oFileObject.FileContents = oContents + + End If + Return New GetFileObjectResponse(oFileObject) + Catch ex As FileNotFoundException + Logger.Error(ex) + Return New GetFileObjectResponse(ex, ex.FileName) + Catch ex As Exception Logger.Error(ex) Return New GetFileObjectResponse(ex) End Try End Function + + Private Function LoadFileContents(pFilePath As String) As Byte() + Try + Using oFileStream As New FileStream(pFilePath, FileMode.Open, FileAccess.Read) + Using oMemoryStream As New MemoryStream() + oFileStream.CopyTo(oMemoryStream) + Dim oContents = oMemoryStream.ToArray() + + Return oContents + End Using + End Using + + Catch ex As Exception + Logger.Error(ex) + Return Nothing + + End Try + End Function End Class End Namespace \ No newline at end of file diff --git a/Service.EDMIService/Methods/GetFileObject/GetFileObjectRequest.vb b/Service.EDMIService/Methods/GetFileObject/GetFileObjectRequest.vb index b81cf131..59aa5e75 100644 --- a/Service.EDMIService/Methods/GetFileObject/GetFileObjectRequest.vb +++ b/Service.EDMIService/Methods/GetFileObject/GetFileObjectRequest.vb @@ -6,6 +6,8 @@ Namespace Methods.GetFileObject Public Class GetFileObjectRequest Public Property ObjectId As Long + + Public Property LoadFileContents As Boolean = False End Class End Namespace diff --git a/Service.EDMIService/Methods/NewFile/NewFileMethod.vb b/Service.EDMIService/Methods/NewFile/NewFileMethod.vb index 3d21fae3..239d6ae3 100644 --- a/Service.EDMIService/Methods/NewFile/NewFileMethod.vb +++ b/Service.EDMIService/Methods/NewFile/NewFileMethod.vb @@ -83,12 +83,12 @@ Public Class NewFileMethod Dim oFileObjectInfo As IO.FileInfo = New IO.FileInfo(oFilePath) Dim oFileObjectSize As Long = pData.File.FileContents.Length - Dim oFileObjectExtension As String = oFileObjectInfo.Extension.Substring(1) Dim oFileObjectName As String = oFileObjectInfo.Name + Dim oOriginalExtension As String = pData.File.FileInfoRaw.Extension.Substring(1) Logger.Debug("File Information for [{0}]:", oFileObjectName) Logger.Debug("Size: [{0}]", oFileObjectSize) - Logger.Debug("Extension: [{0}]", oFileObjectExtension) + Logger.Debug("Original Extension: [{0}]", oOriginalExtension) Logger.Debug("Checksum: [{0}]", pData.File.FileChecksum) Try @@ -110,7 +110,7 @@ Public Class NewFileMethod Dim oSQL As String = $"EXEC PRIDB_NEW_IDBFO '{oFinalPath}', '{oFileObjectName}', - '{oFileObjectExtension}', + '{oOriginalExtension}', {oFileObjectSize}, '{pData.File.FileChecksum}' , '{pData.User.UserName}', @@ -218,6 +218,7 @@ Public Class NewFileMethod End Function Private Function GetFileObjectFileName(IDB_OBJ_ID As Long, pFilename As String, pKeepFilename As Boolean) As String + ' TODO: save actual extensions If pKeepFilename Then Return pFilename Else