This commit is contained in:
SchreiberM 2020-12-22 14:12:21 +01:00
commit ac5ab2a9b3
25 changed files with 364 additions and 202 deletions

View File

@ -54,10 +54,10 @@ Public Class frmDocumentResultList
_Params = Params _Params = Params
_ResultLists = Params.Results _ResultLists = Params.Results
InitIDB() MaybeInitIDB()
End Sub End Sub
Private Sub InitIDB() Private Sub MaybeInitIDB()
_IsLegacy = Not _Environment.Service.IsActive _IsLegacy = Not _Environment.Service.IsActive
If _Environment.Service.IsActive Then If _Environment.Service.IsActive Then
Dim oSplit As List(Of String) = _Environment.Service.Address.Split(";").ToList() Dim oSplit As List(Of String) = _Environment.Service.Address.Split(";").ToList()
@ -218,6 +218,7 @@ Public Class frmDocumentResultList
If e.FocusedRowHandle >= 0 Then If e.FocusedRowHandle >= 0 Then
Dim oRow = sender.GetDataRow(e.FocusedRowHandle) Dim oRow = sender.GetDataRow(e.FocusedRowHandle)
Dim oFullPath = oRow.Item(COLUMN_FILEPATH) Dim oFullPath = oRow.Item(COLUMN_FILEPATH)
DocumentViewer1.LoadFile(oFullPath) DocumentViewer1.LoadFile(oFullPath)
End If End If
End Sub End Sub

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="TableResult"> <xs:complexType name="TableResult">
<xs:complexContent mixed="false"> <xs:complexContent mixed="false">
<xs:extension base="tns:BaseResult"> <xs:extension base="tns:BaseResult">

View File

@ -4,7 +4,7 @@
<xsd:schema targetNamespace="http://DigitalData.Services.EDMIService/Imports"> <xsd:schema targetNamespace="http://DigitalData.Services.EDMIService/Imports">
<xsd:import namespace="http://DigitalData.Services.EDMIService" /> <xsd:import namespace="http://DigitalData.Services.EDMIService" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import namespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" /> <xsd:import namespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" />
<xsd:import namespace="http://schemas.datacontract.org/2004/07/System" /> <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
<xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data" /> <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />
<xsd:import namespace="http://schemas.microsoft.com/Message" /> <xsd:import namespace="http://schemas.microsoft.com/Message" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://DigitalData.Services.EDMIService" elementFormDefault="qualified" targetNamespace="http://DigitalData.Services.EDMIService" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:tns="http://DigitalData.Services.EDMIService" elementFormDefault="qualified" targetNamespace="http://DigitalData.Services.EDMIService" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" /> <xs:import namespace="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" />
<xs:import namespace="http://schemas.microsoft.com/Message" /> <xs:import namespace="http://schemas.microsoft.com/Message" />
<xs:element name="Heartbeat"> <xs:element name="Heartbeat">
<xs:complexType> <xs:complexType>
@ -26,7 +26,7 @@
<xs:element name="ReturnDatatableFromCacheResponse"> <xs:element name="ReturnDatatableFromCacheResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnDatatableFromCacheResult" nillable="true" type="q1:TableResult" /> <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnDatatableFromCacheResult" nillable="true" type="q1:TableResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -40,7 +40,7 @@
<xs:element name="ReturnDatatable_FirebirdResponse"> <xs:element name="ReturnDatatable_FirebirdResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnDatatable_FirebirdResult" nillable="true" type="q2:TableResult" /> <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnDatatable_FirebirdResult" nillable="true" type="q2:TableResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -54,7 +54,7 @@
<xs:element name="ReturnScalar_FirebirdResponse"> <xs:element name="ReturnScalar_FirebirdResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnScalar_FirebirdResult" nillable="true" type="q3:ScalarResult" /> <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnScalar_FirebirdResult" nillable="true" type="q3:ScalarResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -68,7 +68,7 @@
<xs:element name="ExecuteNonQuery_FirebirdResponse"> <xs:element name="ExecuteNonQuery_FirebirdResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ExecuteNonQuery_FirebirdResult" nillable="true" type="q4:NonQueryResult" /> <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ExecuteNonQuery_FirebirdResult" nillable="true" type="q4:NonQueryResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -82,7 +82,7 @@
<xs:element name="ReturnDatatable_MSSQL_IDBResponse"> <xs:element name="ReturnDatatable_MSSQL_IDBResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnDatatable_MSSQL_IDBResult" nillable="true" type="q5:TableResult" /> <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnDatatable_MSSQL_IDBResult" nillable="true" type="q5:TableResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -96,7 +96,7 @@
<xs:element name="ReturnScalar_MSSQL_IDBResponse"> <xs:element name="ReturnScalar_MSSQL_IDBResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnScalar_MSSQL_IDBResult" nillable="true" type="q6:ScalarResult" /> <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnScalar_MSSQL_IDBResult" nillable="true" type="q6:ScalarResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -110,7 +110,7 @@
<xs:element name="ExecuteNonQuery_MSSQL_IDBResponse"> <xs:element name="ExecuteNonQuery_MSSQL_IDBResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ExecuteNonQuery_MSSQL_IDBResult" nillable="true" type="q7:NonQueryResult" /> <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ExecuteNonQuery_MSSQL_IDBResult" nillable="true" type="q7:NonQueryResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -124,7 +124,7 @@
<xs:element name="ReturnDatatable_MSSQL_ECMResponse"> <xs:element name="ReturnDatatable_MSSQL_ECMResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q8="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnDatatable_MSSQL_ECMResult" nillable="true" type="q8:TableResult" /> <xs:element xmlns:q8="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnDatatable_MSSQL_ECMResult" nillable="true" type="q8:TableResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -138,7 +138,7 @@
<xs:element name="ReturnScalar_MSSQL_ECMResponse"> <xs:element name="ReturnScalar_MSSQL_ECMResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ReturnScalar_MSSQL_ECMResult" nillable="true" type="q9:ScalarResult" /> <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ReturnScalar_MSSQL_ECMResult" nillable="true" type="q9:ScalarResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -152,7 +152,7 @@
<xs:element name="ExecuteNonQuery_MSSQL_ECMResponse"> <xs:element name="ExecuteNonQuery_MSSQL_ECMResponse">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element xmlns:q10="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results" minOccurs="0" name="ExecuteNonQuery_MSSQL_ECMResult" nillable="true" type="q10:NonQueryResult" /> <xs:element xmlns:q10="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages" minOccurs="0" name="ExecuteNonQuery_MSSQL_ECMResult" nillable="true" type="q10:NonQueryResult" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>

View File

@ -26,7 +26,7 @@
<MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="63e6618a-fa84-4922-b771-92728dee5bd0" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="63e6618a-fa84-4922-b771-92728dee5bd0" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="DigitalData.Services.EDMIService.xsd" MetadataType="Schema" ID="8b75b395-459e-4678-b979-5e50ebd6a173" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="DigitalData.Services.EDMIService.xsd" MetadataType="Schema" ID="8b75b395-459e-4678-b979-5e50ebd6a173" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="service.xsd" MetadataType="Schema" ID="1d0f216a-7f01-4129-a6bf-26e91c5e631d" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="1d0f216a-7f01-4129-a6bf-26e91c5e631d" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="DigitalData.Services.EDMIService.Results.xsd" MetadataType="Schema" ID="229ec0eb-3ad2-4768-b900-0fe658c77294" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="DigitalData.Services.EDMIService.Messages.xsd" MetadataType="Schema" ID="e5cf75a6-ec46-4c8a-867b-a1c0a9ce8894" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="System.xsd" MetadataType="Schema" ID="e0db7004-6943-4cf8-b88f-4811ed14a341" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="System.xsd" MetadataType="Schema" ID="e0db7004-6943-4cf8-b88f-4811ed14a341" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="6c7bdb47-eea4-4d03-bc52-9747c865bbf0" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="6c7bdb47-eea4-4d03-bc52-9747c865bbf0" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />
<MetadataFile FileName="Message.xsd" MetadataType="Schema" ID="2589e82f-d68f-4843-b153-a80edf895f82" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" /> <MetadataFile FileName="Message.xsd" MetadataType="Schema" ID="2589e82f-d68f-4843-b153-a80edf895f82" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9000/DigitalData/Services/Main/mex" />

View File

@ -18,7 +18,8 @@ Namespace EDMIServiceReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _ <System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _ System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="BaseResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results"), _ System.Runtime.Serialization.DataContractAttribute(Name:="BaseResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages"& _
""), _
System.SerializableAttribute(), _ System.SerializableAttribute(), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ScalarResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.ScalarResult)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NonQueryResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.NonQueryResult)), _
@ -84,7 +85,8 @@ Namespace EDMIServiceReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _ <System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _ System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ScalarResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results"), _ System.Runtime.Serialization.DataContractAttribute(Name:="ScalarResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages"& _
""), _
System.SerializableAttribute(), _ System.SerializableAttribute(), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.TableResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.TableResult)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.BaseResult)), _ System.Runtime.Serialization.KnownTypeAttribute(GetType(EDMIServiceReference.BaseResult)), _
@ -112,7 +114,8 @@ Namespace EDMIServiceReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _ <System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _ System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="NonQueryResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results"), _ System.Runtime.Serialization.DataContractAttribute(Name:="NonQueryResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages"& _
""), _
System.SerializableAttribute()> _ System.SerializableAttribute()> _
Partial Public Class NonQueryResult Partial Public Class NonQueryResult
Inherits EDMIServiceReference.BaseResult Inherits EDMIServiceReference.BaseResult
@ -120,7 +123,8 @@ Namespace EDMIServiceReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _ <System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _ System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="TableResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Results"), _ System.Runtime.Serialization.DataContractAttribute(Name:="TableResult", [Namespace]:="http://schemas.datacontract.org/2004/07/DigitalData.Services.EDMIService.Messages"& _
""), _
System.SerializableAttribute()> _ System.SerializableAttribute()> _
Partial Public Class TableResult Partial Public Class TableResult
Inherits EDMIServiceReference.BaseResult Inherits EDMIServiceReference.BaseResult

View File

@ -72,6 +72,7 @@
<Import Include="System.Threading.Tasks" /> <Import Include="System.Threading.Tasks" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Rights.vb" />
<Compile Include="Client\Channel.vb" /> <Compile Include="Client\Channel.vb" />
<Compile Include="Connected Services\EDMIServiceReference\Reference.vb"> <Compile Include="Connected Services\EDMIServiceReference\Reference.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
@ -123,7 +124,7 @@
<None Include="Connected Services\EDMIServiceReference\DigitalData.Modules.EDMI.API.EDMIServiceReference.TableResult.datasource"> <None Include="Connected Services\EDMIServiceReference\DigitalData.Modules.EDMI.API.EDMIServiceReference.TableResult.datasource">
<DependentUpon>Reference.svcmap</DependentUpon> <DependentUpon>Reference.svcmap</DependentUpon>
</None> </None>
<None Include="Connected Services\EDMIServiceReference\DigitalData.Services.EDMIService.Results.xsd"> <None Include="Connected Services\EDMIServiceReference\DigitalData.Services.EDMIService.Messages.xsd">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</None> </None>
<None Include="Connected Services\EDMIServiceReference\DigitalData.Services.EDMIService.wsdl" /> <None Include="Connected Services\EDMIServiceReference\DigitalData.Services.EDMIService.wsdl" />

View File

@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben: ' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("0.0.0.2")> <Assembly: AssemblyVersion("0.0.0.3")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@ -0,0 +1,7 @@
Public Class Rights
Public Enum AccessRight
VIEW_ONLY = 1
VIEW_EXPORT = 2
FULL = 4
End Enum
End Class

View File

@ -22,6 +22,24 @@ Public Class Utils
Return [Enum].Parse(GetType(T), value) Return [Enum].Parse(GetType(T), value)
End Function End Function
''' <summary>
''' Converts an Integer value to the given Enum
''' </summary>
''' <typeparam name="T">The Enum Type</typeparam>
''' <param name="value">The integer value to convert</param>
Public Shared Function ToEnum(Of T)(value As Integer) As T
Return [Enum].ToObject(GetType(T), value)
End Function
''' <summary>
''' Converts a Long value to the given Enum
''' </summary>
''' <typeparam name="T">The Enum Type</typeparam>
''' <param name="value">The long value to convert</param>
Public Shared Function ToEnum(Of T)(value As Long) As T
Return [Enum].ToObject(GetType(T), value)
End Function
Public Shared Function ToBoolean(input As String) As Boolean Public Shared Function ToBoolean(input As String) As Boolean
If String.IsNullOrEmpty(input) Then Return False If String.IsNullOrEmpty(input) Then Return False
Return (input.Trim().ToLower() = "true") OrElse (input.Trim() = "1") Return (input.Trim().ToLower() = "true") OrElse (input.Trim() = "1")

View File

@ -1,14 +1,13 @@
Imports DigitalData.Modules.Database Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Filesystem
Imports DigitalData.Modules.Language Imports DigitalData.Modules.Language
Imports DigitalData.Modules Imports DigitalData.Modules
Imports System.IO Imports System.IO
Imports System.ServiceModel Imports System.ServiceModel
Imports System.Data.SqlClient Imports System.Data.SqlClient
Imports DigitalData.Services.EDMIService.Results
Imports System.ServiceModel.Description Imports System.ServiceModel.Description
Imports System.ServiceModel.Channels Imports DigitalData.Services.EDMIService.Messages
Imports DigitalData.Modules.EDMI.API.Rights
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession)> <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession)>
Public Class EDMIService Public Class EDMIService
@ -24,10 +23,9 @@ Public Class EDMIService
Public Shared GlobalState As GlobalState Public Shared GlobalState As GlobalState
Public Shared Scheduler As Scheduler Public Shared Scheduler As Scheduler
Private ReadOnly _logger As Logger Private ReadOnly _Logger As Logger
Private ReadOnly _Debug As Boolean = False
Private ReadOnly _debug As Boolean = False Private ReadOnly _Username As String
Private ReadOnly _username As String
Public Shared Sub Configure(Config As ServiceConfiguration) Public Shared Sub Configure(Config As ServiceConfiguration)
Dim oBaseAddress = Config.BaseAddresses.Item(0) Dim oBaseAddress = Config.BaseAddresses.Item(0)
@ -37,8 +35,6 @@ Public Class EDMIService
Dim oDescription = ContractDescription.GetContract(GetType(IEDMIService), GetType(EDMIService)) Dim oDescription = ContractDescription.GetContract(GetType(IEDMIService), GetType(EDMIService))
Dim oEndpoint As New ServiceEndpoint(oDescription, oBinding, oAddress) Dim oEndpoint As New ServiceEndpoint(oDescription, oBinding, oAddress)
Config.AddServiceEndpoint(oEndpoint) Config.AddServiceEndpoint(oEndpoint)
Config.Description.Behaviors.Add(New ServiceDebugBehavior With {.IncludeExceptionDetailInFaults = True}) Config.Description.Behaviors.Add(New ServiceDebugBehavior With {.IncludeExceptionDetailInFaults = True})
End Sub End Sub
@ -48,12 +44,12 @@ Public Class EDMIService
Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext
Dim oUsername = StripDomainFromUsername(oOperationContext.ServiceSecurityContext.WindowsIdentity.Name) Dim oUsername = StripDomainFromUsername(oOperationContext.ServiceSecurityContext.WindowsIdentity.Name)
_username = oUsername _Username = oUsername
_logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()
_logger.Debug("New Request by User [{0}]", _username) _Logger.Debug("New Request by User [{0}]", _Username)
End Sub End Sub
Public Function StripDomainFromUsername(UserName As String) Private Function StripDomainFromUsername(UserName As String)
If UserName.Contains("\") Then If UserName.Contains("\") Then
Return UserName.Split("\")(1) Return UserName.Split("\")(1)
ElseIf UserName.Contains("@") Then ElseIf UserName.Contains("@") Then
@ -63,34 +59,21 @@ Public Class EDMIService
End If End If
End Function End Function
#Region "=== Authorization ==="
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 ===" #Region "=== Heartbeat ==="
Public Function Heartbeat() As Boolean Implements IEDMIService.Heartbeat Public Function Heartbeat() As Boolean Implements IEDMIService.Heartbeat
Return True Return True
End Function End Function
#End Region #End Region
#Region "Database" #Region "=== Database ==="
Public Function ReturnDatatableFromCache(Name As String, FilterExpression As String, SortByColumn As String) As TableResult Implements IEDMIService.ReturnDatatableFromCache Public Function ReturnDatatableFromCache(Name As String, FilterExpression As String, SortByColumn As String) As TableResult Implements IEDMIService.ReturnDatatableFromCache
Try Try
_logger.Info($"ReturnDatatableFromCache, Datatable: {Name}") _Logger.Info($"ReturnDatatableFromCache, Datatable: {Name}")
Dim oDataset As DataSet = Scheduler.DataSet Dim oDataset As DataSet = GlobalState.TableStore
Dim oDataTable As DataTable = Nothing Dim oDataTable As DataTable = Nothing
_logger.Debug("DataSet contains [{0}] datatables", oDataset.Tables.Count) _Logger.Debug("DataSet contains [{0}] datatables", oDataset.Tables.Count)
If oDataset.Tables.Contains(Name) Then If oDataset.Tables.Contains(Name) Then
oDataTable = oDataset.Tables.Item(Name).Copy() oDataTable = oDataset.Tables.Item(Name).Copy()
@ -111,16 +94,16 @@ Public Class EDMIService
oFilteredTable.TableName = Name oFilteredTable.TableName = Name
End If End If
_logger.Debug("Datatable Stats for [{0}]:", Name) _Logger.Debug("Datatable Stats for [{0}]:", Name)
_logger.Debug("Unfiltered: [{0}] rows", oDataTable.Rows.Count) _Logger.Debug("Unfiltered: [{0}] rows", oDataTable.Rows.Count)
_logger.Debug("Filtered: [{0}] rows", oFilteredTable.Rows.Count) _Logger.Debug("Filtered: [{0}] rows", oFilteredTable.Rows.Count)
Return New TableResult(oFilteredTable) Return New TableResult(oFilteredTable)
Else Else
Throw New ApplicationException($"DataTable {Name} does not exist") Throw New ApplicationException($"DataTable {Name} does not exist")
End If End If
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New TableResult(ex.Message) Return New TableResult(ex.Message)
End Try End Try
End Function End Function
@ -129,33 +112,33 @@ Public Class EDMIService
#Region "=== Database (MSSQL IDB) ===" #Region "=== Database (MSSQL IDB) ==="
Public Function ReturnDatatable_MSSQL_IDB(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_MSSQL_IDB Public Function ReturnDatatable_MSSQL_IDB(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_MSSQL_IDB
Try Try
_logger.Info($"ReturnDatatable_MSSQL_IDB, SQL: {SQL}") _Logger.Info($"ReturnDatatable_MSSQL_IDB, SQL: {SQL}")
Dim oResult As DataTable = MSSQL_IDB.GetDatatable(SQL) Dim oResult As DataTable = MSSQL_IDB.GetDatatable(SQL)
Return New TableResult(oResult) Return New TableResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New TableResult(ex.Message) Return New TableResult(ex.Message)
End Try End Try
End Function End Function
Public Function ReturnScalar_MSSQL_IDB(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_MSSQL_IDB Public Function ReturnScalar_MSSQL_IDB(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_MSSQL_IDB
Try Try
_logger.Info($"ReturnScalar_MSSQL_IDB, SQL: {SQL}") _Logger.Info($"ReturnScalar_MSSQL_IDB, SQL: {SQL}")
Dim oResult As Object = MSSQL_IDB.GetScalarValue(SQL) Dim oResult As Object = MSSQL_IDB.GetScalarValue(SQL)
Return New ScalarResult(oResult) Return New ScalarResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New ScalarResult(ex.Message) Return New ScalarResult(ex.Message)
End Try End Try
End Function End Function
Public Function ExecuteNonQuery_MSSQL_IDB(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_MSSQL_IDB Public Function ExecuteNonQuery_MSSQL_IDB(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_MSSQL_IDB
Try Try
_logger.Info($"ExecuteNonQuery_MSSQL_IDB, SQL: {SQL}") _Logger.Info($"ExecuteNonQuery_MSSQL_IDB, SQL: {SQL}")
Dim oResult As Boolean = MSSQL_IDB.ExecuteNonQuery(SQL) Dim oResult As Boolean = MSSQL_IDB.ExecuteNonQuery(SQL)
Return New NonQueryResult() Return New NonQueryResult()
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New NonQueryResult(ex.Message) Return New NonQueryResult(ex.Message)
End Try End Try
End Function End Function
@ -164,33 +147,33 @@ Public Class EDMIService
#Region "=== Database (MSSQL ECM) ===" #Region "=== Database (MSSQL ECM) ==="
Public Function ReturnDatatable_MSSQL_ECM(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_MSSQL_ECM Public Function ReturnDatatable_MSSQL_ECM(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_MSSQL_ECM
Try Try
_logger.Info($"ReturnDatatable_MSSQL_ECM, SQL: {SQL}") _Logger.Info($"ReturnDatatable_MSSQL_ECM, SQL: {SQL}")
Dim oResult As DataTable = MSSQL_ECM.GetDatatable(SQL) Dim oResult As DataTable = MSSQL_ECM.GetDatatable(SQL)
Return New TableResult(oResult) Return New TableResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New TableResult(ex.Message) Return New TableResult(ex.Message)
End Try End Try
End Function End Function
Public Function ReturnScalar_MSSQL_ECM(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_MSSQL_ECM Public Function ReturnScalar_MSSQL_ECM(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_MSSQL_ECM
Try Try
_logger.Info($"ReturnScalar_MSSQL_ECM, SQL: {SQL}") _Logger.Info($"ReturnScalar_MSSQL_ECM, SQL: {SQL}")
Dim oResult As Object = MSSQL_ECM.GetScalarValue(SQL) Dim oResult As Object = MSSQL_ECM.GetScalarValue(SQL)
Return New ScalarResult(oResult) Return New ScalarResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New ScalarResult(ex.Message) Return New ScalarResult(ex.Message)
End Try End Try
End Function End Function
Public Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_MSSQL_ECM Public Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_MSSQL_ECM
Try Try
_logger.Info($"ExecuteNonQuery_MSSQL_ECM, SQL: {SQL}") _Logger.Info($"ExecuteNonQuery_MSSQL_ECM, SQL: {SQL}")
Dim oResult As Boolean = MSSQL_ECM.ExecuteNonQuery(SQL) Dim oResult As Boolean = MSSQL_ECM.ExecuteNonQuery(SQL)
Return New NonQueryResult() Return New NonQueryResult()
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New NonQueryResult(ex.Message) Return New NonQueryResult(ex.Message)
End Try End Try
End Function End Function
@ -199,45 +182,44 @@ Public Class EDMIService
#Region "=== Database (Firebird) ===" #Region "=== Database (Firebird) ==="
Public Function ReturnDatatable_Firebird(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_Firebird Public Function ReturnDatatable_Firebird(SQL As String) As TableResult Implements IEDMIService.ReturnDatatable_Firebird
Try Try
_logger.Info($"ReturnDatatable, SQL: {SQL}") _Logger.Info($"ReturnDatatable, SQL: {SQL}")
Dim oResult As DataTable = Firebird.GetDatatable(SQL) Dim oResult As DataTable = Firebird.GetDatatable(SQL)
Return New TableResult(oResult) Return New TableResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New TableResult(ex.Message) Return New TableResult(ex.Message)
End Try End Try
End Function End Function
Public Function ReturnScalar_Firebird(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_Firebird Public Function ReturnScalar_Firebird(SQL As String) As ScalarResult Implements IEDMIService.ReturnScalar_Firebird
Try Try
_logger.Info($"ReturnScalar, SQL: {SQL}") _Logger.Info($"ReturnScalar, SQL: {SQL}")
Dim oResult As Object = Firebird.GetScalarValue(SQL) Dim oResult As Object = Firebird.GetScalarValue(SQL)
Return New ScalarResult(oResult) Return New ScalarResult(oResult)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New ScalarResult(ex.Message) Return New ScalarResult(ex.Message)
End Try End Try
End Function End Function
Public Function ExecuteNonQuery_Firebird(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_Firebird Public Function ExecuteNonQuery_Firebird(SQL As String) As NonQueryResult Implements IEDMIService.ExecuteNonQuery_Firebird
Try Try
_logger.Info($"ExecuteNonQuery, SQL: {SQL}") _Logger.Info($"ExecuteNonQuery, SQL: {SQL}")
Dim oResult As Boolean = Firebird.ExecuteNonQuery(SQL) Dim oResult As Boolean = Firebird.ExecuteNonQuery(SQL)
Return New NonQueryResult() Return New NonQueryResult()
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Return New NonQueryResult(ex.Message) Return New NonQueryResult(ex.Message)
End Try End Try
End Function End Function
#End Region #End Region
#Region "=== Document ===" #Region "=== Document ==="
''' <summary> ''' <summary>
''' Imports a file according to ObjectStoreId ''' Imports a file according to ObjectStoreId
''' </summary> ''' </summary>
''' <returns></returns> ''' <returns></returns>
Public Function ImportFile(Data As Messages.DocumentImportRequest) As Messages.DocumentImportResponse Implements IEDMIService.ImportFile Public Function ImportFile(Data As DocumentImportRequest) As DocumentImportResponse Implements IEDMIService.ImportFile
Dim oObjectStore = GlobalState.ObjectStores. Dim oObjectStore = GlobalState.ObjectStores.
Where(Function(s) s.Id = Data.ObjectStoreId). Where(Function(s) s.Id = Data.ObjectStoreId).
FirstOrDefault() FirstOrDefault()
@ -263,14 +245,14 @@ Public Class EDMIService
Try Try
Directory.CreateDirectory(oDirectoryPath) Directory.CreateDirectory(oDirectoryPath)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Throw New FaultException(ex.Message) Throw New FaultException(ex.Message)
End Try End Try
Try Try
Dim oVersionedFileName As String = Filesystem.GetVersionedFilename(oAbsolutePath) Dim oVersionedFileName As String = Filesystem.GetVersionedFilename(oAbsolutePath)
_logger.Info("ImportFile: Saving file [{0}] to path [{1}]", Data.FileName, oVersionedFileName) _Logger.Info("ImportFile: Saving file [{0}] to path [{1}]", Data.FileName, oVersionedFileName)
Using oStream = New FileStream(oVersionedFileName, FileMode.CreateNew) Using oStream = New FileStream(oVersionedFileName, FileMode.CreateNew)
oStream.Write(Data.Contents, 0, Data.Contents.Length) oStream.Write(Data.Contents, 0, Data.Contents.Length)
oStream.Flush(True) oStream.Flush(True)
@ -281,7 +263,7 @@ Public Class EDMIService
Dim oCommand As New SqlCommand("PRIDB_NEW_DOCUMENT") Dim oCommand As New SqlCommand("PRIDB_NEW_DOCUMENT")
oCommand.Parameters.AddWithValue("@OBJ_ST_ID", 1) oCommand.Parameters.AddWithValue("@OBJ_ST_ID", 1)
oCommand.Parameters.AddWithValue("@REL_PATH", oRelativePath) oCommand.Parameters.AddWithValue("@REL_PATH", oRelativePath)
oCommand.Parameters.AddWithValue("@WHO", _username) oCommand.Parameters.AddWithValue("@WHO", _Username)
oCommand.Parameters.AddWithValue("@REF_DOCID", 0) oCommand.Parameters.AddWithValue("@REF_DOCID", 0)
oCommand.Parameters.Add(New SqlParameter("@IDB_OBJ_ID", SqlDbType.BigInt)) oCommand.Parameters.Add(New SqlParameter("@IDB_OBJ_ID", SqlDbType.BigInt))
@ -289,12 +271,12 @@ Public Class EDMIService
Return New Messages.DocumentImportResponse() With {.ObjectId = oObjectId} Return New Messages.DocumentImportResponse() With {.ObjectId = oObjectId}
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Throw New FaultException(ex.Message) Throw New FaultException(ex.Message)
End Try End Try
End Function End Function
Public Function GetFileByObjectId(Data As Messages.DocumentStreamRequest) As Messages.DocumentStreamResponse Implements IEDMIService.GetFileByObjectId Public Function GetFileByObjectId(Data As DocumentStreamRequest) As DocumentStreamResponse Implements IEDMIService.GetFileByObjectId
Try Try
Dim oSQL As String = $"SELECT ObjectStoreId FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}" Dim oSQL As String = $"SELECT ObjectStoreId FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}"
Dim oObjectStoreId = MSSQL_IDB.GetScalarValue(oSQL) Dim oObjectStoreId = MSSQL_IDB.GetScalarValue(oSQL)
@ -306,7 +288,6 @@ Public Class EDMIService
Dim oSQL2 As String = $"SELECT DocRelativePath FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}" Dim oSQL2 As String = $"SELECT DocRelativePath FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}"
Dim oPath As String = MSSQL_IDB.GetScalarValue(oSQL2) Dim oPath As String = MSSQL_IDB.GetScalarValue(oSQL2)
If IsNothing(oPath) Then If IsNothing(oPath) Then
Throw New FaultException($"Object [{Data.ObjectId}] does not exist in database!") Throw New FaultException($"Object [{Data.ObjectId}] does not exist in database!")
End If End If
@ -314,7 +295,7 @@ Public Class EDMIService
Dim EDMIPath As New EDMI.File.Path(LogConfig, oObjectStore.Path) Dim EDMIPath As New EDMI.File.Path(LogConfig, oObjectStore.Path)
Dim oFullPath = EDMIPath.GetFullPathFromRelativePath(oPath) Dim oFullPath = EDMIPath.GetFullPathFromRelativePath(oPath)
_logger.Debug("GetFileByObjectId: Loading file [{0}]", oFullPath) _Logger.Debug("GetFileByObjectId: Loading file [{0}]", oFullPath)
Dim oFileInfo As New FileInfo(oFullPath) Dim oFileInfo As New FileInfo(oFullPath)
@ -335,27 +316,64 @@ Public Class EDMIService
Return oMessage Return oMessage
Catch ex As IOException Catch ex As IOException
_logger.Error(ex) _Logger.Error(ex)
Throw New FaultException($"Object [{Data.ObjectId}] could not be streamed!") Throw New FaultException($"Object [{Data.ObjectId}] could not be streamed!")
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Throw New FaultException(ex.Message) Throw New FaultException(ex.Message)
End Try End Try
End Function End Function
Public Function ListFilesForUser() As Messages.DocumentListResponse Implements IEDMIService.ListFilesForUser Public Function ListFilesForUser() As DocumentListResponse Implements IEDMIService.ListFilesForUser
Try Try
Dim oSQL = $"SELECT * FROM VWIDB_DOC_DATA" Dim oSQL = $"SELECT * FROM VWIDB_DOC_DATA"
Dim oDatatable As DataTable = MSSQL_IDB.GetDatatable(oSQL) Dim oDatatable As DataTable = MSSQL_IDB.GetDatatable(oSQL)
oDatatable.TableName = "DocumentList" oDatatable.TableName = "DocumentList"
Return New Messages.DocumentListResponse() With { Return New DocumentListResponse() With {
.Datatable = oDatatable .Datatable = oDatatable
} }
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _Logger.Error(ex)
Throw New FaultException(ex.Message) Throw New FaultException(ex.Message)
End Try End Try
End Function End Function
#End Region #End Region
#Region "=== Access Rights ==="
Public Function GetAccessRight(UserId As Long, ObjectId As Long) As AccessRightResult Implements IEDMIService.GetAccessRight
Try
Dim oTableName As String = "TBIDB_ACCESSRIGHT"
If Not GlobalState.TableStore.Tables.Contains(oTableName) Then
_Logger.Warn("GetAccessRight: Access right table does not exist!")
Return New AccessRightResult(AccessRight.VIEW_ONLY)
End If
Dim oTable As DataTable = GlobalState.TableStore.Tables.Item(oTableName)
Dim oRows As List(Of DataRow) = oTable.Select($"IDB_OBJ_ID = {ObjectId} AND USR_ID = {UserId}").ToList()
Dim oRight As AccessRight = AccessRight.VIEW_ONLY
If oRows.Count = 0 Then
_Logger.Warn("GetAccessRight: Access right assignment does not exist for user [{0}] on object [{1}]", UserId, ObjectId)
Return New AccessRightResult(AccessRight.VIEW_ONLY)
Else
If oRows.Count > 1 Then
_Logger.Warn("GetAccessRight: More than one access right assignment found for user [{0}] on object [{1}]", UserId, ObjectId)
End If
Dim oRow As DataRow = oRows.First()
Dim oRightAsInt = oRow.Item("ACCESSRIGHT")
oRight = Utils.ToEnum(Of AccessRight)(oRightAsInt)
End If
Return New AccessRightResult(oRight)
Catch ex As Exception
_Logger.Warn("GetAccessRight: Exception while getting access right for user [{0}] on object [{1}]", UserId, ObjectId)
_Logger.Error(ex)
Return New AccessRightResult(ex)
End Try
End Function
#End Region
End Class End Class

View File

@ -126,7 +126,9 @@
<ItemGroup> <ItemGroup>
<Compile Include="Config.vb" /> <Compile Include="Config.vb" />
<Compile Include="GlobalState.vb" /> <Compile Include="GlobalState.vb" />
<Compile Include="Messages.vb" /> <Compile Include="Results.vb" />
<Compile Include="Results\AccessRightResult.vb" />
<Compile Include="Results\Messages.vb" />
<Compile Include="Results\BaseResult.vb" /> <Compile Include="Results\BaseResult.vb" />
<Compile Include="Exceptions.vb" /> <Compile Include="Exceptions.vb" />
<Compile Include="Results\DatabaseResult.vb" /> <Compile Include="Results\DatabaseResult.vb" />

View File

@ -9,6 +9,8 @@ Public Class GlobalState
Public Property ObjectStores As New List(Of ObjectStore) Public Property ObjectStores As New List(Of ObjectStore)
Public Property TableStore As New DataSet
Public Sub New(LogConfig As LogConfig, MSSQL_IDB As MSSQLServer, MSSQL_ECM As MSSQLServer) Public Sub New(LogConfig As LogConfig, MSSQL_IDB As MSSQLServer, MSSQL_ECM As MSSQLServer)
_LogConfig = LogConfig _LogConfig = LogConfig
_Logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()

View File

@ -1,6 +1,7 @@
Imports System.IO Imports System.IO
Imports System.ServiceModel Imports System.ServiceModel
Imports DigitalData.Modules.Filesystem Imports DigitalData.Modules.Filesystem
Imports DigitalData.Services.EDMIService.Messages
Imports DigitalData.Services.EDMIService.Results Imports DigitalData.Services.EDMIService.Results
<ServiceContract(Name:="IEDMIService", [Namespace]:="http://DigitalData.Services.EDMIService")> <ServiceContract(Name:="IEDMIService", [Namespace]:="http://DigitalData.Services.EDMIService")>
@ -49,16 +50,19 @@ Interface IEDMIService
Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult Function ExecuteNonQuery_MSSQL_ECM(SQL As String) As NonQueryResult
#End Region #End Region
#Region "Access Rights"
Function GetAccessRight(UserId As Long, ObjectId As Long) As AccessRightResult
#End Region
#Region "Document (New)" #Region "Document (New)"
<OperationContract> <OperationContract>
Function ImportFile(Data As Messages.DocumentImportRequest) As Messages.DocumentImportResponse Function ImportFile(Data As DocumentImportRequest) As DocumentImportResponse
'Function ImportFile(FileName As String, Contents As Byte(), ObjectStoreId As Int64, DocumentType As String, Optional RetentionDays As Int64 = Nothing) As Messages.DocumentImportResponse
<OperationContract> <OperationContract>
Function GetFileByObjectId(Data As Messages.DocumentStreamRequest) As Messages.DocumentStreamResponse Function GetFileByObjectId(Data As DocumentStreamRequest) As DocumentStreamResponse
<OperationContract> <OperationContract>
Function ListFilesForUser() As Messages.DocumentListResponse Function ListFilesForUser() As DocumentListResponse
#End Region #End Region
End Interface End Interface

View File

@ -0,0 +1,2 @@
Friend Class Results
End Class

View File

@ -0,0 +1,23 @@
Imports System.Runtime.Serialization
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)
MyBase.New()
Right = AccessRight
End Sub
Public Sub New(Exception As Exception)
MyBase.New()
OK = False
ErrorMessage = Exception.Message
End Sub
End Class
End Namespace

View File

@ -1,6 +1,6 @@
Imports System.Runtime.Serialization Imports System.Runtime.Serialization
Namespace Results Namespace Messages
<Serializable> <Serializable>
<DataContract> <DataContract>
<KnownType(GetType(DBNull))> <KnownType(GetType(DBNull))>
@ -14,9 +14,14 @@ Namespace Results
OK = True OK = True
End Sub End Sub
Public Sub New(ErrorMessage As String) Public Sub New(Message As String)
OK = False OK = False
Me.ErrorMessage = ErrorMessage ErrorMessage = Message
End Sub
Public Sub New(Exception As Exception)
OK = False
ErrorMessage = Exception.Message
End Sub End Sub
End Class End Class
End Namespace End Namespace

View File

@ -1,6 +1,6 @@
Imports System.Runtime.Serialization Imports System.Runtime.Serialization
Namespace Results Namespace Messages
<Serializable> <Serializable>
<DataContract> <DataContract>

View File

@ -20,20 +20,12 @@ Public Class Scheduler
Private Const JOB_GROUP As String = "DatatableJobs" Private Const JOB_GROUP As String = "DatatableJobs"
Public ReadOnly Property DataSet As DataSet Public Sub New(LogConfig As LogConfig, MSSQL_ECM As MSSQLServer, TableStore As DataSet)
Get
Return _JobListener.Dataset
End Get
End Property
Public Sub New(LogConfig As LogConfig, MSSQL_ECM As MSSQLServer)
_LogConfig = LogConfig _LogConfig = LogConfig
_Logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()
_Factory = New StdSchedulerFactory(_Props) _Factory = New StdSchedulerFactory(_Props)
_MSSQL = MSSQL_ECM _MSSQL = MSSQL_ECM
_JobListener = New JobListener(LogConfig, _MSSQL, TableStore)
Dim oDataSet As New DataSet()
_JobListener = New JobListener(LogConfig, _MSSQL, oDataSet)
Logging.LogProvider.SetCurrentLogProvider(New LogProvider(_Logger)) Logging.LogProvider.SetCurrentLogProvider(New LogProvider(_Logger))
End Sub End Sub
@ -59,48 +51,28 @@ Public Class Scheduler
Dim oDefinition As String = oRow.Item("CRON_DEFINITION") Dim oDefinition As String = oRow.Item("CRON_DEFINITION")
Dim oTitle As String = oRow.Item("TITLE") Dim oTitle As String = oRow.Item("TITLE")
Dim oGuid As Integer = oRow.Item("GUID") Dim oGuid As Integer = oRow.Item("GUID")
Dim oCronDetails As DataTable = Await GetCronJobDetails(oGuid)
If oCronDetails IsNot Nothing Then Dim oTrigger As ITrigger
_Logger.Debug("Loaded job [{0}]", oTitle) Dim oJob As IJobDetail
_Logger.Debug("Job details: {0}", oCronDetails.Rows.Count) Dim oIdentity As String = $"CRON-JOB-{oGuid}"
_Logger.Debug("Job definition: {0}", oDefinition)
For Each oRowDetail As DataRow In oCronDetails.Rows oTrigger = TriggerBuilder.Create().
Dim oTrigger As ITrigger WithIdentity(oIdentity, JOB_GROUP).
Dim oJob As IJobDetail WithCronSchedule(oDefinition).
Dim oDataTableName As String = oRowDetail.Item("DT_NAME") Build()
Dim oRunOnStartup As Boolean = oRowDetail.Item("RUN_ON_STARTUP")
Dim oJobIdentity As String = $"{oGuid}~{oDataTableName}"
Dim oBaseTrigger = TriggerBuilder.Create(). oJob = JobBuilder.Create(Of DatatableJob)().
WithIdentity(oJobIdentity, JOB_GROUP). WithIdentity(oIdentity, JOB_GROUP).
WithCronSchedule(oDefinition) UsingJobData(New JobDataMap From {
{"LogConfig", _LogConfig},
{"MSSQL", _MSSQL},
{"CronJobId", oGuid},
{"CronJobTitle", oTitle}
}).
Build()
' Run directly at startup if configured Await _Scheduler.ScheduleJob(oJob, oTrigger)
If oRunOnStartup Then _Logger.Debug("Scheduled a new job for Cron Job [{0}]", oTitle)
oBaseTrigger = oBaseTrigger.StartNow()
End If
oTrigger = oBaseTrigger.Build()
oJob = JobBuilder.Create(Of DatatableJob)().
WithIdentity(oJobIdentity, JOB_GROUP).
UsingJobData(New JobDataMap() From {
{"LogConfig", _LogConfig},
{"MSSQL", _MSSQL},
{"CronJobId", oGuid},
{"CronJobTitle", oTitle},
{"CronJobDetails", oRowDetail}
}).
Build()
Await _Scheduler.ScheduleJob(oJob, oTrigger)
_Logger.Debug("Scheduled a new job for Cron Job Id [{0}]", oGuid)
Next
Else
_Logger.Warn("CronJob Details for CronJob [{0}] could not be fetched!", oGuid)
End If
Next Next
Else Else
_Logger.Warn("CronJobs could not be fetched!") _Logger.Warn("CronJobs could not be fetched!")

View File

@ -9,58 +9,127 @@ Imports Quartz
Public Class DatatableJob Public Class DatatableJob
Implements IJob Implements IJob
Private _MSSQL As MSSQLServer
Public Function Execute(context As IJobExecutionContext) As Task Implements IJob.Execute Public Function Execute(context As IJobExecutionContext) As Task Implements IJob.Execute
Dim oJobData = context.MergedJobDataMap Dim oJobData = context.MergedJobDataMap
Dim oLogConfig As LogConfig = oJobData.Item("LogConfig") Dim oLogConfig As LogConfig = oJobData.Item("LogConfig")
Dim oCronJobId As Integer = oJobData.Item("CronJobId")
Dim oCronJobTitle As String = oJobData.Item("CronJobTitle")
Dim oLogger As Logger = oLogConfig.GetLogger() Dim oLogger As Logger = oLogConfig.GetLogger()
Dim oDetailRow As DataRow = oJobData.Item("CronJobDetails")
Dim oDatatableName As String = NotNull(oDetailRow.Item("DT_NAME"), String.Empty) Dim oResult As New JobResult()
oLogger.Info("Running Datatable Job [{0}]/[{1}]", context.JobDetail.Key, oCronJobTitle)
Try Try
Dim oCronJobTitle As String = oJobData.Item("CronJobTitle")
Dim oMSSQL As MSSQLServer = oJobData.Item("MSSQL") Dim oMSSQL As MSSQLServer = oJobData.Item("MSSQL")
Dim oCronSQL As String = $"SELECT * FROM TBAPPSERV_CRON_DETAIL WHERE CRON_ID = {oCronJobId}"
Dim oCronDetails As DataTable = oMSSQL.GetDatatable(oCronSQL)
Dim oConnectionId As Integer = NotNull(oDetailRow.Item("CON_ID"), String.Empty) For Each oRow As DataRow In oCronDetails.Rows
Dim oTitle As String = NotNull(oDetailRow.Item("TITLE"), String.Empty) Dim oConnectionId As Integer = NotNull(oRow.Item("CON_ID"), String.Empty)
Dim oSQL As String = NotNull(oDetailRow.Item("COMMAND"), String.Empty) Dim oTitle As String = NotNull(oRow.Item("TITLE"), String.Empty)
Dim oSQL As String = NotNull(oRow.Item("COMMAND"), String.Empty)
Dim oDatatableName As String = NotNull(oRow.Item("DT_NAME"), String.Empty)
oLogger.Debug("Running Command-Job [{0}]", oTitle) oLogger.Debug("Running Command-Job [{0}]", oTitle)
oLogger.Debug("Datatable Name: {0}", oDatatableName) oLogger.Debug("Datatable Name: {0}", oDatatableName)
oLogger.Debug("Connection Id: {0}", oConnectionId) oLogger.Debug("Connection Id: {0}", oConnectionId)
Dim oConnectionString = oMSSQL.Get_ConnectionStringforID(oConnectionId) Dim oConnectionString = oMSSQL.Get_ConnectionStringforID(oConnectionId)
Dim oTable = oMSSQL.GetDatatableWithConnection(oSQL, oConnectionString)
oTable.TableName = oDatatableName
oLogger.Debug("Result Datatable [{0}] contains [{1}] rows", oTable.TableName, oTable.Rows.Count)
Dim oTable = oMSSQL.GetDatatableWithConnection(oSQL, oConnectionString) Dim oResultTable = New JobResult.ResultTable() With {
oTable.TableName = oDatatableName .Table = oTable,
oLogger.Debug("Result Datatable [{0}] contains [{1}] rows", oTable.TableName, oTable.Rows.Count) .DetailRow = oRow
}
Dim oResult = New JobResult() With { Dim oChildTableNAme As String = NotNull(oRow.Item("CHILD_DT_NAME"), String.Empty)
.Table = oTable
}
Dim oChildTableNAme As String = NotNull(oDetailRow.Item("CHILD_DT_NAME"), String.Empty) If oChildTableNAme <> String.Empty Then
Dim oParentColumn As String = NotNull(oRow.Item("DT_COLUMN"), String.Empty)
Dim oChildColumn As String = NotNull(oRow.Item("CHILD_DT_COLUMN"), String.Empty)
oLogger.Debug("Child Datatable [{0}] defined, Relation: Parent [{1}] -> Child [{2}]", oChildTableNAme, oParentColumn, oChildColumn)
If oChildTableNAme <> String.Empty Then Dim oChildTable As DataTable = oMSSQL.GetDatatableWithConnection($"SELECT * FROM {oChildTableNAme}", oConnectionString)
Dim oParentColumn As String = NotNull(oDetailRow.Item("DT_COLUMN"), String.Empty) oChildTable.TableName = oChildTableNAme
Dim oChildColumn As String = NotNull(oDetailRow.Item("CHILD_DT_COLUMN"), String.Empty) oLogger.Debug("Child Datatable [{0}] contains [{1}] rows", oChildTable.TableName, oChildTable.Rows.Count)
oLogger.Debug("Child Datatable [{0}] defined, Relation: Parent [{1}] -> Child [{2}]", oChildTableName, oParentColumn, oChildColumn)
Dim oChildTable As DataTable = oMSSQL.GetDatatableWithConnection($"SELECT * FROM {oChildTableName}", oConnectionString) oResultTable.ChildTable = oChildTable
oChildTable.TableName = oChildTableName oResultTable.ChildRelationColumn = oChildColumn
oLogger.Debug("Child Datatable [{0}] contains [{1}] rows", oChildTable.TableName, oChildTable.Rows.Count) oResultTable.TableRelationColumn = oParentColumn
End If
oResult.ChildTable = oChildTable oLogger.Info("Fetched Datatable [{0}]", oDatatableName)
oResult.ChildRelationColumn = oChildColumn oResult.Tables.Add(oResultTable)
oResult.TableRelationColumn = oParentColumn Next
End If
' Das Ergebnis speichern ' Das Ergebnis speichern
context.Result = oResult context.Result = oResult
Catch ex As Exception Catch ex As Exception
oLogger.Error(ex) oLogger.Error(ex)
oLogger.Warn("Unhandled exception while executing SQL for Datatable {0}", oDatatableName) oLogger.Warn("Unhandled exception while executing SQL for Datatable {0}", oCronJobTitle)
End Try End Try
Return Task.FromResult(True) Return Task.FromResult(True)
#Region "OLD"
'Dim oJobData = context.MergedJobDataMap
'Dim oLogConfig As LogConfig = oJobData.Item("LogConfig")
'Dim oLogger As Logger = oLogConfig.GetLogger()
'Dim oDetailRow As DataRow = oJobData.Item("CronJobDetails")
'Dim oDatatableName As String = NotNull(oDetailRow.Item("DT_NAME"), String.Empty)
'Try
' Dim oCronJobTitle As String = oJobData.Item("CronJobTitle")
' Dim oMSSQL As MSSQLServer = oJobData.Item("MSSQL")
' Dim oConnectionId As Integer = NotNull(oDetailRow.Item("CON_ID"), String.Empty)
' Dim oTitle As String = NotNull(oDetailRow.Item("TITLE"), String.Empty)
' Dim oSQL As String = NotNull(oDetailRow.Item("COMMAND"), String.Empty)
' oLogger.Debug("Running Command-Job [{0}]", oTitle)
' oLogger.Debug("Datatable Name: {0}", oDatatableName)
' oLogger.Debug("Connection Id: {0}", oConnectionId)
' Dim oConnectionString = oMSSQL.Get_ConnectionStringforID(oConnectionId)
' Dim oTable = oMSSQL.GetDatatableWithConnection(oSQL, oConnectionString)
' oTable.TableName = oDatatableName
' oLogger.Debug("Result Datatable [{0}] contains [{1}] rows", oTable.TableName, oTable.Rows.Count)
' Dim oResult = New JobResult() With {
' .Table = oTable
' }
' Dim oChildTableNAme As String = NotNull(oDetailRow.Item("CHILD_DT_NAME"), String.Empty)
' If oChildTableNAme <> String.Empty Then
' Dim oParentColumn As String = NotNull(oDetailRow.Item("DT_COLUMN"), String.Empty)
' Dim oChildColumn As String = NotNull(oDetailRow.Item("CHILD_DT_COLUMN"), String.Empty)
' oLogger.Debug("Child Datatable [{0}] defined, Relation: Parent [{1}] -> Child [{2}]", oChildTableName, oParentColumn, oChildColumn)
' Dim oChildTable As DataTable = oMSSQL.GetDatatableWithConnection($"SELECT * FROM {oChildTableName}", oConnectionString)
' oChildTable.TableName = oChildTableName
' oLogger.Debug("Child Datatable [{0}] contains [{1}] rows", oChildTable.TableName, oChildTable.Rows.Count)
' oResult.ChildTable = oChildTable
' oResult.ChildRelationColumn = oChildColumn
' oResult.TableRelationColumn = oParentColumn
' End If
' ' Das Ergebnis speichern
' context.Result = oResult
'Catch ex As Exception
' oLogger.Error(ex)
' oLogger.Warn("Unhandled exception while executing SQL for Datatable {0}", oDatatableName)
'End Try
'Return Task.FromResult(True)
#End Region
End Function End Function
End Class End Class

View File

@ -26,6 +26,24 @@ Public Class JobListener
Dataset = ResultDataSet Dataset = ResultDataSet
End Sub End Sub
Public Overrides Function JobWasExecuted(context As IJobExecutionContext, jobException As JobExecutionException, Optional cancellationToken As CancellationToken = Nothing) As Task
_Logger.Info("Job [{0}] was executed successfully. Saving Data.", context.JobDetail.Key)
Dim oResult As JobResult = context.Result
For Each oTableResult As JobResult.ResultTable In oResult.Tables
Try
_Logger.Debug("Saving Datatable [{0}]", oTableResult.Table)
SaveDataTables(oTableResult)
Catch ex As Exception
_Logger.Error("Error while executing SaveDataTables for {0}", oTableResult.Table.TableName)
End Try
Next
Return MyBase.JobWasExecuted(context, jobException, cancellationToken)
End Function
Public Sub ReplaceExistingTable(Name As String, Table As DataTable, DataSet As DataSet, Optional ChildTable As DataTable = Nothing) Public Sub ReplaceExistingTable(Name As String, Table As DataTable, DataSet As DataSet, Optional ChildTable As DataTable = Nothing)
Try Try
Dim oDatatableNameTemp As String = Name & "-TEMP" Dim oDatatableNameTemp As String = Name & "-TEMP"
@ -140,16 +158,17 @@ Public Class JobListener
End Try End Try
End Sub End Sub
Public Sub SaveDataTables(Result As JobResult, DetailRow As DataRow) Public Sub SaveDataTables(Result As JobResult.ResultTable)
Try Try
Dim oTable As DataTable = Result.Table Dim oTable As DataTable = Result.Table
Dim oName As String = DetailRow.Item("DT_NAME") Dim oName As String = Result.DetailRow.Item("DT_NAME")
Dim oDetailId As Integer = DetailRow.Item("GUID") Dim oDetailId As Integer = Result.DetailRow.Item("GUID")
Dim oDatatableNameTemp As String = oName & "-TEMP" Dim oDatatableNameTemp As String = oName & "-TEMP"
' Used for debugging relations and constraints ' Used for debugging relations and constraints
'ListTables(Dataset) _Logger.Debug("Dataset BEFORE saving datatables")
ListTables(Dataset)
If Dataset.Tables.Contains(oName) Then If Dataset.Tables.Contains(oName) Then
' Replace existing table ' Replace existing table
@ -179,6 +198,10 @@ Public Class JobListener
_Logger.Debug(oRelation.RelationName) _Logger.Debug(oRelation.RelationName)
Next Next
' Used for debugging relations and constraints
_Logger.Debug("Dataset AFTER saving datatables")
ListTables(Dataset)
_MSSQL.ExecuteNonQuery($"INSERT INTO TBAPPSERV_CRON_DETAIL_HISTORY (DETAIL_ID) VALUES ({oDetailId})") _MSSQL.ExecuteNonQuery($"INSERT INTO TBAPPSERV_CRON_DETAIL_HISTORY (DETAIL_ID) VALUES ({oDetailId})")
Catch ex As Exception Catch ex As Exception
_Logger.Warn("Unexpected error in JobListener: {0}", ex.Message) _Logger.Warn("Unexpected error in JobListener: {0}", ex.Message)
@ -205,11 +228,4 @@ Public Class JobListener
oIndex += 1 oIndex += 1
Next Next
End Sub End Sub
Public Overrides Function JobWasExecuted(context As IJobExecutionContext, jobException As JobExecutionException, Optional cancellationToken As CancellationToken = Nothing) As Task
Dim oDetailRow As DataRow = context.MergedJobDataMap.Item("CronJobDetails")
SaveDataTables(context.Result, oDetailRow)
Return MyBase.JobWasExecuted(context, jobException, cancellationToken)
End Function
End Class End Class

View File

@ -1,6 +1,12 @@
Public Class JobResult Public Class JobResult
Public Table As DataTable Public Tables As New List(Of ResultTable)
Public ChildTable As DataTable
Public TableRelationColumn As String Public Class ResultTable
Public ChildRelationColumn As String Public Table As DataTable
Public ChildTable As DataTable
Public TableRelationColumn As String
Public ChildRelationColumn As String
Public DetailRow As DataRow
End Class
End Class End Class

View File

@ -39,7 +39,6 @@ Public Class WindowsService
Dim oServicePath As String = AppDomain.CurrentDomain.BaseDirectory Dim oServicePath As String = AppDomain.CurrentDomain.BaseDirectory
_LogConfig = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log")) _LogConfig = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"))
_LogConfig.Debug = True
_Logger = _LogConfig.GetLogger() _Logger = _LogConfig.GetLogger()
_Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME) _Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME)
_Logger.Info("ServiceDirectory: {0}", oServicePath) _Logger.Info("ServiceDirectory: {0}", oServicePath)
@ -60,7 +59,7 @@ Public Class WindowsService
_Archive = New EDMI.File.Archive(_LogConfig) _Archive = New EDMI.File.Archive(_LogConfig)
_Filesystem = New Filesystem.File(_LogConfig) _Filesystem = New Filesystem.File(_LogConfig)
_Global = New GlobalState(_LogConfig, _MSSQL_IDB, _MSSQL_ECM) _Global = New GlobalState(_LogConfig, _MSSQL_IDB, _MSSQL_ECM)
_Scheduler = New Scheduler(_LogConfig, _MSSQL_ECM) _Scheduler = New Scheduler(_LogConfig, _MSSQL_ECM, _Global.TableStore)
_Logger.Debug("Loading Objectstores") _Logger.Debug("Loading Objectstores")
_Global.LoadObjectStores() _Global.LoadObjectStores()
@ -107,15 +106,28 @@ Public Class WindowsService
Private Function StartFirebird() As Firebird Private Function StartFirebird() As Firebird
_Logger.Debug("Connecting to Firebird") _Logger.Debug("Connecting to Firebird")
Dim oFirebird = New Firebird(
_LogConfig, If _Config.Firebird_Datasource = String.Empty Then
_Config.Firebird_Datasource, _Logger.Info("Firebird database not configured. Skipping.")
_Config.Firebird_DatabaseName, Return Nothing
_Config.Firebird_DatabaseUser, End If
_Config.Firebird_DatabasePassword
) Try
_Logger.Info("Database connection established.") Dim oFirebird = New Firebird(
Return oFirebird _LogConfig,
_Config.Firebird_Datasource,
_Config.Firebird_DatabaseName,
_Config.Firebird_DatabaseUser,
_Config.Firebird_DatabasePassword
)
_Logger.Info("Database connection established.")
Return oFirebird
Catch ex As Exception
_Logger.Warn("StartFirebird: Could not connect to firebird database.")
_Logger.Error(ex)
Return Nothing
End Try
End Function End Function
Private Function StartMSSQL_ECM() As MSSQLServer Private Function StartMSSQL_ECM() As MSSQLServer

View File

@ -29,7 +29,7 @@
<value>False</value> <value>False</value>
</setting> </setting>
<setting name="ADSYNC_CONFIG" serializeAs="String"> <setting name="ADSYNC_CONFIG" serializeAs="String">
<value>False|0 0 0/1 * * ?|RootPath::LDAP://DIGITALDATA,UserFilter::(&amp;(samaccountname=@SAMACCOUNTNAME)),GroupFilter(&amp;(samaccountname=*))</value> <value>False|0 0 0/1 * * ?|RootPath::LDAP://DIGITALDATA,UserFilter::(&amp;(samaccountname=@SAMACCOUNTNAME)),GroupFilter::(&amp;(samaccountname=*))</value>
</setting> </setting>
<setting name="TEST_CONFIG" serializeAs="String"> <setting name="TEST_CONFIG" serializeAs="String">
<value>True|10/0 * * * * ?|Foo::Bar</value> <value>True|10/0 * * * * ?|Foo::Bar</value>