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