From ae12ea21f2df0f746c86e31684ac4c49c0c4456a Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 6 Apr 2020 13:23:11 +0200 Subject: [PATCH] rename EDMIAPI to EDMI.API, Rename IDBService to EDMIService --- ...ServiceReference.DocumentResult.datasource | 10 + ...erviceReference.DocumentResult2.datasource | 10 + ...IDBServiceReference.IndexResult.datasource | 10 + ...ServiceReference.NonQueryResult.datasource | 10 + ...DBServiceReference.ScalarResult.datasource | 10 + ...IDBServiceReference.TableResult.datasource | 10 + Modules.EDMIAPI/EDMI.API.vbproj | 186 ++++++++++ SERVICES/DDEDM_NetworkService/EDMIService.vb | 341 ++++++++++++++++++ .../DDEDM_NetworkService/EDMIService.vbproj | 166 +++++++++ SERVICES/DDEDM_NetworkService/IEDMIService.vb | 61 ++++ 10 files changed, 814 insertions(+) create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult.datasource create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult2.datasource create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.IndexResult.datasource create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.NonQueryResult.datasource create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.ScalarResult.datasource create mode 100644 Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.TableResult.datasource create mode 100644 Modules.EDMIAPI/EDMI.API.vbproj create mode 100644 SERVICES/DDEDM_NetworkService/EDMIService.vb create mode 100644 SERVICES/DDEDM_NetworkService/EDMIService.vbproj create mode 100644 SERVICES/DDEDM_NetworkService/IEDMIService.vb diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult.datasource new file mode 100644 index 00000000..7556312d --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult2.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult2.datasource new file mode 100644 index 00000000..a599a44e --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult2.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.DocumentResult2 + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.IndexResult.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.IndexResult.datasource new file mode 100644 index 00000000..2c03f29f --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.IndexResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.IndexResult + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.NonQueryResult.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.NonQueryResult.datasource new file mode 100644 index 00000000..f22396cc --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.NonQueryResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.NonQueryResult + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.ScalarResult.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.ScalarResult.datasource new file mode 100644 index 00000000..4a52d3d7 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.ScalarResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.ScalarResult + \ No newline at end of file diff --git a/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.TableResult.datasource b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.TableResult.datasource new file mode 100644 index 00000000..874e19a8 --- /dev/null +++ b/Modules.EDMIAPI/Connected Services/IDBServiceReference/DigitalData.Modules.EDMI.API.IDBServiceReference.TableResult.datasource @@ -0,0 +1,10 @@ + + + + DigitalData.Modules.EDMI.API.IDBServiceReference.TableResult + \ No newline at end of file diff --git a/Modules.EDMIAPI/EDMI.API.vbproj b/Modules.EDMIAPI/EDMI.API.vbproj new file mode 100644 index 00000000..f3e02b07 --- /dev/null +++ b/Modules.EDMIAPI/EDMI.API.vbproj @@ -0,0 +1,186 @@ + + + + + Debug + AnyCPU + {5B1171DC-FFFE-4813-A20D-786AAE47B320} + Library + DigitalData.Modules.EDMI.API + DigitalData.Modules.EDMI.API + 512 + Windows + v4.6.1 + + + true + full + true + true + bin\Debug\ + DigitalData.Modules.EDMI.API.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DigitalData.Modules.EDMI.API.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + On + + + Binary + + + Off + + + On + + + + + ..\packages\NLog.4.7.0\lib\net45\NLog.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Reference.svcmap + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Designer + + + + Designer + + + Designer + + + + Designer + + + Designer + + + Designer + + + Designer + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + + {903b2d7d-3b80-4be9-8713-7447b704e1b0} + Logging + + + + + + + + + + + + + + WCF Proxy Generator + Reference.vb + + + + \ No newline at end of file diff --git a/SERVICES/DDEDM_NetworkService/EDMIService.vb b/SERVICES/DDEDM_NetworkService/EDMIService.vb new file mode 100644 index 00000000..fa436f12 --- /dev/null +++ b/SERVICES/DDEDM_NetworkService/EDMIService.vb @@ -0,0 +1,341 @@ +Imports System.ServiceModel +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Filesystem +Imports DigitalData.Services.EDMIService +Imports System.IO + + +Public Class EDMIService + Implements IEDMIService + + Public Shared LogConfig As LogConfig + Public Shared Database As Firebird + Public Shared AppConfig As AppConfig + + Private ReadOnly _logger As Logger + + Private _request As Request = Nothing + Private _debug As Boolean = False + Private _username As String + + Public Sub New() + Dim oOperationContext As OperationContext = OperationContext.Current + Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext + Dim oUsername = oOperationContext.ServiceSecurityContext.WindowsIdentity.Name + + _username = oUsername + _logger = LogConfig.GetLogger() + End Sub + +#Region "Auth" + Private Function TestUserAuth() As Boolean + Try + 'Dim oSQL As String = $"SELECT FNIDB_AUTH_USER('{_username}') FROM RDB$DATABASE;" + 'Dim oResult As Boolean = Database.GetScalarValue(oSQL) + 'Return oResult + Return True + Catch ex As Exception + _logger.Error(ex) + Return False + End Try + End Function +#End Region +#Region "Heartbeat" + Public Function Heartbeat() As Boolean Implements IEDMIService.Heartbeat + Return True + End Function +#End Region +#Region "Request" + Public Sub CreateRequest(Name As String, Optional Debug As Boolean = False) + _request = New Request(Name, _username, Database, Debug) + _debug = Debug + + _logger.Info("Creating request {0}/{1}", _request.Name, _request.RequestId) + End Sub + + Public Function CreateDatabaseRequest(Name As String, Optional Debug As Boolean = False) As String Implements IEDMIService.CreateDatabaseRequest + CreateRequest(Name, Debug) + + Return _request.Name + End Function + + Public Sub CloseDatabaseRequest() Implements IEDMIService.CloseDatabaseRequest + If IsNothing(_request) Then + Exit Sub + End If + + _logger.Info("Closing request {0}", _request.ToString) + _request.Connection.Close() + _request = Nothing + End Sub + +#End Region +#Region "Database" + Private Sub TestRequestCreated() + If IsNothing(_request) Then + Throw New Exceptions.NoRequestException() + End If + End Sub + + Public Function ReturnDatatable(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable + Try + TestRequestCreated() + + _logger.Info($"ReturnDatatable, SQL: {SQL}") + _request.LogDebug($"ReturnDatatable, SQL: {SQL}") + + Dim oResult As DataTable = Database.GetDatatableWithConnection(SQL, _request.Connection) + Return New TableResult(oResult) + Catch ex As Exception + _logger.Error(ex) + _request.LogError(ex.Message) + Return New TableResult(ex.Message) + End Try + End Function + + Public Function ReturnScalar(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar + Try + TestRequestCreated() + + _logger.Info($"ReturnScalar, SQL: {SQL}") + _request.LogDebug($"ReturnScalar, SQL: {SQL}") + + Dim oResult As Object = Database.GetScalarValueWithConnection(SQL, _request.Connection) + Return New ScalarResult(oResult) + Catch ex As Exception + _logger.Error(ex) + _request.LogError(ex.Message) + Return New ScalarResult(ex.Message) + End Try + End Function + + Public Function ExecuteNonQuery(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery + Try + TestRequestCreated() + + _logger.Info($"ExecuteNonQuery, SQL: {SQL}") + _request.LogDebug($"ExecuteNonQuery, SQL: {SQL}") + + Dim oResult As Boolean = Database.ExecuteNonQueryWithConnection(SQL, _request.Connection) + Return New NonQueryResult() + Catch ex As Exception + _logger.Error(ex) + _request.LogError(ex.Message) + Return New NonQueryResult(ex.Message) + End Try + End Function + + +#End Region +#Region "Document (with FileContainer)" + 'Public Function NewFile(FileName As String, Contents() As Byte) As DocumentResult Implements IEDMIService.NewFile + ' Try + ' Dim oContainer As FileContainer + ' Dim oContainerId As String + + ' If Not TestUserAuth() Then + ' Throw New Exception($"User {_username} not authorized.") + ' End If + + ' oContainer = FileContainer.Create(LogConfig, AppConfig.ContainerPassword) + ' oContainerId = oContainer.ContainerId + ' _logger.Debug("Container created with id {0}", oContainerId) + + ' Dim oExtension As String = Path.GetExtension(FileName).Substring(1) + ' _logger.Debug("File extension of file {0} is {1}", FileName, oExtension) + + ' Dim oSQL = $"SELECT FNICM_NEW_DOC('010', '{oContainerId}', '{GetContainerName(oContainerId)}', '{FileName}', '{oExtension}', '{_username}') FROM RDB$DATABASE;" + ' Dim oDocId As Int64 = Database.GetScalarValue(oSQL) + + ' If oDocId = -1 Then + ' _logger.Warn("Database returned -1 while creating Document Entry. File was not saved!") + ' Return Nothing + ' End If + + ' _logger.Debug("Database Entry created with DocId {0}", oDocId) + + ' oContainer.SetFile(Contents, FileName) + ' oContainer.SaveAs(GetContainerPath(oContainerId)) + + ' _logger.Debug("File saved in Container!", FileName) + + ' Dim oDocument = New DocumentObject(oContainerId, oDocId, FileName) + ' Return New DocumentResult(oDocument) + ' Catch ex As Exception + ' _logger.Error(ex) + ' Return New DocumentResult(ex.Message) + ' End Try + 'End Function + + 'Public Function UpdateFile(DocObject As DocumentObject, Contents() As Byte) As DocumentResult Implements IEDMIService.UpdateFile + ' Try + ' TestFileExists(DocObject.ContainerId) + + ' ' TODO: update db + + ' Dim oFilePath = GetContainerPath(DocObject.ContainerId) + ' Dim oFileContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oFilePath) + + ' oFileContainer.SetFile(Contents, oFileContainer.GetFile.FileName) + ' oFileContainer.Save() + + + ' Return New DocumentResult(DocObject) + ' Catch ex As Exception + ' _logger.Error(ex) + ' Return Nothing + ' End Try + 'End Function + + 'Public Function GetFile(DocObject As DocumentObject) As DocumentResult Implements IEDMIService.GetFile + ' Try + ' TestFileExists(DocObject.ContainerId) + + ' Dim oContainerPath = GetContainerPath(DocObject.ContainerId) + ' Dim oContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oContainerPath) + ' Dim oContents As Byte() = oContainer.GetFile().Contents + + ' Return New DocumentResult(DocObject, oContents) + ' Catch ex As Exception + ' _logger.Error(ex) + ' Return New DocumentResult(ex.Message) + ' End Try + 'End Function + + 'Public Function DeleteFile(DocObject As DocumentObject) As Boolean Implements IEDMIService.DeleteFile + ' Try + ' TestFileExists(DocObject.ContainerId) + + ' Dim oFilePath = GetContainerPath(DocObject.ContainerId) + ' IO.File.Delete(oFilePath) + + ' 'TODO: Delete doc from db + + ' Return True + ' Catch ex As Exception + ' _logger.Error(ex) + ' Return False + ' End Try + 'End Function + + 'Private Function GetContainerPath(ContainerId As String) As String + ' Return Path.Combine(AppConfig.ContainerPath, GetContainerName(ContainerId)) + 'End Function + + 'Private Function GetContainerName(ContainerId As String) As String + ' Return ContainerId & ".enc" + 'End Function + + 'Private Sub TestFileExists(ContainerId) + ' Dim oContainerPath = GetContainerPath(ContainerId) + + ' If Not IO.File.Exists(oContainerPath) Then + ' Throw New FileNotFoundException("Container existiert nicht", oContainerPath) + ' End If + 'End Sub + + 'Public Function GetDocumentByDocumentId(DocumentId As Long) As DocumentResult Implements IEDMIService.GetDocumentByDocumentId + ' Try + ' Dim oSQL = $"SELECT GUID, CONTAINER_ID, ORIGINAL_FILENAME FROM TBIDB_DOCUMENT WHERE GUID = {DocumentId}" + ' Dim oTable = Database.GetDatatable(oSQL) + + ' If oTable.Rows.Count = 0 Then + ' Return New DocumentResult("Document not found") + ' End If + + ' Dim oRow As DataRow = oTable.Rows.Item(0) + ' Dim oDocument As New DocumentObject( + ' oRow.Item("CONTAINER_ID"), + ' oRow.Item("GUID"), + ' oRow.Item("ORIGINAL_FILENAME") + ' ) + + ' TestFileExists(oDocument.ContainerId) + + ' Dim oContainerPath = GetContainerPath(oDocument.ContainerId) + ' Dim oContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oContainerPath) + ' Dim oContents As Byte() = oContainer.GetFile().Contents + + ' Return New DocumentResult(oDocument, oContents) + ' Catch ex As Exception + ' Return New DocumentResult(ex.Message) + ' End Try + 'End Function + + 'Public Function GetDocumentByContainerId(ContainerId As String) As DocumentResult Implements IEDMIService.GetDocumentByContainerId + ' Try + ' Dim oSQL = $"SELECT GUID, CONTAINER_ID, ORIGINAL_FILENAME FROM TBIDB_DOCUMENT WHERE CONTAINER_ID = '{ContainerId}'" + ' Dim oTable = Database.GetDatatable(oSQL) + + ' If oTable.Rows.Count = 0 Then + ' Return New DocumentResult("Document not found") + ' End If + + ' Dim oRow As DataRow = oTable.Rows.Item(0) + ' Dim oDocument As New DocumentObject( + ' oRow.Item("CONTAINER_ID"), + ' oRow.Item("GUID"), + ' oRow.Item("ORIGINAL_FILENAME") + ' ) + + ' TestFileExists(oDocument.ContainerId) + + ' Dim oContainerPath = GetContainerPath(oDocument.ContainerId) + ' Dim oContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oContainerPath) + ' Dim oContents As Byte() = oContainer.GetFile().Contents + + ' Return New DocumentResult(oDocument, oContents) + ' Catch ex As Exception + ' Return New DocumentResult(ex.Message) + ' End Try + 'End Function +#End Region + +#Region "Document" + Public Function ImportFile(FileInfo As FileInfo, Contents() As Byte, [Readonly] As Boolean, RetentionPeriod As Integer) As DocumentResult2 Implements IEDMIService.ImportFile + Dim oFilePath = Path.Combine(AppConfig.ContainerPath, FileInfo.Name) + Dim oDocument = New DocumentResult2.DocumentObject() With {.FileName = FileInfo.Name} + + Try + _logger.Info("Saving file [{0}] to path [{1}]", FileInfo.Name, oFilePath) + Using oStream = New FileStream(oFilePath, FileMode.CreateNew) + oStream.Write(Contents, 0, Contents.Length) + oStream.Flush(True) + oStream.Close() + End Using + + Dim oAttributes = IO.File.GetAttributes(oFilePath) Or FileAttributes.ReadOnly + + If RetentionPeriod Then + _logger.Info("Setting LastAccessTime") + IO.File.SetLastAccessTime(oFilePath, Date.Now.AddYears(30)) + End If + + If [Readonly] Then + _logger.Info("Setting ReadOnly Attribute") + IO.File.SetAttributes(oFilePath, oAttributes) + End If + + Return New DocumentResult2(oDocument) + Catch ex As Exception + _logger.Error(ex) + Return New DocumentResult2(ex.Message) + End Try + End Function +#End Region + +#Region "Index" + Public Function NewFileIndex(DocObject As DocumentObject, Syskey As String, LanguageCode As String, Value As String) As IndexResult Implements IEDMIService.NewFileIndex + Try + Dim oSQL = $"SELECT FNIDB_NEW_DOC_VALUE({DocObject.DocumentId},'{Syskey}','{LanguageCode}','{Value}','{_username}') FROM RDB$DATABASE;" + Dim oIndexId As Int64 = Database.GetScalarValue(oSQL) + + Return New IndexResult(oIndexId) + Catch ex As Exception + _logger.Error(ex) + Return New IndexResult(ex.Message) + End Try + End Function +#End Region +End Class \ No newline at end of file diff --git a/SERVICES/DDEDM_NetworkService/EDMIService.vbproj b/SERVICES/DDEDM_NetworkService/EDMIService.vbproj new file mode 100644 index 00000000..fe9c0ecb --- /dev/null +++ b/SERVICES/DDEDM_NetworkService/EDMIService.vbproj @@ -0,0 +1,166 @@ + + + + + Debug + AnyCPU + {A8C3F298-76AB-4359-AB3C-986E313B4336} + Exe + DigitalData.Services.EDMIService.WindowsService + DigitalData.Services.EDMIService + EDMIService + 512 + Console + v4.6.1 + true + + + AnyCPU + true + full + true + true + bin\Debug\ + EDMIService.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + AnyCPU + pdbonly + false + true + true + bin\Release\ + EDMIService.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + On + + + Binary + + + Off + + + On + + + + ..\..\packages\FirebirdSql.Data.FirebirdClient.6.4.0\lib\net452\FirebirdSql.Data.FirebirdClient.dll + + + + ..\..\packages\NLog.4.7.0\lib\net45\NLog.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + Component + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + ProjectInstaller.vb + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + PreserveNewest + Designer + + + + + + {EAF0EA75-5FA7-485D-89C7-B2D843B03A96} + Database + + + {5B1171DC-FFFE-4813-A20D-786AAE47B320} + EDMI.API + + + {991D0231-4623-496D-8BD0-9CA906029CBC} + Filesystem + + + {903B2D7D-3B80-4BE9-8713-7447B704E1B0} + Logging + + + + \ No newline at end of file diff --git a/SERVICES/DDEDM_NetworkService/IEDMIService.vb b/SERVICES/DDEDM_NetworkService/IEDMIService.vb new file mode 100644 index 00000000..baf379cd --- /dev/null +++ b/SERVICES/DDEDM_NetworkService/IEDMIService.vb @@ -0,0 +1,61 @@ +Imports System.IO +Imports System.ServiceModel +Imports DigitalData.Modules.Filesystem + + +Interface IEDMIService + +#Region "Heartbeat" + + Function Heartbeat() As Boolean +#End Region + +#Region "Database" + + Function CreateDatabaseRequest(Name As String, Optional Debug As Boolean = False) As String + + + Sub CloseDatabaseRequest() + + + Function ReturnDatatable(SQL As String) As TableResult + + + Function ReturnScalar(SQL As String) As ScalarResult + + + Function ExecuteNonQuery(SQL As String) As NonQueryResult +#End Region + +#Region "Document (with FileContainer)" + ' + 'Function NewFile(FileName As String, Contents As Byte()) As DocumentResult + + ' + 'Function UpdateFile(DocObject As DocumentObject, Contents As Byte()) As DocumentResult + + ' + 'Function GetFile(DocObject As DocumentObject) As DocumentResult + + ' + 'Function DeleteFile(DocObject As DocumentObject) As Boolean + + ' + 'Function GetDocumentByDocumentId(DocumentId As Int64) As DocumentResult + + ' + 'Function GetDocumentByContainerId(ContainerId As String) As DocumentResult +#End Region + +#Region "Document (New)" + + Function ImportFile(FileInfo As FileInfo, Contents As Byte(), [ReadOnly] As Boolean, RetentionTime As Integer) As DocumentResult2 +#End Region + + +#Region "Index" + + Function NewFileIndex(DocObject As DocumentObject, Syskey As String, LanguageCode As String, Value As String) As IndexResult +#End Region + +End Interface \ No newline at end of file