Compare commits
31 Commits
Modules-Up
...
d03efbe3b3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d03efbe3b3 | ||
|
|
7d91b973ce | ||
| d58bb2302b | |||
|
|
57298369a6 | ||
|
|
b4f0a5ce0b | ||
|
|
4213121b67 | ||
| f3b7a6725c | |||
| 801bb9c5b3 | |||
| 65bb0fce58 | |||
| ff11ae963d | |||
| e8982d1c65 | |||
| d631f0e0ff | |||
| d9f9755d2a | |||
| cae41fbbd3 | |||
| 2d4575cb1f | |||
|
|
c39b4bc2e7 | ||
|
|
ec42ec78ae | ||
|
|
bea3ccf45f | ||
| 061c7d9ec0 | |||
| d008d12ef0 | |||
| db59bfc7dc | |||
| ad9cb46354 | |||
| 32015e5439 | |||
|
|
06e796f54f | ||
|
|
bbe372377a | ||
|
|
7b91aac5e9 | ||
|
|
ceb688fc3f | ||
|
|
aa5742a529 | ||
|
|
79267e6bd9 | ||
|
|
cf63fd8c39 | ||
|
|
ec3a677ca8 |
@@ -45,13 +45,7 @@
|
|||||||
<OptionInfer>On</OptionInfer>
|
<OptionInfer>On</OptionInfer>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
@@ -82,6 +76,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Base\BaseClass.vb" />
|
<Compile Include="Base\BaseClass.vb" />
|
||||||
<Compile Include="Base\BaseUtils.vb" />
|
<Compile Include="Base\BaseUtils.vb" />
|
||||||
|
<Compile Include="DocumentPathHandler.vb" />
|
||||||
<Compile Include="ECM\ECM.vb" />
|
<Compile Include="ECM\ECM.vb" />
|
||||||
<Compile Include="Encryption\Compression.vb" />
|
<Compile Include="Encryption\Compression.vb" />
|
||||||
<Compile Include="Encryption\Encryption.vb" />
|
<Compile Include="Encryption\Encryption.vb" />
|
||||||
@@ -92,6 +87,7 @@
|
|||||||
<Compile Include="FileWatcher\FileWatcherFilters.vb" />
|
<Compile Include="FileWatcher\FileWatcherFilters.vb" />
|
||||||
<Compile Include="FileWatcher\FileWatcherProperties.vb" />
|
<Compile Include="FileWatcher\FileWatcherProperties.vb" />
|
||||||
<Compile Include="IDB\Constants.vb" />
|
<Compile Include="IDB\Constants.vb" />
|
||||||
|
<Compile Include="Map_Drive.vb" />
|
||||||
<Compile Include="MimeEx.vb" />
|
<Compile Include="MimeEx.vb" />
|
||||||
<Compile Include="StringFunctions.vb" />
|
<Compile Include="StringFunctions.vb" />
|
||||||
<Compile Include="WindowsEx.vb" />
|
<Compile Include="WindowsEx.vb" />
|
||||||
@@ -138,12 +134,26 @@
|
|||||||
<CustomToolNamespace>My</CustomToolNamespace>
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="README.txt" />
|
<Content Include="README.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup>
|
||||||
|
<PackageReference Include="NLog">
|
||||||
|
<Version>5.0.5</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="NuGet.CommandLine">
|
||||||
|
<Version>6.13.2</Version>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
||||||
|
|||||||
346
Base/DocumentPathHandler.vb
Normal file
346
Base/DocumentPathHandler.vb
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
Imports System.IO
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
''' <summary>
|
||||||
|
''' Zentrale Klasse für Dokumentenpfad-Verwaltung mit optionalem Laufwerks-Mapping und Temp-Kopie
|
||||||
|
''' </summary>
|
||||||
|
Public Class DocumentPathHandler
|
||||||
|
|
||||||
|
Private ReadOnly _Logger As Logger
|
||||||
|
Private ReadOnly _LogConfig As LogConfig
|
||||||
|
Private _mappedDrive As String = ""
|
||||||
|
Private _clsmapDrive As Map_Drive
|
||||||
|
|
||||||
|
Public Sub New(LogConfig As LogConfig)
|
||||||
|
_LogConfig = LogConfig
|
||||||
|
_Logger = LogConfig.GetLogger()
|
||||||
|
_clsmapDrive = New Map_Drive(LogConfig)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function EnsureTempFolder(ByRef tempFolder As String, ByRef errorMessage As String) As Boolean
|
||||||
|
Try
|
||||||
|
_Logger.Debug($"📂 Überprüfe Temp-Ordner: [{tempFolder}]")
|
||||||
|
If String.IsNullOrWhiteSpace(tempFolder) Then
|
||||||
|
_Logger.Debug("⚠️ Temp-Ordner nicht konfiguriert, verwende TEMP_DOCUMENT_FOLDER aus AppSettings")
|
||||||
|
tempFolder = TEMP_DOCUMENT_FOLDER
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Fallback, falls global nichts konfiguriert ist
|
||||||
|
If String.IsNullOrWhiteSpace(tempFolder) Then
|
||||||
|
tempFolder = Path.Combine(
|
||||||
|
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||||
|
"Digital Data",
|
||||||
|
"taskFLOW",
|
||||||
|
"DocumentViewer",
|
||||||
|
"Temp")
|
||||||
|
_Logger.Info($"⚠️ TEMP_DOCUMENT_FOLDER war leer - verwende Fallback: [{tempFolder}]")
|
||||||
|
TEMP_DOCUMENT_FOLDER = tempFolder
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not Directory.Exists(tempFolder) Then
|
||||||
|
Directory.CreateDirectory(tempFolder)
|
||||||
|
_Logger.Info($"📁 Temp-Ordner erstellt: [{tempFolder}]")
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not Directory.Exists(tempFolder) Then
|
||||||
|
errorMessage = $"Temp-Ordner konnte nicht erstellt werden: [{tempFolder}]"
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
errorMessage = $"Fehler bei Temp-Ordner-Initialisierung: {ex.Message}"
|
||||||
|
_Logger.Error($"❌ {errorMessage}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Verarbeitet einen Dokumentenpfad: Optional Mapping, dann Temp-Kopie
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="sourcePath">Quell-Pfad der Datei (UNC oder lokal)</param>
|
||||||
|
''' <param name="options">Optionen für die Verarbeitung</param>
|
||||||
|
''' <returns>DocumentPathResult mit finalem Pfad und Mapping-Info</returns>
|
||||||
|
Public Function ProcessDocumentPath(sourcePath As String, options As DocumentPathOptions) As DocumentPathResult
|
||||||
|
Dim result As New DocumentPathResult With {
|
||||||
|
.SourcePath = sourcePath,
|
||||||
|
.FinalPath = sourcePath,
|
||||||
|
.Success = False,
|
||||||
|
.WasMapped = False,
|
||||||
|
.WasCopiedToTemp = False
|
||||||
|
}
|
||||||
|
|
||||||
|
Try
|
||||||
|
' Validierung
|
||||||
|
If String.IsNullOrEmpty(sourcePath) Then
|
||||||
|
result.ErrorMessage = "Quell-Pfad ist leer"
|
||||||
|
_Logger.Error("❌ ProcessDocumentPath: Quell-Pfad ist leer")
|
||||||
|
Return result
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim workingPath As String = sourcePath
|
||||||
|
|
||||||
|
' ========== SCHRITT 1: OPTIONALES LAUFWERKS-MAPPING ==========
|
||||||
|
If options.EnableMapping AndAlso Not String.IsNullOrEmpty(options.WMSuffix) Then
|
||||||
|
Dim mappingResult = TryMapNetworkDrive(sourcePath, options)
|
||||||
|
If mappingResult.Success Then
|
||||||
|
workingPath = mappingResult.MappedPath
|
||||||
|
_mappedDrive = mappingResult.DriveLetter
|
||||||
|
result.WasMapped = True
|
||||||
|
result.MappedDrive = _mappedDrive
|
||||||
|
_Logger.Info($"✓ Laufwerk gemappt: {_mappedDrive}")
|
||||||
|
Else
|
||||||
|
_Logger.Warn("⚠️ Laufwerks-Mapping fehlgeschlagen - verwende Original-UNC-Pfad")
|
||||||
|
workingPath = sourcePath
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
' ========== SCHRITT 2: PRÜFEN OB DATEI EXISTIERT ==========
|
||||||
|
If Not File.Exists(workingPath) Then
|
||||||
|
result.ErrorMessage = $"Datei nicht gefunden: [{workingPath}]"
|
||||||
|
_Logger.Error($"❌ {result.ErrorMessage}")
|
||||||
|
|
||||||
|
' Cleanup bei Fehler
|
||||||
|
If result.WasMapped Then
|
||||||
|
UnmapDrive()
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return result
|
||||||
|
End If
|
||||||
|
|
||||||
|
' ========== SCHRITT 3: OPTIONALE TEMP-KOPIE ==========
|
||||||
|
If options.CopyToTemp Then
|
||||||
|
_Logger.Debug($"📂 Starte Temp-Kopie für: [{workingPath}]")
|
||||||
|
Dim tempResult = CopyToTempFolder(workingPath, options.TempFolder)
|
||||||
|
If tempResult.Success Then
|
||||||
|
result.FinalPath = tempResult.TempPath
|
||||||
|
result.WasCopiedToTemp = True
|
||||||
|
result.TempPath = tempResult.TempPath
|
||||||
|
_Logger.Info($"✓ Datei in Temp kopiert: [{Path.GetFileName(tempResult.TempPath)}]")
|
||||||
|
|
||||||
|
' Laufwerk unmappen nach erfolgreicher Kopie
|
||||||
|
If result.WasMapped AndAlso options.UnmapAfterCopy Then
|
||||||
|
UnmapDrive()
|
||||||
|
result.WasMapped = False
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
_Logger.Warn($"⚠️ Temp-Kopie fehlgeschlagen: {tempResult.ErrorMessage}")
|
||||||
|
|
||||||
|
' WICHTIG: Nicht den gemappten Pfad behalten, wenn danach ungemappt wird.
|
||||||
|
' Fallback immer auf stabilen Originalpfad (UNC).
|
||||||
|
result.FinalPath = sourcePath
|
||||||
|
result.WasCopiedToTemp = False
|
||||||
|
result.TempPath = String.Empty
|
||||||
|
|
||||||
|
If result.WasMapped Then
|
||||||
|
UnmapDrive()
|
||||||
|
result.WasMapped = False
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
result.FinalPath = workingPath
|
||||||
|
_Logger.Debug($"📄 Verwende Pfad ohne Temp-Kopie: [{workingPath}]")
|
||||||
|
End If
|
||||||
|
|
||||||
|
result.Success = True
|
||||||
|
Return result
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
result.ErrorMessage = $"Unerwarteter Fehler: {ex.Message}"
|
||||||
|
_Logger.Error($"❌ ProcessDocumentPath: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
|
||||||
|
' Cleanup bei Exception
|
||||||
|
If result.WasMapped Then
|
||||||
|
UnmapDrive()
|
||||||
|
End If
|
||||||
|
|
||||||
|
Return result
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Versucht ein Netzlaufwerk zu mappen
|
||||||
|
''' </summary>
|
||||||
|
Private Function TryMapNetworkDrive(sourcePath As String, options As DocumentPathOptions) As MappingResult
|
||||||
|
Dim result As New MappingResult With {.Success = False}
|
||||||
|
|
||||||
|
Try
|
||||||
|
' Prüfen ob Pfad mit WMSUFFIX beginnt
|
||||||
|
If Not sourcePath.StartsWith(options.WMSuffix, StringComparison.OrdinalIgnoreCase) Then
|
||||||
|
_Logger.Debug($"📄 Pfad beginnt nicht mit WMSUFFIX - kein Mapping erforderlich")
|
||||||
|
Return result
|
||||||
|
End If
|
||||||
|
|
||||||
|
_Logger.Debug($"📂 WMSUFFIX erkannt - starte Laufwerks-Mapping")
|
||||||
|
|
||||||
|
' Laufwerk mappen
|
||||||
|
Dim mappedDrive As String = ""
|
||||||
|
|
||||||
|
If Not String.IsNullOrEmpty(options.SpecificDrive) AndAlso options.SpecificDrive.Length = 1 Then
|
||||||
|
' Spezifisches Laufwerk
|
||||||
|
If _clsmapDrive.MapSpecificDrive(options.SpecificDrive, options.DriveBlacklist, options.WMSuffix) Then
|
||||||
|
mappedDrive = options.SpecificDrive & ":"
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
' Automatisches Mapping
|
||||||
|
mappedDrive = _clsmapDrive.MapDriveAutomatic(options.DriveBlacklist, options.WMSuffix)
|
||||||
|
End If
|
||||||
|
|
||||||
|
If String.IsNullOrEmpty(mappedDrive) Then
|
||||||
|
_Logger.Warn("⚠️ Kein Laufwerk gemappt")
|
||||||
|
Return result
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Pfad umschreiben
|
||||||
|
Dim relativePath As String = sourcePath.Substring(options.WMSuffix.Length)
|
||||||
|
If relativePath.StartsWith("\") Then
|
||||||
|
relativePath = relativePath.Substring(1)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim mappedPath As String = mappedDrive.TrimEnd(":"c, "\"c) & ":\" & relativePath
|
||||||
|
|
||||||
|
_Logger.Debug($"📄 Original: [{sourcePath}]")
|
||||||
|
_Logger.Debug($"📄 Gemappt: [{mappedPath}]")
|
||||||
|
|
||||||
|
result.Success = True
|
||||||
|
result.DriveLetter = mappedDrive
|
||||||
|
result.MappedPath = mappedPath
|
||||||
|
Return result
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler beim Mapping: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return result
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function CopyToTempFolder(sourcePath As String, tempFolder As String) As TempCopyResult
|
||||||
|
Dim result As New TempCopyResult With {.Success = False}
|
||||||
|
|
||||||
|
Try
|
||||||
|
Dim configuredTempFolder As String = tempFolder
|
||||||
|
Dim globalTempFolder As String = TEMP_DOCUMENT_FOLDER
|
||||||
|
|
||||||
|
' Temp-Ordner validieren/initialisieren (kann tempFolder per ByRef setzen)
|
||||||
|
If Not EnsureTempFolder(tempFolder, result.ErrorMessage) Then
|
||||||
|
_Logger.Warn($"⚠️ {result.ErrorMessage}")
|
||||||
|
_Logger.Warn($"[TempCopy] InputTemp=[{If(String.IsNullOrWhiteSpace(configuredTempFolder), "<leer>", configuredTempFolder)}], GlobalTemp=[{If(String.IsNullOrWhiteSpace(globalTempFolder), "<leer>", globalTempFolder)}]")
|
||||||
|
Return result
|
||||||
|
End If
|
||||||
|
|
||||||
|
' NEU: Effektiven Zielordner immer transparent loggen
|
||||||
|
_Logger.Info($"[TempCopy] Effektiver Temp-Ordner: [{tempFolder}]")
|
||||||
|
_Logger.Debug($"[TempCopy] InputTemp=[{If(String.IsNullOrWhiteSpace(configuredTempFolder), "<leer>", configuredTempFolder)}], GlobalTemp=[{If(String.IsNullOrWhiteSpace(globalTempFolder), "<leer>", globalTempFolder)}]")
|
||||||
|
|
||||||
|
' Eindeutigen Dateinamen generieren
|
||||||
|
Dim originalFileName As String = Path.GetFileName(sourcePath)
|
||||||
|
Dim fileNameWithoutExt As String = Path.GetFileNameWithoutExtension(originalFileName)
|
||||||
|
Dim extension As String = Path.GetExtension(originalFileName)
|
||||||
|
Dim timestamp As String = DateTime.Now.ToString("yyyyMMdd_HHmmss_fff")
|
||||||
|
Dim uniqueFileName As String = $"{fileNameWithoutExt}_{timestamp}{extension}"
|
||||||
|
Dim targetPath As String = Path.Combine(tempFolder, uniqueFileName)
|
||||||
|
|
||||||
|
_Logger.Debug($"📄 Kopiere nach Temp:")
|
||||||
|
_Logger.Debug($" Von: [{sourcePath}]")
|
||||||
|
_Logger.Debug($" Nach: [{targetPath}]")
|
||||||
|
|
||||||
|
File.Copy(sourcePath, targetPath, overwrite:=True)
|
||||||
|
|
||||||
|
result.Success = True
|
||||||
|
result.TempPath = targetPath
|
||||||
|
result.TempFileName = uniqueFileName
|
||||||
|
Return result
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
result.ErrorMessage = $"Fehler beim Kopieren: {ex.Message}"
|
||||||
|
_Logger.Error($"❌ {result.ErrorMessage}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return result
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Trennt das gemappte Laufwerk
|
||||||
|
''' </summary>
|
||||||
|
Public Sub UnmapDrive()
|
||||||
|
If Not String.IsNullOrEmpty(_mappedDrive) Then
|
||||||
|
Try
|
||||||
|
If _clsmapDrive.DisconnectNetworkDrive(_mappedDrive, force:=True) Then
|
||||||
|
_Logger.Info($"🔌 Laufwerk {_mappedDrive} getrennt")
|
||||||
|
Else
|
||||||
|
_Logger.Warn($"⚠️ Warnung beim Trennen von {_mappedDrive}")
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Debug($"Fehler beim Trennen von {_mappedDrive}: {ex.Message}")
|
||||||
|
Finally
|
||||||
|
_mappedDrive = ""
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Cleanup-Methode (z.B. beim Schließen des Forms)
|
||||||
|
''' </summary>
|
||||||
|
Public Sub Cleanup()
|
||||||
|
UnmapDrive()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
#Region "Nested Classes für Optionen und Ergebnisse"
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Optionen für die Dokumentenpfad-Verarbeitung
|
||||||
|
''' </summary>
|
||||||
|
Public Class DocumentPathOptions
|
||||||
|
''' <summary>Soll Laufwerks-Mapping versucht werden?</summary>
|
||||||
|
Public Property EnableMapping As Boolean = False
|
||||||
|
|
||||||
|
''' <summary>WMSUFFIX für Mapping-Erkennung (z.B. "\\windream\objects")</summary>
|
||||||
|
Public Property WMSuffix As String = ""
|
||||||
|
|
||||||
|
''' <summary>Spezifischer Laufwerksbuchstabe (z.B. "V") oder leer für automatisch</summary>
|
||||||
|
Public Property SpecificDrive As String = ""
|
||||||
|
|
||||||
|
''' <summary>Blacklist für Laufwerksbuchstaben (z.B. "Y,M,V")</summary>
|
||||||
|
Public Property DriveBlacklist As String = ""
|
||||||
|
|
||||||
|
''' <summary>Soll Datei in Temp kopiert werden?</summary>
|
||||||
|
Public Property CopyToTemp As Boolean = False
|
||||||
|
|
||||||
|
''' <summary>Temp-Ordner-Pfad</summary>
|
||||||
|
Public Property TempFolder As String = ""
|
||||||
|
|
||||||
|
''' <summary>Laufwerk nach erfolgreicher Temp-Kopie unmappen?</summary>
|
||||||
|
Public Property UnmapAfterCopy As Boolean = True
|
||||||
|
End Class
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Ergebnis der Dokumentenpfad-Verarbeitung
|
||||||
|
''' </summary>
|
||||||
|
Public Class DocumentPathResult
|
||||||
|
Public Property Success As Boolean
|
||||||
|
Public Property SourcePath As String
|
||||||
|
Public Property FinalPath As String
|
||||||
|
Public Property ErrorMessage As String
|
||||||
|
Public Property WasMapped As Boolean
|
||||||
|
Public Property MappedDrive As String
|
||||||
|
Public Property WasCopiedToTemp As Boolean
|
||||||
|
Public Property TempPath As String
|
||||||
|
End Class
|
||||||
|
|
||||||
|
Private Class MappingResult
|
||||||
|
Public Property Success As Boolean
|
||||||
|
Public Property DriveLetter As String
|
||||||
|
Public Property MappedPath As String
|
||||||
|
End Class
|
||||||
|
|
||||||
|
Private Class TempCopyResult
|
||||||
|
Public Property Success As Boolean
|
||||||
|
Public Property TempPath As String
|
||||||
|
Public Property TempFileName As String
|
||||||
|
Public Property ErrorMessage As String
|
||||||
|
End Class
|
||||||
|
|
||||||
|
#End Region
|
||||||
|
|
||||||
|
End Class
|
||||||
559
Base/Map_Drive.vb
Normal file
559
Base/Map_Drive.vb
Normal file
@@ -0,0 +1,559 @@
|
|||||||
|
Imports System.IO
|
||||||
|
Imports System.Runtime.InteropServices
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
Public Class Map_Drive
|
||||||
|
Private ReadOnly _Logger As Logger
|
||||||
|
Private ReadOnly _LogConfig As LogConfig
|
||||||
|
#Region "Windows API Deklarationen"
|
||||||
|
<DllImport("mpr.dll", CharSet:=CharSet.Auto)>
|
||||||
|
Private Shared Function WNetAddConnection2(ByRef lpNetResource As NETRESOURCE,
|
||||||
|
ByVal lpPassword As String,
|
||||||
|
ByVal lpUsername As String,
|
||||||
|
ByVal dwFlags As Integer) As Integer
|
||||||
|
End Function
|
||||||
|
|
||||||
|
<DllImport("mpr.dll", CharSet:=CharSet.Auto)>
|
||||||
|
Private Shared Function WNetCancelConnection2(ByVal lpName As String,
|
||||||
|
ByVal dwFlags As Integer,
|
||||||
|
ByVal fForce As Boolean) As Integer
|
||||||
|
End Function
|
||||||
|
|
||||||
|
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)>
|
||||||
|
Private Structure NETRESOURCE
|
||||||
|
Public dwScope As Integer
|
||||||
|
Public dwType As Integer
|
||||||
|
Public dwDisplayType As Integer
|
||||||
|
Public dwUsage As Integer
|
||||||
|
Public lpLocalName As String
|
||||||
|
Public lpRemoteName As String
|
||||||
|
Public lpComment As String
|
||||||
|
Public lpProvider As String
|
||||||
|
End Structure
|
||||||
|
|
||||||
|
Private Const RESOURCETYPE_DISK As Integer = 1
|
||||||
|
Private Const CONNECT_UPDATE_PROFILE As Integer = 1
|
||||||
|
Private Const ERROR_SUCCESS As Integer = 0
|
||||||
|
Private Const ERROR_ALREADY_ASSIGNED As Integer = 85
|
||||||
|
#End Region
|
||||||
|
Public Sub New(LogConfig As LogConfig)
|
||||||
|
_LogConfig = LogConfig
|
||||||
|
_Logger = LogConfig.GetLogger()
|
||||||
|
End Sub
|
||||||
|
''' <summary>
|
||||||
|
''' Struktur für Netzlaufwerk-Informationen
|
||||||
|
''' </summary>
|
||||||
|
Public Structure NetworkDriveInfo
|
||||||
|
Public DriveLetter As String
|
||||||
|
Public NetworkPath As String
|
||||||
|
Public DriveType As IO.DriveType
|
||||||
|
Public IsReady As Boolean
|
||||||
|
Public TotalSize As Long
|
||||||
|
Public FreeSpace As Long
|
||||||
|
End Structure
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Ermittelt den nächsten freien Laufwerksbuchstaben (alphabetisch absteigend von Z bis A)
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="blacklist">Liste der nicht erlaubten Laufwerksbuchstaben (z.B. "Y,M,V")</param>
|
||||||
|
''' <returns>Nächster freier Laufwerksbuchstabe mit Doppelpunkt (z.B. "Z:") oder String.Empty wenn keiner frei</returns>
|
||||||
|
Public Function GetNextFreeDriveLetter(Optional blacklist As String = "") As String
|
||||||
|
Try
|
||||||
|
' Blacklist verarbeiten (Großbuchstaben ohne Doppelpunkte)
|
||||||
|
Dim blacklistArray As New List(Of Char)
|
||||||
|
If Not String.IsNullOrEmpty(blacklist) Then
|
||||||
|
For Each item In blacklist.Split(","c)
|
||||||
|
Dim letter = item.Trim().ToUpper().Replace(":", "")
|
||||||
|
If letter.Length = 1 AndAlso Char.IsLetter(letter(0)) Then
|
||||||
|
blacklistArray.Add(letter(0))
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Alle aktuell verwendeten Laufwerksbuchstaben ermitteln
|
||||||
|
Dim usedDrives As New List(Of Char)
|
||||||
|
For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives()
|
||||||
|
Dim letter As Char = drive.Name(0)
|
||||||
|
usedDrives.Add(Char.ToUpper(letter))
|
||||||
|
Next
|
||||||
|
|
||||||
|
' Alphabetisch absteigend von Z bis A durchgehen
|
||||||
|
For i As Integer = Asc("Z"c) To Asc("A"c) Step -1
|
||||||
|
Dim currentLetter As Char = Chr(i)
|
||||||
|
|
||||||
|
' Prüfen ob Buchstabe verfügbar ist
|
||||||
|
If Not usedDrives.Contains(currentLetter) AndAlso Not blacklistArray.Contains(currentLetter) Then
|
||||||
|
_Logger.Debug($"Nächster freier Laufwerksbuchstabe gefunden: {currentLetter}:")
|
||||||
|
Return currentLetter & ":"
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
_Logger.Warn("Kein freier Laufwerksbuchstabe gefunden!")
|
||||||
|
Return String.Empty
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler beim Ermitteln des nächsten freien Laufwerksbuchstabens: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Prüft ob ein Laufwerksbuchstabe verfügbar ist (nicht verwendet und nicht in Blacklist)
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="driveLetter">Zu prüfender Laufwerksbuchstabe</param>
|
||||||
|
''' <param name="blacklist">Liste der nicht erlaubten Laufwerksbuchstaben</param>
|
||||||
|
''' <returns>True wenn verfügbar, False wenn bereits verwendet oder in Blacklist</returns>
|
||||||
|
Public Function IsDriveLetterAvailable(driveLetter As String, Optional blacklist As String = "") As Boolean
|
||||||
|
Try
|
||||||
|
' Formatierung sicherstellen
|
||||||
|
driveLetter = driveLetter.Trim().ToUpper().Replace(":", "")
|
||||||
|
If driveLetter.Length <> 1 OrElse Not Char.IsLetter(driveLetter(0)) Then
|
||||||
|
_Logger.Warn($"Ungültiger Laufwerksbuchstabe: {driveLetter}")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim letter As Char = driveLetter(0)
|
||||||
|
|
||||||
|
' Blacklist prüfen
|
||||||
|
If Not String.IsNullOrEmpty(blacklist) Then
|
||||||
|
For Each item In blacklist.Split(","c)
|
||||||
|
Dim blacklistedLetter = item.Trim().ToUpper().Replace(":", "")
|
||||||
|
If blacklistedLetter.Length = 1 AndAlso blacklistedLetter(0) = letter Then
|
||||||
|
_Logger.Debug($"Laufwerk {letter}: ist in der Blacklist")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Prüfen ob bereits verwendet
|
||||||
|
For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives()
|
||||||
|
If Char.ToUpper(drive.Name(0)) = letter Then
|
||||||
|
_Logger.Debug($"Laufwerk {letter}: ist bereits verwendet")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler beim Prüfen der Laufwerksverfügbarkeit: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Mappt ein Netzlaufwerk mit automatischer Laufwerksbuchstabenwahl oder spezifischem Buchstaben
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="driveLetter">Gewünschter Laufwerksbuchstabe (leer = automatisch den nächsten freien wählen)</param>
|
||||||
|
''' <param name="networkPath">UNC-Pfad des Netzwerkshares</param>
|
||||||
|
''' <param name="blacklist">Komma-getrennte Liste verbotener Laufwerksbuchstaben (z.B. "Y,M,V")</param>
|
||||||
|
''' <param name="userName">Optionaler Benutzername für Authentifizierung</param>
|
||||||
|
''' <param name="password">Optionales Passwort für Authentifizierung</param>
|
||||||
|
''' <param name="persistent">Soll das Mapping persistent sein?</param>
|
||||||
|
''' <returns>Verwendeter Laufwerksbuchstabe bei Erfolg, String.Empty bei Fehler</returns>
|
||||||
|
Public Function MapNetworkDrive(driveLetter As String,
|
||||||
|
networkPath As String,
|
||||||
|
Optional blacklist As String = "",
|
||||||
|
Optional userName As String = Nothing,
|
||||||
|
Optional password As String = Nothing,
|
||||||
|
Optional persistent As Boolean = True) As String
|
||||||
|
Try
|
||||||
|
Dim targetDriveLetter As String = ""
|
||||||
|
|
||||||
|
' Szenario 1: Kein Laufwerksbuchstabe angegeben -> Automatische Auswahl
|
||||||
|
If String.IsNullOrEmpty(driveLetter) Then
|
||||||
|
_Logger.Info("Kein Laufwerksbuchstabe angegeben - suche nächsten freien Buchstaben...")
|
||||||
|
targetDriveLetter = GetNextFreeDriveLetter(blacklist)
|
||||||
|
|
||||||
|
If String.IsNullOrEmpty(targetDriveLetter) Then
|
||||||
|
_Logger.Error("❌ Kein freier Laufwerksbuchstabe verfügbar!")
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
|
||||||
|
_Logger.Info($"Automatisch gewählter Laufwerksbuchstabe: {targetDriveLetter}")
|
||||||
|
Else
|
||||||
|
' Szenario 2: Spezifischer Laufwerksbuchstabe angegeben
|
||||||
|
targetDriveLetter = driveLetter.Trim().ToUpper()
|
||||||
|
If Not targetDriveLetter.EndsWith(":") Then
|
||||||
|
targetDriveLetter &= ":"
|
||||||
|
End If
|
||||||
|
|
||||||
|
' ========== NEU: Prüfen ob Laufwerk verfügbar ist ==========
|
||||||
|
If Not IsDriveLetterAvailable(targetDriveLetter, blacklist) Then
|
||||||
|
_Logger.Warn($"⚠️ Laufwerk {targetDriveLetter} ist nicht verfügbar (bereits verwendet oder in Blacklist)")
|
||||||
|
' NICHT abbrechen - weiter versuchen (alte Logik beibehalten)
|
||||||
|
End If
|
||||||
|
' ========== ENDE NEU ==========
|
||||||
|
End If
|
||||||
|
|
||||||
|
' ========== NEU: Prüfung ob Laufwerk bereits existiert ==========
|
||||||
|
Dim driveExists As Boolean = False
|
||||||
|
Try
|
||||||
|
Dim driveInfo As New System.IO.DriveInfo(targetDriveLetter)
|
||||||
|
driveExists = driveInfo.IsReady
|
||||||
|
Catch
|
||||||
|
' Laufwerk existiert nicht - das ist OK
|
||||||
|
driveExists = False
|
||||||
|
End Try
|
||||||
|
|
||||||
|
' Nur trennen wenn Laufwerk wirklich existiert
|
||||||
|
If driveExists Then
|
||||||
|
_Logger.Debug($"ℹ️ Laufwerk {targetDriveLetter} existiert bereits - wird getrennt")
|
||||||
|
DisconnectNetworkDrive(targetDriveLetter, force:=True)
|
||||||
|
Else
|
||||||
|
_Logger.Debug($"✓ Laufwerk {targetDriveLetter} existiert noch nicht - kein Disconnect nötig")
|
||||||
|
End If
|
||||||
|
' ========== ENDE NEU ==========
|
||||||
|
|
||||||
|
' Laufwerk mappen (bestehende Logik)
|
||||||
|
If MapNetworkDriveInternal(targetDriveLetter, networkPath, userName, password, persistent) Then
|
||||||
|
_Logger.Info($"✓ Netzlaufwerk {targetDriveLetter} erfolgreich gemappt zu {networkPath}")
|
||||||
|
Return targetDriveLetter
|
||||||
|
Else
|
||||||
|
_Logger.Error($"❌ Fehler beim Mappen von {targetDriveLetter}")
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"❌ Fehler in MapNetworkDrive: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Interne Methode zum tatsächlichen Mappen eines Netzlaufwerks
|
||||||
|
''' </summary>
|
||||||
|
Private Function MapNetworkDriveInternal(driveLetter As String,
|
||||||
|
networkPath As String,
|
||||||
|
userName As String,
|
||||||
|
password As String,
|
||||||
|
persistent As Boolean) As Boolean
|
||||||
|
Try
|
||||||
|
' Erst trennen falls vorhanden (ohne Fehler wenn nicht vorhanden)
|
||||||
|
DisconnectNetworkDrive(driveLetter, True)
|
||||||
|
|
||||||
|
' NETRESOURCE-Struktur vorbereiten
|
||||||
|
Dim netResource As New NETRESOURCE With {
|
||||||
|
.dwType = RESOURCETYPE_DISK,
|
||||||
|
.lpLocalName = driveLetter,
|
||||||
|
.lpRemoteName = networkPath
|
||||||
|
}
|
||||||
|
|
||||||
|
Dim flags As Integer = If(persistent, CONNECT_UPDATE_PROFILE, 0)
|
||||||
|
|
||||||
|
' WICHTIG: Credentials als Nothing übergeben = Verwende aktuelle Windows-Credentials
|
||||||
|
' Wenn der Share öffentlich oder mit aktuellen Credentials erreichbar ist, funktioniert es
|
||||||
|
Dim result As Integer = WNetAddConnection2(netResource, password, userName, flags)
|
||||||
|
|
||||||
|
Select Case result
|
||||||
|
Case ERROR_SUCCESS
|
||||||
|
_Logger.Debug($"✓ Laufwerk {driveLetter} erfolgreich gemappt")
|
||||||
|
Return True
|
||||||
|
|
||||||
|
Case 1326 ' ERROR_LOGON_FAILURE
|
||||||
|
_Logger.Error($"❌ Authentifizierungsfehler (1326): Anmeldung fehlgeschlagen für [{networkPath}]")
|
||||||
|
_Logger.Error($" → Der UNC-Pfad erfordert möglicherweise spezielle Credentials")
|
||||||
|
_Logger.Error($" → Oder der aktuelle Benutzer hat keine Berechtigung")
|
||||||
|
Return False
|
||||||
|
|
||||||
|
Case 53 ' ERROR_BAD_NETPATH
|
||||||
|
_Logger.Error($"❌ Netzwerkpfad nicht gefunden (53): [{networkPath}]")
|
||||||
|
Return False
|
||||||
|
|
||||||
|
Case 67 ' ERROR_BAD_NET_NAME
|
||||||
|
_Logger.Error($"❌ Netzwerkname ungültig (67): [{networkPath}]")
|
||||||
|
Return False
|
||||||
|
|
||||||
|
Case 85 ' ERROR_ALREADY_ASSIGNED
|
||||||
|
_Logger.Warn($"⚠️ Laufwerk {driveLetter} ist bereits zugewiesen (85)")
|
||||||
|
' Versuche es zu trennen und erneut zu verbinden
|
||||||
|
DisconnectNetworkDrive(driveLetter, force:=True)
|
||||||
|
System.Threading.Thread.Sleep(500) ' Kurze Pause
|
||||||
|
result = WNetAddConnection2(netResource, password, userName, flags)
|
||||||
|
If result = ERROR_SUCCESS Then
|
||||||
|
_Logger.Info($"✓ Laufwerk {driveLetter} nach erneutem Versuch erfolgreich gemappt")
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Case Else
|
||||||
|
_Logger.Error($"❌ WNetAddConnection2 Error Code: {result}")
|
||||||
|
Return False
|
||||||
|
End Select
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler in MapNetworkDriveInternal: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Test-Funktion um UNC-Pfad-Zugriff zu prüfen
|
||||||
|
''' </summary>
|
||||||
|
Public Function TestUNCAccess(uncPath As String) As Boolean
|
||||||
|
Try
|
||||||
|
_Logger.Info($"🔍 Teste Zugriff auf UNC-Pfad: [{uncPath}]")
|
||||||
|
|
||||||
|
' Teste ob Pfad existiert und erreichbar ist
|
||||||
|
If System.IO.Directory.Exists(uncPath) Then
|
||||||
|
_Logger.Info($"✓ UNC-Pfad ist direkt erreichbar ohne Mapping")
|
||||||
|
|
||||||
|
' Teste Lese-Berechtigung
|
||||||
|
Try
|
||||||
|
Dim files = System.IO.Directory.GetFiles(uncPath)
|
||||||
|
_Logger.Info($"✓ Lese-Berechtigung vorhanden ({files.Length} Dateien gefunden)")
|
||||||
|
Return True
|
||||||
|
Catch permEx As UnauthorizedAccessException
|
||||||
|
_Logger.Error($"❌ Keine Lese-Berechtigung: {permEx.Message}")
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
Else
|
||||||
|
_Logger.Error($"❌ UNC-Pfad nicht erreichbar oder existiert nicht")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"❌ Fehler beim Testen des UNC-Zugriffs: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Trennt ein Netzlaufwerk mit Windows-API
|
||||||
|
''' </summary>
|
||||||
|
Public Function DisconnectNetworkDrive(driveLetter As String, Optional force As Boolean = True) As Boolean
|
||||||
|
Try
|
||||||
|
' Formatierung sicherstellen
|
||||||
|
driveLetter = driveLetter.Trim().ToUpper()
|
||||||
|
If Not driveLetter.EndsWith(":") Then
|
||||||
|
driveLetter &= ":"
|
||||||
|
End If
|
||||||
|
Dim driveExists As Boolean = False
|
||||||
|
Try
|
||||||
|
Dim driveInfo As New System.IO.DriveInfo(driveLetter)
|
||||||
|
driveExists = driveInfo.IsReady
|
||||||
|
Catch
|
||||||
|
driveExists = False
|
||||||
|
End Try
|
||||||
|
|
||||||
|
If Not driveExists Then
|
||||||
|
_Logger.Debug($"ℹ️ Laufwerk {driveLetter} existiert nicht - Disconnect übersprungen")
|
||||||
|
Return True ' Kein Fehler, da das gewünschte Ergebnis erreicht ist (Laufwerk ist nicht verbunden)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim flags As Integer = CONNECT_UPDATE_PROFILE
|
||||||
|
Dim result As Integer = WNetCancelConnection2(driveLetter, flags, force)
|
||||||
|
|
||||||
|
If result = ERROR_SUCCESS Then
|
||||||
|
_Logger.Debug($"✓ Netzlaufwerk {driveLetter} erfolgreich getrennt")
|
||||||
|
Return True
|
||||||
|
ElseIf result = 2250 Then ' ERROR_NOT_CONNECTED
|
||||||
|
' Von WARN auf DEBUG herabgestuft, da es kein echter Fehler ist
|
||||||
|
_Logger.Debug($"ℹ️ Laufwerk {driveLetter} war nicht verbunden (Code 2250)")
|
||||||
|
Return True
|
||||||
|
ElseIf result = ERROR_ALREADY_ASSIGNED Then
|
||||||
|
_Logger.Debug($"ℹ️ Netzlaufwerk {driveLetter} war nicht verbunden")
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
_Logger.Warn($"⚠️ Warnung beim Trennen von {driveLetter}: Error Code {result}")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Debug($"⚠️ Fehler beim Trennen von {driveLetter} (ignoriert): {ex.Message}")
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Ermittelt alle gemappten Netzlaufwerke
|
||||||
|
''' </summary>
|
||||||
|
Public Function GetMappedNetworkDrives() As List(Of NetworkDriveInfo)
|
||||||
|
Dim mappedDrives As New List(Of NetworkDriveInfo)
|
||||||
|
|
||||||
|
Try
|
||||||
|
For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives()
|
||||||
|
If drive.DriveType = IO.DriveType.Network Then
|
||||||
|
Dim driveInfo As New NetworkDriveInfo With {
|
||||||
|
.DriveLetter = drive.Name,
|
||||||
|
.NetworkPath = GetNetworkPath(drive.Name),
|
||||||
|
.DriveType = drive.DriveType,
|
||||||
|
.IsReady = drive.IsReady
|
||||||
|
}
|
||||||
|
|
||||||
|
If drive.IsReady Then
|
||||||
|
Try
|
||||||
|
driveInfo.TotalSize = drive.TotalSize
|
||||||
|
driveInfo.FreeSpace = drive.AvailableFreeSpace
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Debug($"Konnte Größeninformationen für {drive.Name} nicht ermitteln: {ex.Message}")
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
|
||||||
|
mappedDrives.Add(driveInfo)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
_Logger.Debug($"Insgesamt {mappedDrives.Count} Netzlaufwerk(e) gefunden")
|
||||||
|
Return mappedDrives
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler beim Ermitteln der Netzlaufwerke: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return mappedDrives
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Ermittelt den UNC-Pfad eines gemappten Laufwerks
|
||||||
|
''' </summary>
|
||||||
|
Public Function GetNetworkPath(driveLetter As String) As String
|
||||||
|
Try
|
||||||
|
driveLetter = driveLetter.Trim().ToUpper()
|
||||||
|
If Not driveLetter.EndsWith(":") Then
|
||||||
|
driveLetter &= ":"
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim network As Object = CreateObject("WScript.Network")
|
||||||
|
Dim enumDrives As Object = network.EnumNetworkDrives()
|
||||||
|
|
||||||
|
For i As Integer = 0 To enumDrives.Count - 1 Step 2
|
||||||
|
If enumDrives.Item(i).ToString.Equals(driveLetter, StringComparison.OrdinalIgnoreCase) Then
|
||||||
|
Return enumDrives.Item(i + 1).ToString()
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return String.Empty
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Debug($"Fehler beim Ermitteln des Netzwerkpfads für {driveLetter}: {ex.Message}")
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Prüft ob ein bestimmtes Laufwerk als Netzlaufwerk gemappt ist
|
||||||
|
''' </summary>
|
||||||
|
Public Shared Function IsDriveMapped(driveLetter As String) As Boolean
|
||||||
|
Try
|
||||||
|
driveLetter = driveLetter.Trim().ToUpper()
|
||||||
|
If Not driveLetter.EndsWith(":") Then
|
||||||
|
driveLetter &= ":"
|
||||||
|
End If
|
||||||
|
If Not driveLetter.EndsWith("\") Then
|
||||||
|
driveLetter &= "\"
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim driveInfo As New IO.DriveInfo(driveLetter)
|
||||||
|
Return driveInfo.DriveType = IO.DriveType.Network AndAlso driveInfo.IsReady
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Gibt eine formatierte Übersicht aller gemappten Netzlaufwerke zurück
|
||||||
|
''' </summary>
|
||||||
|
Public Function GetMappedDrivesInfo() As String
|
||||||
|
Dim result As New System.Text.StringBuilder()
|
||||||
|
Dim drives = GetMappedNetworkDrives()
|
||||||
|
|
||||||
|
If drives.Count = 0 Then
|
||||||
|
Return "Keine Netzlaufwerke gefunden."
|
||||||
|
End If
|
||||||
|
|
||||||
|
result.AppendLine($"Gemappte Netzlaufwerke ({drives.Count}):")
|
||||||
|
result.AppendLine(New String("-"c, 60))
|
||||||
|
|
||||||
|
For Each drive In drives
|
||||||
|
result.AppendLine($"Laufwerk: {drive.DriveLetter}")
|
||||||
|
result.AppendLine($" Pfad: {drive.NetworkPath}")
|
||||||
|
result.AppendLine($" Status: {If(drive.IsReady, "Verfügbar", "Nicht verfügbar")}")
|
||||||
|
|
||||||
|
If drive.IsReady AndAlso drive.TotalSize > 0 Then
|
||||||
|
Dim totalGB As Double = drive.TotalSize / (1024.0 ^ 3)
|
||||||
|
Dim freeGB As Double = drive.FreeSpace / (1024.0 ^ 3)
|
||||||
|
result.AppendLine($" Größe: {totalGB:N2} GB (Frei: {freeGB:N2} GB)")
|
||||||
|
End If
|
||||||
|
|
||||||
|
result.AppendLine()
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return result.ToString()
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Mappt ein spezifisches Laufwerk (z.B. "V") mit Blacklist-Prüfung
|
||||||
|
''' </summary>
|
||||||
|
Public Function MapSpecificDrive(driveLetter As String, blacklist As String, networkPath As String) As Boolean
|
||||||
|
Try
|
||||||
|
' Formatierung sicherstellen
|
||||||
|
driveLetter = driveLetter.Trim().ToUpper().Replace(":", "")
|
||||||
|
|
||||||
|
If String.IsNullOrEmpty(driveLetter) OrElse driveLetter.Length <> 1 Then
|
||||||
|
_Logger.Warn($"⚠️ Ungültiger Laufwerksbuchstabe: [{driveLetter}]")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim driveWithColon As String = driveLetter & ":"
|
||||||
|
|
||||||
|
' Prüfen ob Laufwerk verfügbar ist
|
||||||
|
If Not IsDriveLetterAvailable(driveWithColon, blacklist) Then
|
||||||
|
_Logger.Warn($"⚠️ Laufwerk {driveWithColon} ist nicht verfügbar (bereits verwendet oder in Blacklist)")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
' UNC-Pfad vorbereiten (ohne abschließenden Backslash)
|
||||||
|
Dim uncPath As String = networkPath.TrimEnd("\"c)
|
||||||
|
|
||||||
|
' Laufwerk mappen (OHNE Credentials, persistent=False für temporäres Mapping)
|
||||||
|
Dim result = MapNetworkDrive(driveWithColon, uncPath, blacklist, userName:=Nothing, password:=Nothing, persistent:=False)
|
||||||
|
|
||||||
|
If Not String.IsNullOrEmpty(result) Then
|
||||||
|
_Logger.Debug($"✓ Laufwerk {driveWithColon} erfolgreich gemappt zu [{uncPath}]")
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
_Logger.Error($"❌ Fehler beim Mappen von {driveWithColon}")
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler in MapSpecificDrive: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Mappt automatisch den nächsten freien Laufwerksbuchstaben (Z→A)
|
||||||
|
''' </summary>
|
||||||
|
Public Function MapDriveAutomatic(blacklist As String, networkPath As String) As String
|
||||||
|
Try
|
||||||
|
' UNC-Pfad vorbereiten (ohne abschließenden Backslash)
|
||||||
|
Dim uncPath As String = networkPath.TrimEnd("\"c)
|
||||||
|
|
||||||
|
_Logger.Debug($"🔍 Suche automatisch freien Laufwerksbuchstaben...")
|
||||||
|
_Logger.Debug($" Blacklist: [{blacklist}]")
|
||||||
|
_Logger.Debug($" Netzwerkpfad: [{uncPath}]")
|
||||||
|
|
||||||
|
' Automatisches Mapping (leer = automatische Auswahl, persistent=False)
|
||||||
|
Dim result = MapNetworkDrive("", uncPath, blacklist, userName:=Nothing, password:=Nothing, persistent:=False)
|
||||||
|
|
||||||
|
If Not String.IsNullOrEmpty(result) Then
|
||||||
|
_Logger.Debug($"✓ Automatisch gewähltes Laufwerk: {result}")
|
||||||
|
Return result
|
||||||
|
Else
|
||||||
|
_Logger.Error($"❌ Kein freier Laufwerksbuchstabe verfügbar")
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error($"Fehler in MapDriveAutomatic: {ex.Message}")
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
|
End Class
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
Imports System.Web
|
Imports System.Web
|
||||||
|
|
||||||
Public Module ModuleExtensions
|
Public Module ModuleExtensions
|
||||||
|
Public TEMP_DOCUMENT_FOLDER As String = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Documents")
|
||||||
Const UnixEraStartTicks As Long = 621355968000000000
|
Const UnixEraStartTicks As Long = 621355968000000000
|
||||||
|
|
||||||
' ======================================================
|
' ======================================================
|
||||||
|
|||||||
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' indem Sie "*" wie unten gezeigt eingeben:
|
' indem Sie "*" wie unten gezeigt eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.3.9.0")>
|
<Assembly: AssemblyVersion("1.4.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.3.9.0")>
|
<Assembly: AssemblyFileVersion("1.4.0.0")>
|
||||||
|
|||||||
@@ -17,6 +17,14 @@
|
|||||||
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -47,18 +47,6 @@
|
|||||||
<OptionInfer>On</OptionInfer>
|
<OptionInfer>On</OptionInfer>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Base, Version=1.3.8.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Base.1.3.8\lib\net462\DigitalData.Modules.Base.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="DigitalData.Modules.Database, Version=2.3.5.4, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Database.2.3.5.4\lib\net462\DigitalData.Modules.Database.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="DigitalData.Modules.Encryption, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Encryption.1.3.1\lib\net462\DigitalData.Modules.Encryption.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
|
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -149,7 +137,18 @@
|
|||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="README.txt" />
|
<ProjectReference Include="..\Base\Base.vbproj">
|
||||||
|
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
||||||
|
<Name>Base</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Database\Database.vbproj">
|
||||||
|
<Project>{eaf0ea75-5fa7-485d-89c7-b2d843b03a96}</Project>
|
||||||
|
<Name>Database</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|||||||
@@ -36,8 +36,9 @@ Public Class ConfigDbFunct
|
|||||||
Dim oDatabase As MSSQLServer = New MSSQLServer(pLogConfig, oDecryptedConnectionString)
|
Dim oDatabase As MSSQLServer = New MSSQLServer(pLogConfig, oDecryptedConnectionString)
|
||||||
|
|
||||||
Dim oSql As String = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = '" + pProductName + "' AND ACTIVE = 1 AND VERSION = '" + pVersion + "'"
|
Dim oSql As String = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = '" + pProductName + "' AND ACTIVE = 1 AND VERSION = '" + pVersion + "'"
|
||||||
Dim oLicenseString As String = oDatabase.GetScalarValue(oSql)
|
oLogger.Debug(String.Format("oSql in GetProductLicense: {0}", oSql))
|
||||||
|
|
||||||
|
Dim oLicenseString As String = oDatabase.GetScalarValue(oSql)
|
||||||
Return oLicenseString
|
Return oLicenseString
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyDescription("Stellt Module für die Konfiguration von Produkten bereit")>
|
<Assembly: AssemblyDescription("Stellt Module für die Konfiguration von Produkten bereit")>
|
||||||
<Assembly: AssemblyCompany("Digital Data GmbH, Heuchelheim")>
|
<Assembly: AssemblyCompany("Digital Data GmbH, Heuchelheim")>
|
||||||
<Assembly: AssemblyProduct("Modules.Config")>
|
<Assembly: AssemblyProduct("Modules.Config")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
||||||
<Assembly: AssemblyTrademark("")>
|
<Assembly: AssemblyTrademark("1.4.0.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -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("1.3.0.0")>
|
<Assembly: AssemblyVersion("1.4.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.3.0.0")>
|
<Assembly: AssemblyFileVersion("1.4.0.0")>
|
||||||
|
|||||||
2
Config/My Project/Settings.Designer.vb
generated
2
Config/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
BASE MODULE
|
|
||||||
===========
|
|
||||||
|
|
||||||
This module is intended for often used constants and datastructures.
|
|
||||||
Therefor it is important that this module does not have any dependencies on other modules!!
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DigitalData.Modules.Base" version="1.3.8" targetFramework="net462" />
|
|
||||||
<package id="DigitalData.Modules.Database" version="2.3.5.4" targetFramework="net462" />
|
|
||||||
<package id="DigitalData.Modules.Encryption" version="1.3.1" targetFramework="net462" />
|
|
||||||
<package id="DigitalData.Modules.Logging" version="2.6.5" targetFramework="net462" />
|
|
||||||
<package id="EntityFramework" version="6.4.4" targetFramework="net462" />
|
<package id="EntityFramework" version="6.4.4" targetFramework="net462" />
|
||||||
<package id="EntityFramework.Firebird" version="6.4.0" targetFramework="net462" />
|
<package id="EntityFramework.Firebird" version="6.4.0" targetFramework="net462" />
|
||||||
<package id="FirebirdSql.Data.FirebirdClient" version="7.5.0" targetFramework="net462" />
|
<package id="FirebirdSql.Data.FirebirdClient" version="7.5.0" targetFramework="net462" />
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports System.Data.SqlClient
|
Imports System.Data.SqlClient
|
||||||
|
Imports System.Threading
|
||||||
Imports DigitalData.Modules.Encryption
|
Imports DigitalData.Modules.Encryption
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
@@ -313,6 +314,19 @@ Public Class MSSQLServer
|
|||||||
End Using
|
End Using
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function GetDatatableWithoutTransaction(pSqlCommand As String, Optional pTimeout As Integer = 120) As DataTable Implements IDatabase.GetDatatableWithoutTransaction
|
||||||
|
Using oSqlConnection = GetSQLConnection()
|
||||||
|
Return GetDatatableWithConnectionObject(pSqlCommand, oSqlConnection, TransactionMode.NoTransaction, Nothing, pTimeout)
|
||||||
|
End Using
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function GetDatatableWithoutTransaction(pSqlCommand As SqlCommand, Optional pTimeout As Integer = 120) As DataTable Implements IDatabase.GetDatatableWithoutTransaction
|
||||||
|
Using oSqlConnection = GetSQLConnection()
|
||||||
|
Return GetDatatableWithConnectionObject(pSqlCommand, oSqlConnection, TransactionMode.NoTransaction, Nothing, pTimeout)
|
||||||
|
End Using
|
||||||
|
End Function
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' Returns a datatable for a SQL Statement
|
''' Returns a datatable for a SQL Statement
|
||||||
''' </summary>
|
''' </summary>
|
||||||
@@ -340,6 +354,10 @@ Public Class MSSQLServer
|
|||||||
Return Await Task.Run(Function() GetDatatable(pSqlCommandObject, pTimeout))
|
Return Await Task.Run(Function() GetDatatable(pSqlCommandObject, pTimeout))
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Async Function GetDatatableWithoutTransactionAsync(pSqlCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable)
|
||||||
|
Return Await Task.Run(Function() GetDatatableWithoutTransaction(pSqlCommand, pTimeout))
|
||||||
|
End Function
|
||||||
|
|
||||||
Public Function GetDatatableWithConnection(pSqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
Public Function GetDatatableWithConnection(pSqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
||||||
Using oConnection = GetConnection(pConnectionString)
|
Using oConnection = GetConnection(pConnectionString)
|
||||||
Return GetDatatableWithConnectionObject(pSqlCommand, oConnection, pTimeout:=Timeout)
|
Return GetDatatableWithConnectionObject(pSqlCommand, oConnection, pTimeout:=Timeout)
|
||||||
@@ -659,4 +677,5 @@ Public Class MSSQLServer
|
|||||||
Return oParamString
|
Return oParamString
|
||||||
|
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ Public Class Oracle
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function GetDatatable(SqlCommand As SqlClient.SqlCommand, Optional Timeout As Integer = 120) As DataTable Implements IDatabase.GetDatatable
|
Public Function GetDatatable(SqlCommand As System.Data.SqlClient.SqlCommand, Optional Timeout As Integer = 120) As DataTable Implements IDatabase.GetDatatable
|
||||||
Throw New NotImplementedException()
|
Throw New NotImplementedException()
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
@@ -251,5 +251,11 @@ Public Class Oracle
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function GetDatatableWithoutTransaction(SqlCommand As String, Optional Timeout As Integer = 120) As DataTable Implements IDatabase.GetDatatableWithoutTransaction
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function GetDatatableWithoutTransaction(SqlCommand As SqlClient.SqlCommand, Optional Timeout As Integer = 120) As DataTable Implements IDatabase.GetDatatableWithoutTransaction
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
<configSections>
|
||||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
||||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.21.1, Culture=neutral, PublicKeyToken=89b483f429c47342" />
|
||||||
</configSections>
|
</configSections>
|
||||||
<entityFramework>
|
<entityFramework>
|
||||||
<defaultConnectionFactory type="EntityFramework.Firebird.FbConnectionFactory, EntityFramework.Firebird" />
|
<defaultConnectionFactory type="EntityFramework.Firebird.FbConnectionFactory, EntityFramework.Firebird" />
|
||||||
@@ -11,13 +12,29 @@
|
|||||||
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="EntityFramework.Firebird.FbProviderServices, EntityFramework.Firebird" />
|
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="EntityFramework.Firebird.FbProviderServices, EntityFramework.Firebird" />
|
||||||
</providers>
|
</providers>
|
||||||
</entityFramework>
|
</entityFramework>
|
||||||
|
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /></startup></configuration>
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||||
|
</startup>
|
||||||
|
<system.data>
|
||||||
|
<DbProviderFactories>
|
||||||
|
<remove invariant="Oracle.ManagedDataAccess.Client" />
|
||||||
|
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.21.1, Culture=neutral, PublicKeyToken=89b483f429c47342" />
|
||||||
|
</DbProviderFactories>
|
||||||
|
</system.data>
|
||||||
|
</configuration>
|
||||||
@@ -47,12 +47,6 @@
|
|||||||
<OptionInfer>On</OptionInfer>
|
<OptionInfer>On</OptionInfer>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Encryption, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Encryption.1.3.1\lib\net462\DigitalData.Modules.Encryption.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
|
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -65,24 +59,55 @@
|
|||||||
<Reference Include="FirebirdSql.Data.FirebirdClient, Version=7.5.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSIL">
|
<Reference Include="FirebirdSql.Data.FirebirdClient, Version=7.5.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\FirebirdSql.Data.FirebirdClient.7.5.0\lib\net452\FirebirdSql.Data.FirebirdClient.dll</HintPath>
|
<HintPath>..\packages\FirebirdSql.Data.FirebirdClient.7.5.0\lib\net452\FirebirdSql.Data.FirebirdClient.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Oracle.ManagedDataAccess">
|
<Reference Include="Oracle.ManagedDataAccess, Version=4.122.21.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\Oracle.ManagedDataAccess.dll</HintPath>
|
<HintPath>..\packages\Oracle.ManagedDataAccess.21.15.0\lib\net462\Oracle.ManagedDataAccess.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Data.Odbc, Version=6.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Data.Odbc, Version=6.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Data.Odbc.6.0.1\lib\net461\System.Data.Odbc.dll</HintPath>
|
<HintPath>..\packages\System.Data.Odbc.6.0.1\lib\net461\System.Data.Odbc.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Formats.Asn1.8.0.0\lib\net462\System.Formats.Asn1.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.IO.Compression" />
|
<Reference Include="System.IO.Compression" />
|
||||||
|
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Numerics" />
|
||||||
|
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Runtime.Serialization" />
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
<Reference Include="System.ServiceModel" />
|
<Reference Include="System.ServiceModel" />
|
||||||
|
<Reference Include="System.Text.Encodings.Web, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Encodings.Web.6.0.0\lib\net461\System.Text.Encodings.Web.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Text.Json, Version=6.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Json.6.0.1\lib\net461\System.Text.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Transactions" />
|
<Reference Include="System.Transactions" />
|
||||||
|
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
@@ -149,8 +174,24 @@
|
|||||||
<CustomToolNamespace>My</CustomToolNamespace>
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="Oracle.DataAccess.Common.Configuration.Section.xsd">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
|
<None Include="Oracle.ManagedDataAccess.Client.Configuration.Section.xsd">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Encryption\Encryption.vbproj">
|
||||||
|
<Project>{8a8f20fc-c46e-41ac-bee7-218366cfff99}</Project>
|
||||||
|
<Name>Encryption</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@@ -158,9 +199,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
|
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
|
||||||
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
|
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\System.Text.Json.6.0.1\build\System.Text.Json.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Text.Json.6.0.1\build\System.Text.Json.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
|
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<Import Project="..\packages\System.Text.Json.6.0.1\build\System.Text.Json.targets" Condition="Exists('..\packages\System.Text.Json.6.0.1\build\System.Text.Json.targets')" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -11,6 +11,9 @@ Public Interface IDatabase
|
|||||||
Function GetDatatable(SqlCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
Function GetDatatable(SqlCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
||||||
Function GetDatatable(SqlCommand As SqlCommand, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
Function GetDatatable(SqlCommand As SqlCommand, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
||||||
|
|
||||||
|
Function GetDatatableWithoutTransaction(SqlCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
||||||
|
Function GetDatatableWithoutTransaction(SqlCommand As SqlCommand, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
|
||||||
|
|
||||||
Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean
|
Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean
|
||||||
Function ExecuteNonQuery(SQLCommand As String) As Boolean
|
Function ExecuteNonQuery(SQLCommand As String) As Boolean
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Database")>
|
<Assembly: AssemblyProduct("Modules.Database")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
||||||
<Assembly: AssemblyTrademark("2.3.6.0")>
|
<Assembly: AssemblyTrademark("2.3.7.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -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("2.3.6.0")>
|
<Assembly: AssemblyVersion("2.3.7.0")>
|
||||||
<Assembly: AssemblyFileVersion("2.3.6.0")>
|
<Assembly: AssemblyFileVersion("2.3.7.0")>
|
||||||
|
|||||||
2
Database/My Project/Settings.Designer.vb
generated
2
Database/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
138
Database/Oracle.DataAccess.Common.Configuration.Section.xsd
Normal file
138
Database/Oracle.DataAccess.Common.Configuration.Section.xsd
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
|
<xs:simpleType name="parameterDirection">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="Output"/>
|
||||||
|
<xs:enumeration value="InputOutput"/>
|
||||||
|
<xs:enumeration value="ReturnValue"/>
|
||||||
|
<xs:enumeration value="Implicit"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="customBoolean">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="true"/>
|
||||||
|
<xs:enumeration value="false"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="ONSParameters">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="nodeList"/>
|
||||||
|
<!--<xs:enumeration value="walletFile"/>
|
||||||
|
<xs:enumeration value="walletPassword"/>-->
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="ONSModeValues">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="local"/>
|
||||||
|
<xs:enumeration value="remote"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="datatype">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="System.Binary"/>
|
||||||
|
<xs:enumeration value="System.Boolean"/>
|
||||||
|
<xs:enumeration value="System.Byte"/>
|
||||||
|
<xs:enumeration value="System.Byte[]"/>
|
||||||
|
<xs:enumeration value="System.Char"/>
|
||||||
|
<xs:enumeration value="System.DateTime"/>
|
||||||
|
<xs:enumeration value="System.DateTimeOffset"/>
|
||||||
|
<xs:enumeration value="System.Decimal"/>
|
||||||
|
<xs:enumeration value="System.Double"/>
|
||||||
|
<xs:enumeration value="System.Guid"/>
|
||||||
|
<xs:enumeration value="System.Int16"/>
|
||||||
|
<xs:enumeration value="System.Int32"/>
|
||||||
|
<xs:enumeration value="System.Int64"/>
|
||||||
|
<xs:enumeration value="System.SByte"/>
|
||||||
|
<xs:enumeration value="System.Single"/>
|
||||||
|
<xs:enumeration value="System.String"/>
|
||||||
|
<xs:enumeration value="System.TimeSpan"/>
|
||||||
|
<xs:enumeration value="System.UInt16"/>
|
||||||
|
<xs:enumeration value="System.UInt32"/>
|
||||||
|
<xs:enumeration value="System.UInt64"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="providerType">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="BFile"/>
|
||||||
|
<xs:enumeration value="BinaryFloat"/>
|
||||||
|
<xs:enumeration value="BinaryDouble"/>
|
||||||
|
<xs:enumeration value="Blob"/>
|
||||||
|
<xs:enumeration value="Byte"/>
|
||||||
|
<xs:enumeration value="Char"/>
|
||||||
|
<xs:enumeration value="Clob"/>
|
||||||
|
<xs:enumeration value="Date"/>
|
||||||
|
<xs:enumeration value="Decimal"/>
|
||||||
|
<xs:enumeration value="Double"/>
|
||||||
|
<xs:enumeration value="Int16"/>
|
||||||
|
<xs:enumeration value="Int32"/>
|
||||||
|
<xs:enumeration value="Int64"/>
|
||||||
|
<xs:enumeration value="IntervalDS"/>
|
||||||
|
<xs:enumeration value="IntervalYM"/>
|
||||||
|
<xs:enumeration value="Long"/>
|
||||||
|
<xs:enumeration value="LongRaw"/>
|
||||||
|
<xs:enumeration value="NChar"/>
|
||||||
|
<xs:enumeration value="NClob"/>
|
||||||
|
<xs:enumeration value="NVarchar2"/>
|
||||||
|
<xs:enumeration value="Object"/>
|
||||||
|
<xs:enumeration value="Raw"/>
|
||||||
|
<xs:enumeration value="Single"/>
|
||||||
|
<xs:enumeration value="TimeStamp"/>
|
||||||
|
<xs:enumeration value="TimeStampLTZ"/>
|
||||||
|
<xs:enumeration value="TimeStampTZ"/>
|
||||||
|
<xs:enumeration value="Varchar2"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="nativeDataType">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="BFile"/>
|
||||||
|
<xs:enumeration value="Binary_Float"/>
|
||||||
|
<xs:enumeration value="Binary_Double"/>
|
||||||
|
<xs:enumeration value="Blob"/>
|
||||||
|
<xs:enumeration value="Char"/>
|
||||||
|
<xs:enumeration value="Clob"/>
|
||||||
|
<xs:enumeration value="Date"/>
|
||||||
|
<xs:enumeration value="Number"/>
|
||||||
|
<xs:enumeration value="Interval Day To Second"/>
|
||||||
|
<xs:enumeration value="Interval Year To Month"/>
|
||||||
|
<xs:enumeration value="Long"/>
|
||||||
|
<xs:enumeration value="Long Raw"/>
|
||||||
|
<xs:enumeration value="NChar"/>
|
||||||
|
<xs:enumeration value="NClob"/>
|
||||||
|
<xs:enumeration value="NVarchar2"/>
|
||||||
|
<xs:enumeration value="Raw"/>
|
||||||
|
<xs:enumeration value="Rowid"/>
|
||||||
|
<xs:enumeration value="Timestamp"/>
|
||||||
|
<xs:enumeration value="Timestamp With Local Time Zone"/>
|
||||||
|
<xs:enumeration value="Timestamp With Time Zone"/>
|
||||||
|
<xs:enumeration value="URowid"/>
|
||||||
|
<xs:enumeration value="UserDefinedType"/>
|
||||||
|
<xs:enumeration value="Varchar2"/>
|
||||||
|
<xs:enumeration value="XmlType"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="providerDBType">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="AnsiString"/>
|
||||||
|
<xs:enumeration value="AnsiStringFixedLength"/>
|
||||||
|
<xs:enumeration value="Binary"/>
|
||||||
|
<xs:enumeration value="Byte"/>
|
||||||
|
<xs:enumeration value="Date"/>
|
||||||
|
<xs:enumeration value="DateTime"/>
|
||||||
|
<xs:enumeration value="DateTimeOffset"/>
|
||||||
|
<xs:enumeration value="Decimal"/>
|
||||||
|
<xs:enumeration value="Double"/>
|
||||||
|
<xs:enumeration value="Int16"/>
|
||||||
|
<xs:enumeration value="Int32"/>
|
||||||
|
<xs:enumeration value="Int64"/>
|
||||||
|
<xs:enumeration value="Object"/>
|
||||||
|
<xs:enumeration value="Single"/>
|
||||||
|
<xs:enumeration value="String"/>
|
||||||
|
<xs:enumeration value="StringFixedLength"/>
|
||||||
|
<xs:enumeration value="Time"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,221 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
|
<xs:include schemaLocation="Oracle.DataAccess.Common.Configuration.Section.xsd"/>
|
||||||
|
<xs:element name="oracle.manageddataaccess.client" >
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:element name="version" type="odpmversiontype" minOccurs="0" />
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:complexType name="odpmversiontype">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="odpmparameters">
|
||||||
|
<xs:attribute name="number" type="xs:string" use="required" />
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="odpmparameters">
|
||||||
|
<xs:all>
|
||||||
|
<xs:element minOccurs="0" name="settings">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="setting">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="udtMappings">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="udtMapping">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="typeName" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="factoryName" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="dataSource" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="schemaName" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="LDAPsettings">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="LDAPsetting">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="distributedTransaction">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="setting">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="dataSources">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="dataSource">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="alias" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="descriptor" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:element minOccurs="0" name="connectionPools">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="connectionPool">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="connectionString" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="poolName" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
|
||||||
|
<xs:element minOccurs="0" name="edmMappings">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="unbounded" name="edmMapping">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="unbounded" name="add">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="precision" type="xs:int" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="dataType" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="unbounded" name="edmNumberMapping">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="unbounded" name="add">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="NETType" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="MinPrecision" type="xs:int" use="required" />
|
||||||
|
<xs:attribute name="MaxPrecision" type="xs:int" use="required" />
|
||||||
|
<xs:attribute name="DBType" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="implicitRefCursor">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="storedProcedure">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="1" name="refCursor">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="1" minOccurs="1" name="bindInfo">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="mode" type="parameterDirection" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element maxOccurs="unbounded" minOccurs="0" name="metadata">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="columnOrdinal" type="xs:int" use="required" />
|
||||||
|
<xs:attribute name="columnName" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="baseColumnName" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="baseSchemaName" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="baseTableName" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="providerType" type="providerType" use="optional" />
|
||||||
|
<xs:attribute name="columnSize" type="xs:int" use="optional" />
|
||||||
|
<xs:attribute name="numericPrecision" type="xs:int" use="optional" />
|
||||||
|
<xs:attribute name="numericScale" type="xs:int" use="optional" />
|
||||||
|
<xs:attribute name="isUnique" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isKey" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isRowID" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="dataType" type="datatype" use="optional" />
|
||||||
|
<xs:attribute name="allowDBNull" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isAliased" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isByteSemantic" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isExpression" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isHidden" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isReadOnly" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="isLong" type="customBoolean" use="optional" />
|
||||||
|
<xs:attribute name="udtTypeName" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="nativeDataType" type="nativeDataType" use="optional" />
|
||||||
|
<xs:attribute name="providerDBType" type="providerDBType" use="optional" />
|
||||||
|
<xs:attribute name="objectName" type="xs:string" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="position" type="xs:int" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="schema" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" name="onsConfig">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element minOccurs="0" name="settings">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="2" minOccurs="0" name="setting">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="unbounded" name="ons">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="3" minOccurs="1" name="add">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="name" type="ONSParameters" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="database" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="configFile" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="mode" type="ONSModeValues" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,10 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DigitalData.Modules.Encryption" version="1.3.1" targetFramework="net462" />
|
|
||||||
<package id="DigitalData.Modules.Logging" version="2.6.5" targetFramework="net462" />
|
|
||||||
<package id="EntityFramework" version="6.4.4" targetFramework="net461" />
|
<package id="EntityFramework" version="6.4.4" targetFramework="net461" />
|
||||||
<package id="EntityFramework.Firebird" version="6.4.0" targetFramework="net461" />
|
<package id="EntityFramework.Firebird" version="6.4.0" targetFramework="net461" />
|
||||||
<package id="FirebirdSql.Data.FirebirdClient" version="7.5.0" targetFramework="net461" />
|
<package id="FirebirdSql.Data.FirebirdClient" version="7.5.0" targetFramework="net461" />
|
||||||
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0" targetFramework="net462" />
|
||||||
<package id="NLog" version="5.0.5" targetFramework="net461" />
|
<package id="NLog" version="5.0.5" targetFramework="net461" />
|
||||||
|
<package id="Oracle.ManagedDataAccess" version="21.15.0" targetFramework="net462" />
|
||||||
|
<package id="System.Buffers" version="4.5.1" targetFramework="net462" />
|
||||||
<package id="System.Data.Odbc" version="6.0.1" targetFramework="net461" />
|
<package id="System.Data.Odbc" version="6.0.1" targetFramework="net461" />
|
||||||
|
<package id="System.Formats.Asn1" version="8.0.0" targetFramework="net462" />
|
||||||
|
<package id="System.Memory" version="4.5.5" targetFramework="net462" />
|
||||||
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net462" />
|
||||||
|
<package id="System.Text.Encodings.Web" version="6.0.0" targetFramework="net462" />
|
||||||
|
<package id="System.Text.Json" version="6.0.1" targetFramework="net462" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
||||||
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -44,6 +44,14 @@
|
|||||||
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /></startup></configuration>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="NLog" version="5.0.5" targetFramework="net461" />
|
<package id="NLog" version="5.0.5" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -45,9 +45,6 @@
|
|||||||
<OptionInfer>On</OptionInfer>
|
<OptionInfer>On</OptionInfer>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
||||||
@@ -117,5 +114,11 @@
|
|||||||
</None>
|
</None>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
2
Encryption/My Project/Settings.Designer.vb
generated
2
Encryption/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DigitalData.Modules.Logging" version="2.6.5" targetFramework="net462" />
|
<package id="NLog" version="5.0.5" targetFramework="net462" />
|
||||||
<package id="NLog" version="5.0.5" targetFramework="net461" />
|
|
||||||
</packages>
|
</packages>
|
||||||
@@ -45,7 +45,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
|||||||
2
Filesystem/My Project/Settings.Designer.vb
generated
2
Filesystem/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DigitalData.Modules.Logging" version="2.6.5" targetFramework="net48" />
|
|
||||||
<package id="NLog" version="5.0.5" targetFramework="net48" />
|
<package id="NLog" version="5.0.5" targetFramework="net48" />
|
||||||
<package id="NuGet.CommandLine" version="6.13.2" targetFramework="net48" developmentDependency="true" />
|
<package id="NuGet.CommandLine" version="6.13.2" targetFramework="net48" developmentDependency="true" />
|
||||||
<package id="protobuf-net" version="2.4.0" targetFramework="net461" />
|
<package id="protobuf-net" version="2.4.0" targetFramework="net461" />
|
||||||
|
|||||||
@@ -49,6 +49,15 @@
|
|||||||
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Base">
|
||||||
|
<HintPath>..\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Database">
|
||||||
|
<HintPath>..\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Logging">
|
||||||
|
<HintPath>..\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
|
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -185,8 +194,8 @@
|
|||||||
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Text.Json, Version=8.0.0.5, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Json, Version=8.0.0.6, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll</HintPath>
|
<HintPath>..\packages\System.Text.Json.8.0.6\lib\net462\System.Text.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
@@ -260,6 +269,7 @@
|
|||||||
<Compile Include="ZUGFeRDInterface\Version2.2_FacturX\CrossIndustryInvoiceType.vb" />
|
<Compile Include="ZUGFeRDInterface\Version2.2_FacturX\CrossIndustryInvoiceType.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\Version2.3_3_FacturX\CrossIndustryInvoiceType.vb" />
|
<Compile Include="ZUGFeRDInterface\Version2.3_3_FacturX\CrossIndustryInvoiceType.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\Version2.3_FacturX\CrossIndustryInvoiceType.vb" />
|
<Compile Include="ZUGFeRDInterface\Version2.3_FacturX\CrossIndustryInvoiceType.vb" />
|
||||||
|
<Compile Include="ZUGFeRDInterface\Version2.4_FacturX\CrossIndustryInvoiceType.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
|
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -284,14 +294,6 @@
|
|||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Base\Base.vbproj">
|
|
||||||
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
|
||||||
<Name>Base</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Database\Database.vbproj">
|
|
||||||
<Project>{eaf0ea75-5fa7-485d-89c7-b2d843b03a96}</Project>
|
|
||||||
<Name>Database</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Logging\Logging.vbproj">
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
<Name>Logging</Name>
|
<Name>Logging</Name>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
||||||
<Assembly: AssemblyTrademark("2.3.7.0")>
|
<Assembly: AssemblyTrademark("2.4.3.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -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("2.3.7.0")>
|
<Assembly: AssemblyVersion("2.4.3.0")>
|
||||||
<Assembly: AssemblyFileVersion("2.3.7.0")>
|
<Assembly: AssemblyFileVersion("2.4.3.0")>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ Public Class ZUGFeRDInterface
|
|||||||
Public Const XMLSCHEMA_ZUGFERD_22 = "Version2_2_FacturX"
|
Public Const XMLSCHEMA_ZUGFERD_22 = "Version2_2_FacturX"
|
||||||
Public Const XMLSCHEMA_ZUGFERD_23 = "Version2_3_FacturX"
|
Public Const XMLSCHEMA_ZUGFERD_23 = "Version2_3_FacturX"
|
||||||
Public Const XMLSCHEMA_ZUGFERD_233 = "Version2_3_3_FacturX"
|
Public Const XMLSCHEMA_ZUGFERD_233 = "Version2_3_3_FacturX"
|
||||||
|
Public Const XMLSCHEMA_ZUGFERD_24 = "Version2_4_FacturX"
|
||||||
Public Const XMLSCHEMA_UBL_21_INVOICE = "UBL2_1_INVOICE"
|
Public Const XMLSCHEMA_UBL_21_INVOICE = "UBL2_1_INVOICE"
|
||||||
Public Const XMLSCHEMA_UBL_21_CREDITNOTE = "UBL2_1_CREDITNOTE"
|
Public Const XMLSCHEMA_UBL_21_CREDITNOTE = "UBL2_1_CREDITNOTE"
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ Public Class ZUGFeRDInterface
|
|||||||
Public ReadOnly Property FileGroup As FileGroups
|
Public ReadOnly Property FileGroup As FileGroups
|
||||||
Public ReadOnly Property PropertyValues As PropertyValues
|
Public ReadOnly Property PropertyValues As PropertyValues
|
||||||
|
|
||||||
|
|
||||||
Public Class ZugferdOptions
|
Public Class ZugferdOptions
|
||||||
Public Property AllowFacturX_Filename As Boolean = True
|
Public Property AllowFacturX_Filename As Boolean = True
|
||||||
Public Property AllowXRechnung_Filename As Boolean = True
|
Public Property AllowXRechnung_Filename As Boolean = True
|
||||||
@@ -84,6 +86,7 @@ Public Class ZUGFeRDInterface
|
|||||||
Public ElementValue As String
|
Public ElementValue As String
|
||||||
Public ErrorMessage As String
|
Public ErrorMessage As String
|
||||||
Public ErrorMessageDE As String
|
Public ErrorMessageDE As String
|
||||||
|
Public ErrorMessageToken As String
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -281,16 +284,22 @@ Public Class ZUGFeRDInterface
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="pPath"></param>
|
''' <param name="pPath"></param>
|
||||||
''' <returns>The embedded xml data as an XPath document</returns>
|
''' <returns>The embedded xml data as an XPath document</returns>
|
||||||
Public Function ValidateZUGFeRDFileWithGDPicture(pPath As String) As ZugferdResult
|
Public Function ValidateZUGFeRDFileWithGDPicture(pPath As String, Optional Validate As Boolean = False) As ZugferdResult
|
||||||
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
||||||
|
|
||||||
Try
|
Try
|
||||||
' Extract XML attachments only!
|
' Extract XML attachments only!
|
||||||
Dim oFiles = oEmbedExtractor.Extract(pPath, New List(Of String) From {"xml"})
|
Dim oFiles = oEmbedExtractor.Extract(pPath, New List(Of String) From {"xml"})
|
||||||
|
If Validate Then
|
||||||
|
Dim oZugferdResult = HandleEmbeddedFiles(oFiles)
|
||||||
|
Return _Validator.ValidateZUGFeRDDocument(oZugferdResult)
|
||||||
|
Else
|
||||||
|
' Attachments are in this case the files that are embedded into a pdf file,
|
||||||
|
' like for example the zugferd-invoice.xml file
|
||||||
|
Return HandleEmbeddedFiles(oFiles)
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
' Attachments are in this case the files that are embedded into a pdf file,
|
|
||||||
' like for example the zugferd-invoice.xml file
|
|
||||||
Return HandleEmbeddedFiles(oFiles)
|
|
||||||
|
|
||||||
Catch ex As ZUGFeRDExecption
|
Catch ex As ZUGFeRDExecption
|
||||||
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
||||||
@@ -396,9 +405,14 @@ Public Class ZUGFeRDInterface
|
|||||||
})
|
})
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'' Reihenfolge ab 2.3 geändert. Neuste Version immer zuerst
|
'' Reihenfolge ab 2.3 geändert. Neuste Version immer zuerst bzw. oben
|
||||||
If _Options.AllowZugferd_2_3_x_Schema Then
|
If _Options.AllowZugferd_2_3_x_Schema Then
|
||||||
oAllowedTypes.AddRange(New List(Of AllowedType) From {
|
oAllowedTypes.AddRange(New List(Of AllowedType) From {
|
||||||
|
New AllowedType With {
|
||||||
|
.SchemaType = GetType(Version2_4_FacturX.CrossIndustryInvoiceType),
|
||||||
|
.Specification = ZUGFERD_SPEC_2_3x,
|
||||||
|
.XMLSchema = XMLSCHEMA_ZUGFERD_24
|
||||||
|
},
|
||||||
New AllowedType With {
|
New AllowedType With {
|
||||||
.SchemaType = GetType(Version2_3_3_FacturX.CrossIndustryInvoiceType),
|
.SchemaType = GetType(Version2_3_3_FacturX.CrossIndustryInvoiceType),
|
||||||
.Specification = ZUGFERD_SPEC_2_3x,
|
.Specification = ZUGFERD_SPEC_2_3x,
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ Public Class PropertyValues
|
|||||||
_logger.Warn("Specification [{0}] is empty, but marked as required! Skipping.", oTableColumn)
|
_logger.Warn("Specification [{0}] is empty, but marked as required! Skipping.", oTableColumn)
|
||||||
Dim oMissingProperty = New MissingProperty With
|
Dim oMissingProperty = New MissingProperty With
|
||||||
{
|
{
|
||||||
|
.EN16931_ID = oEN16931_ID,
|
||||||
.Description = oPropertyDescription,
|
.Description = oPropertyDescription,
|
||||||
.XMLPath = oPropertyPath
|
.XMLPath = oPropertyPath
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ Public Class Validator
|
|||||||
.ElementName = oNode.Name.LocalName,
|
.ElementName = oNode.Name.LocalName,
|
||||||
.ElementValue = oNode.Value,
|
.ElementValue = oNode.Value,
|
||||||
.ErrorMessage = "Value could not be parsed as Decimal.",
|
.ErrorMessage = "Value could not be parsed as Decimal.",
|
||||||
.ErrorMessageDE = "Der Wert ist keine Dezimalzahl."
|
.ErrorMessageDE = "Der Wert ist keine Dezimalzahl.",
|
||||||
|
.ErrorMessageToken = "NoDecimalText"
|
||||||
})
|
})
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -53,7 +54,8 @@ Public Class Validator
|
|||||||
.ElementName = oNode.Name.LocalName,
|
.ElementName = oNode.Name.LocalName,
|
||||||
.ElementValue = oNode.Value,
|
.ElementValue = oNode.Value,
|
||||||
.ErrorMessage = "Invalid CurrencyCode. Only 3-Character codes are allowed.",
|
.ErrorMessage = "Invalid CurrencyCode. Only 3-Character codes are allowed.",
|
||||||
.ErrorMessageDE = "Ungültiger Währungscode. Es sind nur 3-stellige Codes erlaubt."
|
.ErrorMessageDE = "Ungültiger Währungscode. Es sind nur 3-stellige Codes erlaubt.",
|
||||||
|
.ErrorMessageToken = "WrongCurrencyCodeText"
|
||||||
})
|
})
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -80,7 +82,8 @@ Public Class Validator
|
|||||||
.ElementName = oNode.Name.LocalName,
|
.ElementName = oNode.Name.LocalName,
|
||||||
.ElementValue = oCurrencyID,
|
.ElementValue = oCurrencyID,
|
||||||
.ErrorMessage = "Invalid currencyID. Only 3-Character codes or empty values are allowed.",
|
.ErrorMessage = "Invalid currencyID. Only 3-Character codes or empty values are allowed.",
|
||||||
.ErrorMessageDE = "Ungültige WährungsID. Es sind nur 3-Zeichen lange Codes oder ein leerer Wert erlaubt."
|
.ErrorMessageDE = "Ungültige WährungsID. Es sind nur 3-Zeichen lange Codes oder ein leerer Wert erlaubt.",
|
||||||
|
.ErrorMessageToken = "WrongCurrencyIDText"
|
||||||
})
|
})
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,7 @@
|
|||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.5" newVersion="8.0.0.5" />
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.6" newVersion="8.0.0.6" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
|
||||||
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
|
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
|
||||||
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
|
||||||
<package id="System.Text.Json" version="8.0.5" targetFramework="net462" />
|
<package id="System.Text.Json" version="8.0.6" targetFramework="net462" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
||||||
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
</startup>
|
</startup>
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-14.3.9.0" newVersion="14.3.9.0" />
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-7.5.0.0" newVersion="7.5.0.0" />
|
||||||
@@ -43,7 +45,15 @@
|
|||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.5" newVersion="8.0.0.5" />
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.6" newVersion="8.0.0.6" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="GdPicture.NET.14.Common" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="GdPicture.NET.14" publicKeyToken="f52a2e60ad468dbb" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-14.3.3.0" newVersion="14.3.3.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
|
|||||||
@@ -66,28 +66,6 @@
|
|||||||
</None>
|
</None>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\Base\Base.vbproj">
|
|
||||||
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
|
||||||
<Name>Base</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Config\Config.vbproj">
|
|
||||||
<Project>{44982f9b-6116-44e2-85d0-f39650b1ef99}</Project>
|
|
||||||
<Name>Config</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Database\Database.vbproj">
|
|
||||||
<Project>{eaf0ea75-5fa7-485d-89c7-b2d843b03a96}</Project>
|
|
||||||
<Name>Database</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Interfaces\Interfaces.vbproj">
|
|
||||||
<Project>{ab6f09bf-e794-4f6a-94bb-c97c0ba84d64}</Project>
|
|
||||||
<Name>Interfaces</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Logging\Logging.vbproj">
|
|
||||||
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
|
||||||
<Name>Logging</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="ADSync\ADSyncArgs.vb" />
|
<Compile Include="ADSync\ADSyncArgs.vb" />
|
||||||
<Compile Include="ADSync\ADSyncJob.vb" />
|
<Compile Include="ADSync\ADSyncJob.vb" />
|
||||||
@@ -125,6 +103,21 @@
|
|||||||
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Base">
|
||||||
|
<HintPath>..\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Config">
|
||||||
|
<HintPath>..\Config\bin\Debug\DigitalData.Modules.Config.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Database">
|
||||||
|
<HintPath>..\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Interfaces">
|
||||||
|
<HintPath>..\Interfaces\bin\Debug\DigitalData.Modules.Interfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DigitalData.Modules.Logging">
|
||||||
|
<HintPath>..\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
|
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -264,8 +257,8 @@
|
|||||||
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Text.Json, Version=8.0.0.5, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Json, Version=8.0.0.6, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll</HintPath>
|
<HintPath>..\packages\System.Text.Json.8.0.6\lib\net462\System.Text.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyDescription("")>
|
<Assembly: AssemblyDescription("")>
|
||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Jobs")>
|
<Assembly: AssemblyProduct("Modules.Jobs")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2025")>
|
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
||||||
<Assembly: AssemblyTrademark("3.0.3.0")>
|
<Assembly: AssemblyTrademark("3.5.1.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -30,5 +30,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("3.1.0.0")>
|
<Assembly: AssemblyVersion("3.5.1.0")>
|
||||||
<Assembly: AssemblyFileVersion("3.1.0.0")>
|
<Assembly: AssemblyFileVersion("3.5.1.0")>
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ Imports GdPicture14
|
|||||||
Imports System.Drawing
|
Imports System.Drawing
|
||||||
Imports System.Linq
|
Imports System.Linq
|
||||||
Imports System.Text.RegularExpressions
|
Imports System.Text.RegularExpressions
|
||||||
|
'11.11.2025
|
||||||
|
|
||||||
Public Class XRechnungViewDocument
|
Public Class XRechnungViewDocument
|
||||||
Private ReadOnly _logger As Logger
|
Private ReadOnly _logger As Logger
|
||||||
Private ReadOnly _logConfig As LogConfig
|
Private ReadOnly _logConfig As LogConfig
|
||||||
@@ -17,8 +19,6 @@ Public Class XRechnungViewDocument
|
|||||||
Private fontResName As String
|
Private fontResName As String
|
||||||
Private fontResNameBold As String
|
Private fontResNameBold As String
|
||||||
Private fontResNameItalic As String
|
Private fontResNameItalic As String
|
||||||
Private MyGDPicturePDF As GdPicturePDF
|
|
||||||
|
|
||||||
Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer, GDPictureLicenseKey As String)
|
Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer, GDPictureLicenseKey As String)
|
||||||
_logConfig = LogConfig
|
_logConfig = LogConfig
|
||||||
_logger = LogConfig.GetLogger()
|
_logger = LogConfig.GetLogger()
|
||||||
@@ -31,6 +31,8 @@ Public Class XRechnungViewDocument
|
|||||||
_logger.Debug("Create_PDFfromXML() Start")
|
_logger.Debug("Create_PDFfromXML() Start")
|
||||||
|
|
||||||
Try
|
Try
|
||||||
|
Dim LicenseManager = New LicenseManager()
|
||||||
|
LicenseManager.RegisterKEY(_gdpictureLicenseKey)
|
||||||
Dim oXRechnungFile = pXmlFile.FullName
|
Dim oXRechnungFile = pXmlFile.FullName
|
||||||
Dim oNewFileinfo As FileInfo
|
Dim oNewFileinfo As FileInfo
|
||||||
Dim oXmlFilePath = pXmlFile.FullName
|
Dim oXmlFilePath = pXmlFile.FullName
|
||||||
@@ -45,13 +47,21 @@ Public Class XRechnungViewDocument
|
|||||||
File.Delete(oTempFilePath)
|
File.Delete(oTempFilePath)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
_logger.Debug("Vor MOVE... oxmlFilePath: [{0}] / oTempFilePath: [{1}]", oXmlFilePath, oTempFilePath)
|
|
||||||
|
|
||||||
File.Move(oXmlFilePath, oTempFilePath)
|
|
||||||
|
|
||||||
pXmlFile = New FileInfo(oTempFilePath)
|
pXmlFile = New FileInfo(oTempFilePath)
|
||||||
|
|
||||||
'oViewRecieptFilename = oViewRecieptFilename.Replace(".xml", ".pdf")
|
'oViewRecieptFilename = oViewRecieptFilename.Replace(".xml", ".pdf")
|
||||||
oViewRecieptFilename = Regex.Replace(oViewRecieptFilename, ".xml", ".pdf", RegexOptions.IgnoreCase)
|
oViewRecieptFilename = Regex.Replace(oViewRecieptFilename, ".xml", ".pdf", RegexOptions.IgnoreCase)
|
||||||
|
Dim MyGDPicturePDF = New GdPicturePDF
|
||||||
|
|
||||||
|
Dim oPDFStatus As GdPictureStatus = MyGDPicturePDF.NewPDF(PdfConformance.PDF_A_3a)
|
||||||
|
|
||||||
|
If oPDFStatus <> GdPictureStatus.OK Then
|
||||||
|
_logger.Warn($"Error initializing PDF: {oPDFStatus}")
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
Dim oOutputPath = Path.Combine(Path.GetDirectoryName(oXmlFilePath), oViewRecieptFilename)
|
Dim oOutputPath = Path.Combine(Path.GetDirectoryName(oXmlFilePath), oViewRecieptFilename)
|
||||||
_logger.Debug("Create_PDFfromXML() Resulting PDF Filepath: [{0}]", oOutputPath)
|
_logger.Debug("Create_PDFfromXML() Resulting PDF Filepath: [{0}]", oOutputPath)
|
||||||
@@ -59,13 +69,11 @@ Public Class XRechnungViewDocument
|
|||||||
File.Delete(oOutputPath)
|
File.Delete(oOutputPath)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
MyGDPicturePDF = New GdPicturePDF()
|
|
||||||
MyGDPicturePDF.NewPDF(PdfConformance.PDF_A_2a)
|
Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {Now.ToString}"
|
||||||
Dim oPDFStatus As GdPictureStatus = MyGDPicturePDF.NewPDF()
|
|
||||||
If oPDFStatus <> GdPictureStatus.OK Then
|
|
||||||
_logger.Warn($"Error initializing PDF: {oPDFStatus}")
|
|
||||||
Return Nothing
|
|
||||||
End If
|
|
||||||
MyGDPicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft)
|
MyGDPicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft)
|
||||||
MyGDPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter)
|
MyGDPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter)
|
||||||
MyGDPicturePDF.SetLineWidth(1)
|
MyGDPicturePDF.SetLineWidth(1)
|
||||||
@@ -77,9 +85,24 @@ Public Class XRechnungViewDocument
|
|||||||
'Create a New page
|
'Create a New page
|
||||||
MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
|
MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
|
||||||
' Dim oCurrent As Integer = MyGDPicturePDF.GetCurrentPage()
|
' Dim oCurrent As Integer = MyGDPicturePDF.GetCurrentPage()
|
||||||
|
'Den HEader erzeugen
|
||||||
|
Dim yPosition As Integer = 15
|
||||||
|
MyGDPicturePDF.SetTextSize(18)
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
|
||||||
|
yPosition += 10
|
||||||
|
MyGDPicturePDF.SetTextSize(10)
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2)
|
||||||
|
'Den Footer erzeugen
|
||||||
|
MyGDPicturePDF.DrawLine(10, 280, 200, 280)
|
||||||
|
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
|
||||||
|
|
||||||
Dim yPosition As Single = Create_PageHeader(False)
|
|
||||||
Create_PageFooter()
|
|
||||||
|
|
||||||
Dim oArea As String = ""
|
Dim oArea As String = ""
|
||||||
Dim oIsPosition As Boolean = False
|
Dim oIsPosition As Boolean = False
|
||||||
@@ -95,6 +118,9 @@ Public Class XRechnungViewDocument
|
|||||||
Dim oIndex As Integer = 0
|
Dim oIndex As Integer = 0
|
||||||
Dim oYPlus As Integer = 0
|
Dim oYPlus As Integer = 0
|
||||||
Dim oCreateTextBox As Boolean = False
|
Dim oCreateTextBox As Boolean = False
|
||||||
|
Dim oInvHasDiscount As Boolean = False
|
||||||
|
Dim oYDyn As Integer = 0
|
||||||
|
Dim Former_oItemSPECNAME As String = ""
|
||||||
For Each oRow As DataRow In pDTItemValues.Rows
|
For Each oRow As DataRow In pDTItemValues.Rows
|
||||||
Dim Y_eq_lastrow As Boolean = CBool(oRow.Item("Y_eq_lastrow"))
|
Dim Y_eq_lastrow As Boolean = CBool(oRow.Item("Y_eq_lastrow"))
|
||||||
Dim oRowCaption As String = oRow.Item("Row_Caption")
|
Dim oRowCaption As String = oRow.Item("Row_Caption")
|
||||||
@@ -102,7 +128,10 @@ Public Class XRechnungViewDocument
|
|||||||
Dim oItemValue As String = oRow.Item("ITEM_VALUE")
|
Dim oItemValue As String = oRow.Item("ITEM_VALUE")
|
||||||
Dim oDisplay As Boolean = oRow.Item("Display")
|
Dim oDisplay As Boolean = oRow.Item("Display")
|
||||||
Dim oAreaSwitch As Boolean = False
|
Dim oAreaSwitch As Boolean = False
|
||||||
|
Dim oDescriptionFollowup As Boolean = False
|
||||||
|
If oItemSPECNAME = "RECEIPT_ALLOWANCE_REASON" Then
|
||||||
|
Console.WriteLine("Uiuiu")
|
||||||
|
End If
|
||||||
If oRow.Item("Area") = "INTERNAL" Then
|
If oRow.Item("Area") = "INTERNAL" Then
|
||||||
If oItemSPECNAME = "STATIC_Y_SWITCH" Then
|
If oItemSPECNAME = "STATIC_Y_SWITCH" Then
|
||||||
yPosition = oItemValue
|
yPosition = oItemValue
|
||||||
@@ -114,8 +143,23 @@ Public Class XRechnungViewDocument
|
|||||||
_logger.Warn($"Could not create a second page. The error was: {oPDFStatus}")
|
_logger.Warn($"Could not create a second page. The error was: {oPDFStatus}")
|
||||||
Exit For
|
Exit For
|
||||||
Else
|
Else
|
||||||
yPosition = Create_PageHeader(True)
|
'Wieder einen Header und Footer erzeugen
|
||||||
Create_PageFooter()
|
yPosition = 15
|
||||||
|
MyGDPicturePDF.SetTextSize(18)
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
|
||||||
|
yPosition += 10
|
||||||
|
MyGDPicturePDF.SetTextSize(10)
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1)
|
||||||
|
yPosition += 5
|
||||||
|
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2)
|
||||||
|
|
||||||
|
MyGDPicturePDF.DrawLine(10, 280, 200, 280)
|
||||||
|
'Footer erzeugen
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
|
||||||
End If
|
End If
|
||||||
'oCurrent = MyGDPicturePDF.GetCurrentPage()
|
'oCurrent = MyGDPicturePDF.GetCurrentPage()
|
||||||
End If
|
End If
|
||||||
@@ -144,7 +188,17 @@ Public Class XRechnungViewDocument
|
|||||||
oAREACaption = "Positionen / Positions:"
|
oAREACaption = "Positionen / Positions:"
|
||||||
oIsPosition = True
|
oIsPosition = True
|
||||||
ElseIf oArea = "ALLOWANCE" Then
|
ElseIf oArea = "ALLOWANCE" Then
|
||||||
oAREACaption = "Zu- oder Abschlag/Surcharge or Discount:"
|
If oItemSPECNAME = "RECEIPT_ALLOWANCE_CHARGE_INDICATOR" Then
|
||||||
|
If oItemValue = "False" Then
|
||||||
|
oAREACaption = "Rabatt/Discount:"
|
||||||
|
oInvHasDiscount = True
|
||||||
|
Else
|
||||||
|
oAREACaption = "Zuschlag/Surcharge:"
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
oAREACaption = "Zu- oder Abschlag/Surcharge or Discount:"
|
||||||
|
End If
|
||||||
|
oIsPosition = True
|
||||||
ElseIf oArea = "AMOUNT" Then
|
ElseIf oArea = "AMOUNT" Then
|
||||||
oAREACaption = "Beträge / Amounts:"
|
oAREACaption = "Beträge / Amounts:"
|
||||||
oCreateTextBox = True
|
oCreateTextBox = True
|
||||||
@@ -173,15 +227,21 @@ Public Class XRechnungViewDocument
|
|||||||
' gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line)
|
' gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line)
|
||||||
yPosition += 5
|
yPosition += 5
|
||||||
ElseIf oArea = "POSITION" Then
|
ElseIf oArea = "POSITION" Then
|
||||||
'Tabellendarstellung
|
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Pos#")
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Pos#")
|
||||||
MyGDPicturePDF.DrawText(fontResName, 19, yPosition, "Anz./am.")
|
MyGDPicturePDF.DrawText(fontResName, 19, yPosition, "Anz./am.")
|
||||||
MyGDPicturePDF.DrawText(fontResName, 35, yPosition, "Einh/unt")
|
MyGDPicturePDF.DrawText(fontResName, 35, yPosition, "Einh/Unit")
|
||||||
MyGDPicturePDF.DrawText(fontResName, 50, yPosition, "Pos.Text")
|
MyGDPicturePDF.DrawText(fontResName, 50, yPosition, "Pos.Text")
|
||||||
MyGDPicturePDF.DrawText(fontResName, 164, yPosition, "Steuer/tax")
|
MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax")
|
||||||
MyGDPicturePDF.DrawText(fontResName, 181, yPosition, "Betrag/sum")
|
MyGDPicturePDF.DrawText(fontResName, 181, yPosition, "Betrag/Sum")
|
||||||
|
ElseIf oArea = "ALLOWANCE" Then
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Pos#")
|
||||||
|
' MyGDPicturePDF.DrawText(fontResName, 20, yPosition, "Betrag/Amount")
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 20, yPosition, "Grund/Reason")
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax")
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax")
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 181, yPosition, "Betrag/Sum")
|
||||||
yPosition += 5
|
yPosition += 5
|
||||||
'Tabellendarstellung Ende
|
oPosCount = 0
|
||||||
ElseIf oArea = "EXEMPTION" Then
|
ElseIf oArea = "EXEMPTION" Then
|
||||||
|
|
||||||
End If
|
End If
|
||||||
@@ -196,9 +256,8 @@ Public Class XRechnungViewDocument
|
|||||||
oIsPosition = True
|
oIsPosition = True
|
||||||
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
|
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
|
||||||
oPosCount += 1
|
oPosCount += 1
|
||||||
'oPosTerm = $"{oPosCount}. {oItemValue} * "
|
oYDyn = 0
|
||||||
'oItemValue = oPosTerm
|
yPosition += 5
|
||||||
'Tabellendarstellung
|
|
||||||
oPosTerm = ""
|
oPosTerm = ""
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount)
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount)
|
||||||
'
|
'
|
||||||
@@ -211,6 +270,18 @@ Public Class XRechnungViewDocument
|
|||||||
oDisplay = False
|
oDisplay = False
|
||||||
' yPosition -= 5
|
' yPosition -= 5
|
||||||
End If
|
End If
|
||||||
|
ElseIf oArea = "ALLOWANCE" Then
|
||||||
|
oIsPosition = True
|
||||||
|
Dim validNames As String() = {"POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_RECEIPT_ALLOWANCE_CHARGE_INDICATOR"}
|
||||||
|
If validNames.Contains(oItemSPECNAME) Then
|
||||||
|
oPosCount += 1
|
||||||
|
oPosTerm = ""
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount)
|
||||||
|
'
|
||||||
|
Dim oCurrTerm = FormatCurrency(oItemValue, oCurrencySymbol)
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 20, yPosition, oCurrTerm)
|
||||||
|
oDisplay = False
|
||||||
|
End If
|
||||||
ElseIf oArea = "TAXPOS" Then
|
ElseIf oArea = "TAXPOS" Then
|
||||||
oIsPosition = True
|
oIsPosition = True
|
||||||
If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
|
If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
|
||||||
@@ -226,103 +297,115 @@ Public Class XRechnungViewDocument
|
|||||||
'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS
|
'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS
|
||||||
_logger.Debug($"FollowItem - Area: [{oArea}] - ItemSpecname: [{oItemSPECNAME}] - ItemValue: [{oItemValue}]")
|
_logger.Debug($"FollowItem - Area: [{oArea}] - ItemSpecname: [{oItemSPECNAME}] - ItemValue: [{oItemValue}]")
|
||||||
'Dim otextBoxYPos As Integer
|
'Dim otextBoxYPos As Integer
|
||||||
If oArea = "POSITION" Then
|
If oArea = "POSITION" Or oArea = "ALLOWANCE" Then
|
||||||
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
|
If oItemSPECNAME <> Former_oItemSPECNAME And Former_oItemSPECNAME <> "" Then
|
||||||
|
If oItemSPECNAME = "INVOICE_POSITION_ARTICLE_DESCRIPTION" And Former_oItemSPECNAME = "INVOICE_POSITION_ARTICLE" Then
|
||||||
|
oDescriptionFollowup = True
|
||||||
|
Else
|
||||||
|
Former_oItemSPECNAME = oItemSPECNAME
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Former_oItemSPECNAME = oItemSPECNAME
|
||||||
|
End If
|
||||||
|
If {"INVOICE_POSITION_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(oItemSPECNAME) Then
|
||||||
oPosCount += 1
|
oPosCount += 1
|
||||||
oYPlus = 0
|
If Not oDescriptionFollowup Then
|
||||||
'Tabellendarstellung
|
oYPlus = 0
|
||||||
yPosition += 5
|
oYDyn = 0
|
||||||
|
End If
|
||||||
oPosTerm = ""
|
oPosTerm = ""
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount)
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount)
|
||||||
'otextBoxYPos = yPosition - 3.5
|
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
|
||||||
'MyGDPicturePDF.DrawTextBox(fontResName, 10, otextBoxYPos, 16, YCoo_TextBoxPlus5(otextBoxYPos),
|
MyGDPicturePDF.DrawText(fontResName, 19, yPosition, oItemValue)
|
||||||
' TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentNear,
|
ElseIf {"POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(oItemSPECNAME) Then
|
||||||
' oPosCount)
|
Dim oTerm = FormatCurrency(oItemValue, oCurrencySymbol)
|
||||||
MyGDPicturePDF.DrawText(fontResName, 19, yPosition, oItemValue)
|
If oInvHasDiscount And oItemSPECNAME = "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT" And Not oTerm.StartsWith("-") Then
|
||||||
'Tabellendarstellung Ende
|
oTerm = "-" + oTerm
|
||||||
|
End If
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 181, yPosition, oTerm)
|
||||||
|
Else
|
||||||
|
If oYDyn = 0 Then
|
||||||
|
oYDyn = yPosition
|
||||||
|
End If
|
||||||
|
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
||||||
|
For Each olinepart As String In oPartsNL
|
||||||
|
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(olinepart, 64)
|
||||||
|
' Durchlaufen der einzelnen Teile in einer Schleife
|
||||||
|
For Each part As String In oParts
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 19, oYDyn, part)
|
||||||
|
oYDyn += 5
|
||||||
|
oYPlus += 5
|
||||||
|
Next
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
oDisplay = False
|
oDisplay = False
|
||||||
ElseIf oItemSPECNAME = "INVOICE_POSITION_UNIT_TYPE" Then
|
ElseIf oItemSPECNAME = "INVOICE_POSITION_UNIT_TYPE" Then
|
||||||
oYPlus = 0
|
oYPlus = 0
|
||||||
Dim oUnit = Return_UnitType(oItemValue)
|
Dim oUnit = Return_UnitType(oItemValue)
|
||||||
MyGDPicturePDF.DrawText(fontResName, 35, yPosition, oUnit)
|
MyGDPicturePDF.DrawText(fontResName, 35, yPosition, oUnit)
|
||||||
oDisplay = False
|
oDisplay = False
|
||||||
ElseIf oItemSPECNAME = "INVOICE_POSITION_ARTICLE" Then
|
ElseIf {"POSITION_ALLOWANCE_REASON", "RECEIPT_ALLOWANCE_REASON", "INVOICE_POSITION_ARTICLE", "INVOICE_POSITION_ARTICLE_DESCRIPTION"}.Contains(oItemSPECNAME) Then
|
||||||
'Tabellendarstellung
|
'Tabellendarstellung
|
||||||
oYPlus = 0
|
If Not oDescriptionFollowup Then
|
||||||
|
oYPlus = 0
|
||||||
|
End If
|
||||||
|
If oYDyn = 0 Then
|
||||||
|
oYDyn = yPosition
|
||||||
|
End If
|
||||||
|
Dim oX = 50
|
||||||
|
If oItemSPECNAME.Contains("ALLOWANCE") Then
|
||||||
|
oX = 20
|
||||||
|
End If
|
||||||
oPosDesc = ""
|
oPosDesc = ""
|
||||||
oPosDesc = oItemValue
|
oPosDesc = oItemValue
|
||||||
Dim oYDyn As Integer = yPosition - 5
|
|
||||||
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
||||||
|
|
||||||
For Each olinepart As String In oPartsNL
|
For Each olinepart As String In oPartsNL
|
||||||
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(olinepart, 67)
|
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(olinepart, 64)
|
||||||
' Durchlaufen der einzelnen Teile in einer Schleife
|
' Durchlaufen der einzelnen Teile in einer Schleife
|
||||||
For Each part As String In oParts
|
For Each part As String In oParts
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, oX, oYDyn, part)
|
||||||
oYDyn += 5
|
oYDyn += 5
|
||||||
oYPlus += 5
|
oYPlus += 5
|
||||||
MyGDPicturePDF.DrawText(fontResName, 50, oYDyn, part)
|
|
||||||
Next
|
Next
|
||||||
Next
|
Next
|
||||||
'Tabellendarstellung Ende
|
|
||||||
' oPosTerm += $" {oItemValue}"
|
|
||||||
oDisplay = False
|
oDisplay = False
|
||||||
ElseIf oItemSPECNAME = "INVOICE_POSITION_NOTE" Then
|
ElseIf oItemSPECNAME = "INVOICE_POSITION_NOTE" Then
|
||||||
'Tabellendarstellung
|
'Tabellendarstellung
|
||||||
Dim cleanedText As String = RemoveNewlinesAndTabs(oItemValue)
|
Dim cleanedText As String = RemoveNewlinesAndTabs(oItemValue)
|
||||||
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(cleanedText, 70)
|
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(cleanedText, 70)
|
||||||
' Durchlaufen der einzelnen Teile in einer Schleife
|
' Durchlaufen der einzelnen Teile in einer Schleife
|
||||||
Dim oYDyn As Integer = yPosition
|
If oYDyn = 0 Then
|
||||||
|
oYDyn = yPosition
|
||||||
|
End If
|
||||||
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
||||||
For Each olinepart As String In oPartsNL
|
For Each olinepart As String In oPartsNL
|
||||||
Dim oPartsPN As List(Of String) = StringFunctions.SplitText_Length(olinepart, 70)
|
Dim oPartsPN As List(Of String) = StringFunctions.SplitText_Length(olinepart, 70)
|
||||||
' Durchlaufen der einzelnen Teile in einer Schleife
|
' Durchlaufen der einzelnen Teile in einer Schleife
|
||||||
For Each part As String In oPartsPN
|
For Each part As String In oPartsPN
|
||||||
|
MyGDPicturePDF.DrawText(fontResName, 50, oYDyn, part)
|
||||||
oYDyn += 5
|
oYDyn += 5
|
||||||
oYPlus += 5
|
oYPlus += 5
|
||||||
MyGDPicturePDF.DrawText(fontResName, 50, oYDyn, part)
|
|
||||||
Next
|
Next
|
||||||
Next
|
Next
|
||||||
|
|
||||||
'oPosTerm += $" {oItemValue}"
|
'oPosTerm += $" {oItemValue}"
|
||||||
oDisplay = False
|
oDisplay = False
|
||||||
ElseIf oItemSPECNAME = "INVOICE_POSITION_ARTICLE_DESCRIPTION" Then
|
ElseIf {"INVOICE_TAXPOS_TAX_RATE", "INVOICE_TAXPOS_RATE", "POSITION_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_VAT_RATE"}.Contains(oItemSPECNAME) Then
|
||||||
'Tabellendarstellung
|
MyGDPicturePDF.DrawText(fontResName, 163, yPosition, $"{oItemValue} %")
|
||||||
Dim cleanedText As String = RemoveNewlinesAndTabs(oItemValue)
|
oDisplay = False
|
||||||
Dim oParts As List(Of String) = StringFunctions.SplitText_Length(cleanedText, 70)
|
ElseIf {"INVOICE_POSITION_TAX_AMOUNT"}.Contains(oItemSPECNAME) Then
|
||||||
' Durchlaufen der einzelnen Teile in einer Schleife
|
|
||||||
Dim oYDyn As Integer = yPosition
|
|
||||||
Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue)
|
|
||||||
For Each olinepart As String In oPartsNL
|
|
||||||
Dim oPartsPN As List(Of String) = StringFunctions.SplitText_Length(olinepart, 70)
|
|
||||||
' Durchlaufen der einzelnen Teile in einer Schleife
|
|
||||||
For Each part As String In oPartsPN
|
|
||||||
oYDyn += 5
|
|
||||||
oYPlus += 5
|
|
||||||
MyGDPicturePDF.DrawText(fontResName, 50, oYDyn, part)
|
|
||||||
Next
|
|
||||||
Next
|
|
||||||
|
|
||||||
'oPosTerm += $" {oItemValue}"
|
|
||||||
oDisplay = False
|
|
||||||
ElseIf oItemSPECNAME = "INVOICE_TAXPOS_TAX_RATE" Or oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
|
|
||||||
'Tabellendarstellung
|
|
||||||
MyGDPicturePDF.DrawText(fontResName, 164, yPosition, $"{oItemValue} %")
|
|
||||||
'Tabellendarstellung ENDE
|
|
||||||
' oPosTerm += $" - {oItemValue} %"
|
|
||||||
oDisplay = False
|
|
||||||
ElseIf oItemSPECNAME = "INVOICE_POSITION_TAX_AMOUNT" Then
|
|
||||||
'Tabellendarstellung
|
|
||||||
Dim oYPos = yPosition - 3.5
|
Dim oYPos = yPosition - 3.5
|
||||||
Dim TAXTERM = FormatCurrency(oItemValue, oCurrencySymbol)
|
Dim TAXTERM = FormatCurrency(oItemValue, oCurrencySymbol)
|
||||||
MyGDPicturePDF.DrawTextBox(fontResName, 177, oYPos, 198, YCoo_TextBoxPlus5(oYPos),
|
MyGDPicturePDF.DrawTextBox(fontResName, 177, oYPos, 198, YCoo_TextBoxPlus5(oYPos),
|
||||||
TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentNear,
|
TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentNear,
|
||||||
TAXTERM)
|
TAXTERM)
|
||||||
' MyGDPicturePDF.DrawText(fontResName, 180, yPosition, $"{oItemValue} {oCurrencySymbol}")
|
|
||||||
|
|
||||||
'Tabellendarstellung Ende
|
|
||||||
End If
|
End If
|
||||||
oItemValue = oPosTerm
|
oItemValue = oPosTerm
|
||||||
ElseIf oArea = "HEAD" Then
|
ElseIf oArea = "HEAD" Then
|
||||||
If oItemSPECNAME = "INVOICE_DATE" Or oItemSPECNAME = "INVOICE_SERVICE_DATE" Then
|
If {"INVOICE_DATE", "INVOICE_SERVICE_DATE"}.Contains(oItemSPECNAME) Then
|
||||||
oItemValue = StringFunctions.DatetimeStringToGermanStringConverter(oItemValue, _logger)
|
oItemValue = StringFunctions.DatetimeStringToGermanStringConverter(oItemValue, _logger)
|
||||||
End If
|
End If
|
||||||
ElseIf oArea = "TAXPOS" Then
|
ElseIf oArea = "TAXPOS" Then
|
||||||
@@ -348,14 +431,12 @@ Public Class XRechnungViewDocument
|
|||||||
End If
|
End If
|
||||||
If oArea = "AMOUNT" Or oArea = "ALLOWANCE" Then
|
If oArea = "AMOUNT" Or oArea = "ALLOWANCE" Then
|
||||||
|
|
||||||
Dim oCURRENCYFORMAT = {"INVOICE_TOTAL_TAX", "INVOICE_TOTAL_NET", "INVOICE_TOTAL_GROSS", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT",
|
Dim oCURRENCYFORMAT = {"INVOICE_TOTAL_TAX", "INVOICE_TOTAL_NET", "INVOICE_TOTAL_GROSS", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT",
|
||||||
"RECEIPT_ALLOWANCE_CALCULATION_PERCENT"}
|
"POSITION_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_CALCULATION_PERCENT"}
|
||||||
If oCURRENCYFORMAT.Contains(oItemSPECNAME) Then
|
If oCURRENCYFORMAT.Contains(oItemSPECNAME) Then
|
||||||
oItemValue = FormatCurrency(oItemValue, oCurrencySymbol)
|
oItemValue = FormatCurrency(oItemValue, oCurrencySymbol)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
If oRowCaption <> String.Empty Then
|
If oRowCaption <> String.Empty Then
|
||||||
'Zuerst die RowCaption
|
'Zuerst die RowCaption
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption)
|
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption)
|
||||||
@@ -368,7 +449,6 @@ Public Class XRechnungViewDocument
|
|||||||
Else
|
Else
|
||||||
MyGDPicturePDF.DrawText(fontResName, 70, yPosition, oItemValue)
|
MyGDPicturePDF.DrawText(fontResName, 70, yPosition, oItemValue)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Else
|
Else
|
||||||
If Y_eq_lastrow = True Then
|
If Y_eq_lastrow = True Then
|
||||||
MyGDPicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue)
|
MyGDPicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue)
|
||||||
@@ -396,35 +476,44 @@ Public Class XRechnungViewDocument
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
'Tabellendarstellung
|
|
||||||
If oItemSPECNAME = "INVOICE_POSITION_TAX_AMOUNT" And oYPlus > 0 Then
|
If oItemSPECNAME = "INVOICE_POSITION_TAX_AMOUNT" And oYPlus > 0 Then
|
||||||
yPosition += oYPlus - 5
|
yPosition += oYPlus
|
||||||
|
Else
|
||||||
|
|
||||||
|
|
||||||
End If
|
End If
|
||||||
'Tabellendarstellung Ende
|
|
||||||
End If
|
End If
|
||||||
oIndex += 1
|
oIndex += 1
|
||||||
Next
|
Next
|
||||||
|
' Dim oeinv_Format As PdfInvoiceDataFormat = PdfInvoiceDataFormat.ZUGFeRD_2_0
|
||||||
|
Dim oAttString = "E-invoice XML attachment"
|
||||||
|
If File.Exists(oXmlFilePath) Then
|
||||||
|
MyGDPicturePDF.EmbedFile(oXmlFilePath, oAttString)
|
||||||
|
Else
|
||||||
|
_logger.Info("XML File is not existing and could not be embedded!")
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
|
MyGDPicturePDF.EnableCompression(True)
|
||||||
|
|
||||||
Dim oeinv_Format As PdfInvoiceDataFormat = PdfInvoiceDataFormat.ZUGFeRD_2_0
|
|
||||||
MyGDPicturePDF.EmbedFile(oTempFilePath, "Rechnungsdaten im ZUGFeRD-XML-Format")
|
|
||||||
'Finalize And save the PDF
|
'Finalize And save the PDF
|
||||||
oPDFStatus = MyGDPicturePDF.SaveToFile(oOutputPath)
|
oPDFStatus = MyGDPicturePDF.SaveToFile(oOutputPath)
|
||||||
If oPDFStatus = GdPictureStatus.OK Then
|
If oPDFStatus = GdPictureStatus.OK Then
|
||||||
_logger.Info("PDF VisualReceipt generated successfully!")
|
_logger.Info("PDF VisualReceipt generated successfully!")
|
||||||
|
_logger.Debug("Vor MOVE... oxmlFilePath: [{0}] / oTempFilePath: [{1}]", oXmlFilePath, oTempFilePath)
|
||||||
|
File.Move(oXmlFilePath, oTempFilePath)
|
||||||
Else
|
Else
|
||||||
_logger.Warn($"Error generating PDF VisualReceipt: {oPDFStatus}")
|
_logger.Warn($"Error generating PDF VisualReceipt: {oPDFStatus}")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'Release resources
|
'Release resources
|
||||||
MyGDPicturePDF.CloseDocument()
|
MyGDPicturePDF.CloseDocument()
|
||||||
If oPDFStatus = GdPictureStatus.OK Then
|
If oPDFStatus = GdPictureStatus.OK Then
|
||||||
File.Delete(oXRechnungFile)
|
' File.Delete(oXRechnungFile)
|
||||||
oNewFileinfo = New FileInfo(oOutputPath)
|
oNewFileinfo = New FileInfo(oOutputPath)
|
||||||
|
_logger.Info("Create_PDFfromXML() End successfully. File [{0}] written.", oNewFileinfo.FullName)
|
||||||
_logger.Debug("Create_PDFfromXML() End successfully. File [{0}] written.", oNewFileinfo.FullName)
|
|
||||||
Return oNewFileinfo
|
Return oNewFileinfo
|
||||||
Else
|
Else
|
||||||
_logger.Debug("Create_PDFfromXML() Ends with nothing")
|
_logger.Warn("Create_PDFfromXML() Ends with nothing")
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -433,13 +522,40 @@ Public Class XRechnungViewDocument
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
'Private Function FormatCurrency(ByVal pValue As String, pCurrencySymbol As String) As String
|
||||||
|
' pValue = pValue.Replace(".", ",")
|
||||||
|
' Dim oBetrag As Decimal = pValue
|
||||||
|
' Dim oFormatiert As String = oBetrag.ToString("N2", New Globalization.CultureInfo("de-DE"))
|
||||||
|
' oFormatiert = $"{oFormatiert} {pCurrencySymbol}"
|
||||||
|
' Return oFormatiert
|
||||||
|
'End Function
|
||||||
Private Function FormatCurrency(ByVal pValue As String, pCurrencySymbol As String) As String
|
Private Function FormatCurrency(ByVal pValue As String, pCurrencySymbol As String) As String
|
||||||
pValue = pValue.replace(".", ",")
|
pValue = pValue.Trim()
|
||||||
Dim oBetrag As Decimal = pValue
|
|
||||||
|
Dim oBetrag As Decimal
|
||||||
|
Dim culture As Globalization.CultureInfo
|
||||||
|
|
||||||
|
' Erkennung des Dezimaltrennzeichens
|
||||||
|
If pValue.Contains(",") AndAlso Not pValue.Contains(".") Then
|
||||||
|
culture = New Globalization.CultureInfo("de-DE") ' Komma → deutsches Format
|
||||||
|
ElseIf pValue.Contains(".") AndAlso Not pValue.Contains(",") Then
|
||||||
|
culture = New Globalization.CultureInfo("en-US") ' Punkt → englisches Format
|
||||||
|
Else
|
||||||
|
' Mischformat oder Tausendertrennzeichen → Fallback auf aktuelle Culture
|
||||||
|
culture = Globalization.CultureInfo.CurrentCulture
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Parsen mit gewählter Culture
|
||||||
|
If Not Decimal.TryParse(pValue, Globalization.NumberStyles.Any, culture, oBetrag) Then
|
||||||
|
Throw New FormatException($"Ungültiger Zahlenwert: {pValue}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Formatieren mit deutscher Culture
|
||||||
Dim oFormatiert As String = oBetrag.ToString("N2", New Globalization.CultureInfo("de-DE"))
|
Dim oFormatiert As String = oBetrag.ToString("N2", New Globalization.CultureInfo("de-DE"))
|
||||||
oFormatiert = $"{oFormatiert} {pCurrencySymbol}"
|
Return $"{oFormatiert} {pCurrencySymbol}"
|
||||||
Return oFormatiert
|
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
|
||||||
Private Function FormatStringT(ByVal text As String) As String
|
Private Function FormatStringT(ByVal text As String) As String
|
||||||
Return text.Replace(vbCr, " - ").Replace(vbLf, "").Replace(vbTab, " ")
|
Return text.Replace(vbCr, " - ").Replace(vbLf, "").Replace(vbTab, " ")
|
||||||
End Function
|
End Function
|
||||||
@@ -463,28 +579,28 @@ Public Class XRechnungViewDocument
|
|||||||
Dim lines As List(Of String) = text.Split({vbCrLf, vbLf, vbCr}, StringSplitOptions.None).ToList()
|
Dim lines As List(Of String) = text.Split({vbCrLf, vbLf, vbCr}, StringSplitOptions.None).ToList()
|
||||||
Return lines
|
Return lines
|
||||||
End Function
|
End Function
|
||||||
Public Function Create_PageHeader(pFollowPage As Boolean) As Integer
|
|
||||||
'Draw content on the PDF
|
|
||||||
Dim yPosition As Integer = 15
|
|
||||||
MyGDPicturePDF.SetTextSize(18)
|
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
|
|
||||||
yPosition += 10
|
|
||||||
MyGDPicturePDF.SetTextSize(10)
|
|
||||||
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1)
|
|
||||||
yPosition += 5
|
|
||||||
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2)
|
|
||||||
yPosition += 5
|
|
||||||
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1)
|
|
||||||
yPosition += 5
|
|
||||||
MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2)
|
|
||||||
Return yPosition
|
|
||||||
End Function
|
|
||||||
|
|
||||||
Public Sub Create_PageFooter()
|
|
||||||
MyGDPicturePDF.DrawLine(10, 280, 200, 280)
|
|
||||||
Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {Now.ToString}"
|
|
||||||
MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Private Function Return_InvType(pType As String) As String
|
Private Function Return_InvType(pType As String) As String
|
||||||
Dim oReturn As String = "Rechnung/invoice"
|
Dim oReturn As String = "Rechnung/invoice"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.0" targetFramework="net462" />
|
||||||
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
|
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net462" />
|
||||||
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net462" />
|
||||||
<package id="System.Text.Json" version="8.0.5" targetFramework="net462" />
|
<package id="System.Text.Json" version="8.0.6" targetFramework="net462" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
||||||
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
||||||
134
License/Licensebackup.vbproj
Normal file
134
License/Licensebackup.vbproj
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{5EBACBFA-F11A-4BBF-8D02-91461F2293ED}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>DigitalData.Modules.License</RootNamespace>
|
||||||
|
<AssemblyName>DigitalData.Modules.License</AssemblyName>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<MyType>Windows</MyType>
|
||||||
|
<TargetFrameworkVersion>net462</TargetFrameworkVersion>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DocumentationFile>DigitalData.Modules.License.xml</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<DefineDebug>false</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DocumentationFile>DigitalData.Modules.License.xml</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionExplicit>On</OptionExplicit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionCompare>Binary</OptionCompare>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionStrict>Off</OptionStrict>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionInfer>On</OptionInfer>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.IO.Compression" />
|
||||||
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
|
<Reference Include="System.ServiceModel" />
|
||||||
|
<Reference Include="System.Transactions" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Import Include="Microsoft.VisualBasic" />
|
||||||
|
<Import Include="System" />
|
||||||
|
<Import Include="System.Collections" />
|
||||||
|
<Import Include="System.Collections.Generic" />
|
||||||
|
<Import Include="System.Data" />
|
||||||
|
<Import Include="System.Diagnostics" />
|
||||||
|
<Import Include="System.Linq" />
|
||||||
|
<Import Include="System.Xml.Linq" />
|
||||||
|
<Import Include="System.Threading.Tasks" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="LicenseCreator.vb" />
|
||||||
|
<Compile Include="LicenseFile.vb" />
|
||||||
|
<Compile Include="LicenseLegacy.vb" />
|
||||||
|
<Compile Include="LicenseManagerLegacy.vb" />
|
||||||
|
<Compile Include="LicenseSchema.vb">
|
||||||
|
<DependentUpon>LicenseSchema.xsd</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LicensesLegacy.vb" />
|
||||||
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
|
<Compile Include="My Project\Application.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Application.myapp</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Resources.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Settings.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="My Project\Resources.resx">
|
||||||
|
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="LicenseSchema.xsd">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
|
<None Include="My Project\Application.myapp">
|
||||||
|
<Generator>MyApplicationCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="My Project\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
2
Logging/My Project/Settings.Designer.vb
generated
2
Logging/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
Imports System.Net.Security
|
Imports System.IdentityModel.Tokens
|
||||||
|
Imports System.Net.Security
|
||||||
Imports DigitalData.Modules.Base
|
Imports DigitalData.Modules.Base
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports Limilabs.Client
|
Imports Limilabs.Client
|
||||||
@@ -11,7 +12,6 @@ Namespace Mail
|
|||||||
Inherits BaseClass
|
Inherits BaseClass
|
||||||
|
|
||||||
Public ReadOnly Client As ClientBase
|
Public ReadOnly Client As ClientBase
|
||||||
Public ReadOnly OAuth2 As OAuth2
|
|
||||||
|
|
||||||
Public Const AUTH_SSL = "SSL"
|
Public Const AUTH_SSL = "SSL"
|
||||||
Public Const AUTH_STARTTLS = "STARTTLS"
|
Public Const AUTH_STARTTLS = "STARTTLS"
|
||||||
@@ -19,9 +19,7 @@ Namespace Mail
|
|||||||
Public Const AUTH_NONE = "NONE"
|
Public Const AUTH_NONE = "NONE"
|
||||||
Public Const AUTH_OAUTH2 = "OAUTH2"
|
Public Const AUTH_OAUTH2 = "OAUTH2"
|
||||||
|
|
||||||
Private Const SMTP_IGNORED_ERRORS As SslPolicyErrors =
|
Private Const SMTP_IGNORED_ERRORS As SslPolicyErrors = SslPolicyErrors.RemoteCertificateChainErrors Or SslPolicyErrors.RemoteCertificateNameMismatch
|
||||||
SslPolicyErrors.RemoteCertificateChainErrors Or ' self-signed
|
|
||||||
SslPolicyErrors.RemoteCertificateNameMismatch ' name mismatch
|
|
||||||
|
|
||||||
Private _Session As SessionInfo
|
Private _Session As SessionInfo
|
||||||
|
|
||||||
@@ -56,7 +54,7 @@ Namespace Mail
|
|||||||
Public Property EnableTls1_1 As Boolean = False
|
Public Property EnableTls1_1 As Boolean = False
|
||||||
Public Property EnableTls1_2 As Boolean = False
|
Public Property EnableTls1_2 As Boolean = False
|
||||||
|
|
||||||
' Not available in .NET 4.6.2
|
' Not available in .NET4.6.2
|
||||||
'Public Property EnableTls1_3 As Boolean = False
|
'Public Property EnableTls1_3 As Boolean = False
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
@@ -71,12 +69,12 @@ Namespace Mail
|
|||||||
''' <returns></returns>
|
''' <returns></returns>
|
||||||
Public Function ConnectToServerWithBasicAuth(pServer As String, pPort As Integer, pUser As String, pPassword As String, pAuthType As String, pOptions As MailSessionOptions) As SessionInfo
|
Public Function ConnectToServerWithBasicAuth(pServer As String, pPort As Integer, pUser As String, pPassword As String, pAuthType As String, pOptions As MailSessionOptions) As SessionInfo
|
||||||
Dim oSession = New SessionInfo With {
|
Dim oSession = New SessionInfo With {
|
||||||
.Server = pServer,
|
.Server = pServer,
|
||||||
.Port = pPort,
|
.Port = pPort,
|
||||||
.User = pUser,
|
.User = pUser,
|
||||||
.Password = pPassword,
|
.Password = pPassword,
|
||||||
.AuthType = pAuthType
|
.AuthType = pAuthType
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Debug("Connecting to Server..")
|
Logger.Debug("Connecting to Server..")
|
||||||
Logger.Debug("Server: [{0}]", oSession.Server)
|
Logger.Debug("Server: [{0}]", oSession.Server)
|
||||||
@@ -92,17 +90,23 @@ Namespace Mail
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function ConnectToServerWithO365OAuth(pUser As String, pClientId As String, pTenantId As String, pClientSecret As String, pOptions As MailSessionOptions) As SessionInfo
|
Public Function ConnectToServerWithO365OAuth(pUser As String, pClientId As String, pTenantId As String, pClientSecret As String, pOptions As MailSessionOptions) As SessionInfo
|
||||||
|
' Choose server/port based on the client type
|
||||||
|
Dim server As String = If(TypeOf Client Is Smtp, "smtp.office365.com", OAuth2.O365_SERVER)
|
||||||
|
Dim port As Integer = If(TypeOf Client Is Imap, 993, If(TypeOf Client Is Smtp, 587, 993))
|
||||||
|
|
||||||
Dim oSession = New SessionInfo With {
|
Dim oSession = New SessionInfo With {
|
||||||
.Server = OAuth2.O365_SERVER,
|
.Server = server,
|
||||||
.ClientId = pClientId,
|
.Port = port,
|
||||||
.ClientSecret = pClientSecret,
|
.ClientId = pClientId,
|
||||||
.TenantId = pTenantId,
|
.ClientSecret = pClientSecret,
|
||||||
.User = pUser,
|
.TenantId = pTenantId,
|
||||||
.AuthType = AUTH_OAUTH2
|
.User = pUser,
|
||||||
}
|
.AuthType = AUTH_OAUTH2
|
||||||
|
}
|
||||||
|
|
||||||
Logger.Debug("Connecting to Server..")
|
Logger.Debug("Connecting to Server..")
|
||||||
Logger.Debug("Server: [{0}]", oSession.Server)
|
Logger.Debug("Server: [{0}]", oSession.Server)
|
||||||
|
Logger.Debug("Port: [{0}]", oSession.Port)
|
||||||
Logger.Debug("User: [{0}]", oSession.User)
|
Logger.Debug("User: [{0}]", oSession.User)
|
||||||
Logger.Debug("ClientId: [{0}]", oSession.ClientId)
|
Logger.Debug("ClientId: [{0}]", oSession.ClientId)
|
||||||
Logger.Debug("TenantId: [{0}]", oSession.TenantId)
|
Logger.Debug("TenantId: [{0}]", oSession.TenantId)
|
||||||
@@ -120,61 +124,52 @@ Namespace Mail
|
|||||||
|
|
||||||
If pOptions.EnableDefault Then
|
If pOptions.EnableDefault Then
|
||||||
Logger.Debug("Enabling Default TLS Version")
|
Logger.Debug("Enabling Default TLS Version")
|
||||||
Client.SSLConfiguration.EnabledSslProtocols = Security.Authentication.SslProtocols.Default
|
Client.SSLConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Default
|
||||||
Else
|
Else
|
||||||
Logger.Debug("Disabling Default TLS Version")
|
Logger.Debug("Disabling Default TLS Version")
|
||||||
Client.SSLConfiguration.EnabledSslProtocols = Security.Authentication.SslProtocols.None
|
Client.SSLConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.None
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' Set TLS Version manually if requested
|
' Set TLS Version manually if requested
|
||||||
If pOptions.EnableTls1_1 Then
|
If pOptions.EnableTls1_1 Then
|
||||||
Logger.Debug("Enabling TLS Version 1.1")
|
Logger.Debug("Enabling TLS Version1.1")
|
||||||
Client.SSLConfiguration.EnabledSslProtocols = Client.SSLConfiguration.EnabledSslProtocols Or Security.Authentication.SslProtocols.Tls11
|
Client.SSLConfiguration.EnabledSslProtocols = Client.SSLConfiguration.EnabledSslProtocols Or System.Security.Authentication.SslProtocols.Tls11
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If pOptions.EnableTls1_2 Then
|
If pOptions.EnableTls1_2 Then
|
||||||
Logger.Debug("Enabling TLS Version 1.2")
|
Logger.Debug("Enabling TLS Version1.2")
|
||||||
Client.SSLConfiguration.EnabledSslProtocols = Client.SSLConfiguration.EnabledSslProtocols Or Security.Authentication.SslProtocols.Tls12
|
Client.SSLConfiguration.EnabledSslProtocols = Client.SSLConfiguration.EnabledSslProtocols Or System.Security.Authentication.SslProtocols.Tls12
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' This is not available in .NET 4.6.2, only in .NET 4.7/4.8
|
|
||||||
'If pOptions.EnableTls1_3 Then
|
|
||||||
' Logger.Debug("Enabling TLS Version 1.3")
|
|
||||||
' oSession.SSLConfiguration.EnabledSslProtocols = oSession.SSLConfiguration.EnabledSslProtocols Or Security.Authentication.SslProtocols.Tls13
|
|
||||||
'End If
|
|
||||||
|
|
||||||
Logger.Debug("Enabled Encryption Protocols: [{0}]", Client.SSLConfiguration.EnabledSslProtocols)
|
Logger.Debug("Enabled Encryption Protocols: [{0}]", Client.SSLConfiguration.EnabledSslProtocols)
|
||||||
|
|
||||||
If pSession.AuthType = AUTH_OAUTH2 Then
|
If pSession.AuthType = AUTH_OAUTH2 Then
|
||||||
Try
|
Try
|
||||||
If TypeOf Client Is Imap Then
|
If TypeOf Client Is Imap Then
|
||||||
Dim oClient As Imap = Client
|
Dim oClient As Imap = DirectCast(Client, Imap)
|
||||||
|
Logger.Debug("Connecting with [OAuth2/IMAP/ConnectSSL] on [{0}/{1}]", pSession.Server, If(pSession.Port > 0, pSession.Port, 993))
|
||||||
|
oClient.ConnectSSL(pSession.Server) ', If(pSession.Port > 0, pSession.Port, 993)
|
||||||
|
|
||||||
Logger.Debug("Connecting with [OAuth2/ConnectSSL] on [{0}]", pSession.Server)
|
ElseIf TypeOf Client Is Smtp Then
|
||||||
oClient.ConnectSSL(pSession.Server)
|
Dim s As Smtp = DirectCast(Client, Smtp)
|
||||||
Else
|
Logger.Debug("Connecting with [OAuth2/SMTP/STARTTLS] on [{0}/{1}]", pSession.Server, If(pSession.Port > 0, pSession.Port, 587))
|
||||||
Throw New ApplicationException("Only OAuth2 for IMAP is not yet supported!")
|
s.Connect(pSession.Server, If(pSession.Port > 0, pSession.Port, 587))
|
||||||
|
s.StartTLS()
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Warn("Unexpected Error in ConnectToServer with Auth type OAuth2!")
|
Logger.Warn("Unexpected Error in ConnectToServer with Auth type OAuth2!")
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
|
|
||||||
Session.Error = ex
|
pSession.Error = ex
|
||||||
Return Session
|
Return pSession
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
ElseIf pSession.AuthType = AUTH_SSL Then
|
ElseIf pSession.AuthType = AUTH_SSL Then
|
||||||
Try
|
Try
|
||||||
' Port 465 ist der SMTP-SSL-Port, wird bei der WISAG verwendet, aber veraltet
|
' SSL: always connect with SSL immediately
|
||||||
' Port 993 ist der IMAP-SSL-Port, zum Abholen der Mails
|
Logger.Debug("Connecting with [SSL/ConnectSSL] on [{0}/{1}]", pSession.Server, pSession.Port)
|
||||||
If pSession.Port = 465 Or pSession.Port = 993 Then
|
Client.ConnectSSL(pSession.Server, pSession.Port)
|
||||||
Logger.Debug("Connecting with [SSL/ConnectSSL] on [{0}/{1}]", pSession.Server, pSession.Port)
|
|
||||||
Client.ConnectSSL(pSession.Server, pSession.Port)
|
|
||||||
Else
|
|
||||||
Logger.Debug("Connecting with [SSL/Connect] on [{0}/{1}]", pSession.Server, pSession.Port)
|
|
||||||
Client.Connect(pSession.Server, pSession.Port)
|
|
||||||
End If
|
|
||||||
Logger.Debug("Connection (AUTH_SSL) Successful!")
|
Logger.Debug("Connection (AUTH_SSL) Successful!")
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
@@ -182,21 +177,32 @@ Namespace Mail
|
|||||||
Logger.Warn($"Error-message: {ex.Message}")
|
Logger.Warn($"Error-message: {ex.Message}")
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
|
|
||||||
Session.Error = ex
|
pSession.Error = ex
|
||||||
Return Session
|
Return pSession
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
ElseIf Session.AuthType = AUTH_SSLTLS Or Session.AuthType = AUTH_STARTTLS Then
|
ElseIf pSession.AuthType = AUTH_SSLTLS Then
|
||||||
|
|
||||||
Try
|
Try
|
||||||
If pSession.Port = 993 Then
|
' SSL/TLS: same as SSL, explicit branch for clarity
|
||||||
Logger.Debug("Connecting with [STARTTLS/ConnectSSL] on [{0}/{1}]", pSession.Server, pSession.Port)
|
Logger.Debug("Connecting with [SSL/TLS/ConnectSSL] on [{0}/{1}]", pSession.Server, pSession.Port)
|
||||||
Client.ConnectSSL(pSession.Server, pSession.Port)
|
Client.ConnectSSL(pSession.Server, pSession.Port)
|
||||||
Else
|
Logger.Debug("Connection (AUTH_SSLTLS) Successful!")
|
||||||
Logger.Debug("Connecting with [STARTTLS/Connect] on [{0}/{1}]", pSession.Server, pSession.Port)
|
|
||||||
Client.Connect(pSession.Server, pSession.Port)
|
Catch ex As Exception
|
||||||
End If
|
Logger.Warn("Unexpected Error in ConnectToServer with Auth type SSL/TLS!")
|
||||||
Logger.Debug("Connection (AUTH_SSLTLS or AUTH_STARTTLS) Successful!")
|
Logger.Error(ex)
|
||||||
|
|
||||||
|
pSession.Error = ex
|
||||||
|
Return pSession
|
||||||
|
End Try
|
||||||
|
|
||||||
|
ElseIf pSession.AuthType = AUTH_STARTTLS Then
|
||||||
|
|
||||||
|
Try
|
||||||
|
' STARTTLS: connect plain and then upgrade
|
||||||
|
Logger.Debug("Connecting with [STARTTLS/Connect] on [{0}/{1}]", pSession.Server, pSession.Port)
|
||||||
|
Client.Connect(pSession.Server, pSession.Port)
|
||||||
|
|
||||||
Dim oSupportsSTARTTLS As Boolean = SupportsSTARTTLS(Client)
|
Dim oSupportsSTARTTLS As Boolean = SupportsSTARTTLS(Client)
|
||||||
Logger.Debug("Server supports STARTTLS: [{0}]", oSupportsSTARTTLS)
|
Logger.Debug("Server supports STARTTLS: [{0}]", oSupportsSTARTTLS)
|
||||||
@@ -205,8 +211,7 @@ Namespace Mail
|
|||||||
DoSTARTTLS(Client)
|
DoSTARTTLS(Client)
|
||||||
Logger.Debug("STARTTLS Successful!")
|
Logger.Debug("STARTTLS Successful!")
|
||||||
Else
|
Else
|
||||||
Logger.Debug("Server does not support STARTTLS. Enabling TLS1.2 instead.")
|
Throw New ApplicationException("Server does not support STARTTLS on this endpoint.")
|
||||||
Client.SSLConfiguration.EnabledSslProtocols = Security.Authentication.SslProtocols.Tls12
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
@@ -219,11 +224,11 @@ Namespace Mail
|
|||||||
|
|
||||||
Else
|
Else
|
||||||
Try
|
Try
|
||||||
Logger.Debug("Auth type [{0}]. Using PLAINTEXT connection.", Session.AuthType)
|
Logger.Debug("Auth type [{0}]. Using PLAINTEXT connection.", pSession.AuthType)
|
||||||
Client.Connect(pSession.Server, pSession.Port, useSSL:=False)
|
Client.Connect(pSession.Server, pSession.Port, useSSL:=False)
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Warn("Unexpected Error in ConnectToServer with Auth type [{0}]!", Session.AuthType)
|
Logger.Warn("Unexpected Error in ConnectToServer with Auth type [{0}]!", pSession.AuthType)
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
|
|
||||||
pSession.Error = ex
|
pSession.Error = ex
|
||||||
@@ -237,8 +242,7 @@ Namespace Mail
|
|||||||
Logger.Info("Logging in with user [{0}] and Auth Type [{1}]", pSession.User, pSession.AuthType)
|
Logger.Info("Logging in with user [{0}] and Auth Type [{1}]", pSession.User, pSession.AuthType)
|
||||||
|
|
||||||
If pSession.AuthType = AUTH_OAUTH2 Then
|
If pSession.AuthType = AUTH_OAUTH2 Then
|
||||||
' SessionInfo.Password will be the access token that was obtained
|
' Use OAuth2 token
|
||||||
' in the OAuth2 flow before
|
|
||||||
DoUseBestLogin_OAuth2(Client, pSession)
|
DoUseBestLogin_OAuth2(Client, pSession)
|
||||||
Else
|
Else
|
||||||
DoUseBestLogin_BasicAuth(Client, pSession.User, pSession.Password)
|
DoUseBestLogin_BasicAuth(Client, pSession.User, pSession.Password)
|
||||||
@@ -293,7 +297,7 @@ Namespace Mail
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function SupportsSTARTTLS(pClient As ClientBase)
|
Private Function SupportsSTARTTLS(pClient As ClientBase) As Boolean
|
||||||
If TypeOf pClient Is Smtp Then
|
If TypeOf pClient Is Smtp Then
|
||||||
Return DirectCast(pClient, Smtp).SupportedExtensions.Contains(SmtpExtension.StartTLS)
|
Return DirectCast(pClient, Smtp).SupportedExtensions.Contains(SmtpExtension.StartTLS)
|
||||||
ElseIf TypeOf pClient Is Imap Then
|
ElseIf TypeOf pClient Is Imap Then
|
||||||
@@ -329,16 +333,61 @@ Namespace Mail
|
|||||||
Private Sub DoUseBestLogin_OAuth2(pClient As ClientBase, pSession As SessionInfo)
|
Private Sub DoUseBestLogin_OAuth2(pClient As ClientBase, pSession As SessionInfo)
|
||||||
Logger.Debug("Logging in with O365 OAuth2")
|
Logger.Debug("Logging in with O365 OAuth2")
|
||||||
|
|
||||||
If TypeOf pClient Is Imap Then
|
Dim oOAuth = New OAuth2(LogConfig, pSession.TenantId, pSession.ClientId, pSession.ClientSecret)
|
||||||
Dim oOAuth = New OAuth2(LogConfig, pSession.TenantId, pSession.ClientId, pSession.ClientSecret)
|
Dim oAccessToken = oOAuth.GetAccessToken()
|
||||||
Dim oAccessToken = oOAuth.GetAccessToken()
|
|
||||||
|
|
||||||
DirectCast(pClient, Imap).LoginOAUTH2(pSession.User, oAccessToken)
|
' Diagnose token shape (delegated vs app-only)
|
||||||
|
Try
|
||||||
|
Dim parts = oAccessToken.Split("."c)
|
||||||
|
If parts.Length = 3 Then
|
||||||
|
Dim payloadJson = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(PadBase64(parts(1))))
|
||||||
|
If payloadJson.Contains("""scp""") Then
|
||||||
|
Logger.Debug("OAuth2 token contains 'scp' (delegated) – IMAP App-only erwartet 'roles'.")
|
||||||
|
ElseIf payloadJson.Contains("""roles""") Then
|
||||||
|
Logger.Debug("OAuth2 token contains 'roles' (application permissions).")
|
||||||
|
Else
|
||||||
|
Logger.Debug("OAuth2 token payload hat weder 'scp' noch 'roles'.")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Debug("Token-Payload konnte nicht gelesen werden: {0}", ex.Message)
|
||||||
|
End Try
|
||||||
|
|
||||||
|
If TypeOf pClient Is Imap Then
|
||||||
|
Dim i = DirectCast(pClient, Imap)
|
||||||
|
|
||||||
|
' Login mit Hilfsmethode; bei Abbruch explizit SASL XOAUTH2 probieren
|
||||||
|
Try
|
||||||
|
' Direkt versuchen, falls die verwendete Version LoginOAUTH2 unterstützt.
|
||||||
|
i.LoginOAUTH2(pSession.User, oAccessToken)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("LoginOAUTH2 (IMAP) fehlgeschlagen: {0}", ex.Message)
|
||||||
|
Throw
|
||||||
|
End Try
|
||||||
|
ElseIf TypeOf pClient Is Smtp Then
|
||||||
|
Dim s = DirectCast(pClient, Smtp)
|
||||||
|
Try
|
||||||
|
s.LoginOAUTH2(pSession.User, oAccessToken)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("LoginOAUTH2 (SMTP) fehlgeschlagen: {0}", ex.Message)
|
||||||
|
Throw
|
||||||
|
End Try
|
||||||
Else
|
Else
|
||||||
Logger.Error("Unknown session type: [{0}]", pClient.GetType.ToString)
|
Logger.Error("Unknown session type: [{0}]", pClient.GetType.ToString)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Shared Function PadBase64(input As String) As String
|
||||||
|
' Normalize Base64 URL-safe and pad to multiple of 4
|
||||||
|
If input Is Nothing Then Return String.Empty
|
||||||
|
Dim normalized As String = input.Replace("-", "+").Replace("_", "/")
|
||||||
|
Dim remainder As Integer = normalized.Length Mod 4
|
||||||
|
If remainder > 0 Then
|
||||||
|
normalized &= New String("="c, 4 - remainder)
|
||||||
|
End If
|
||||||
|
Return normalized
|
||||||
|
End Function
|
||||||
|
|
||||||
Private Sub DoSTARTTLS(pClient As ClientBase)
|
Private Sub DoSTARTTLS(pClient As ClientBase)
|
||||||
If TypeOf pClient Is Smtp Then
|
If TypeOf pClient Is Smtp Then
|
||||||
DirectCast(pClient, Smtp).StartTLS()
|
DirectCast(pClient, Smtp).StartTLS()
|
||||||
|
|||||||
@@ -1,58 +1,96 @@
|
|||||||
Imports DigitalData.Modules.Base
|
Imports DigitalData.Modules.Base
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports DigitalData.Modules.Messaging.Mail.MailSession
|
|
||||||
Imports Limilabs.Client.IMAP
|
|
||||||
Imports Microsoft.Identity.Client
|
Imports Microsoft.Identity.Client
|
||||||
|
|
||||||
Public Class OAuth2
|
Namespace Mail
|
||||||
Inherits BaseClass
|
Public Class OAuth2
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
Private ReadOnly TenantId As String
|
Private ReadOnly _tenantId As String
|
||||||
Private ReadOnly ClientId As String
|
Private ReadOnly _clientId As String
|
||||||
Private ReadOnly ClientSecret As String
|
Private ReadOnly _clientSecret As String
|
||||||
|
|
||||||
Public Const O365_SCOPE = "https://outlook.office365.com/.default"
|
Public Const O365_SERVER As String = "outlook.office365.com"
|
||||||
Public Const O365_SERVER = "outlook.office365.com"
|
Public Const O365_SCOPE As String = "https://outlook.office365.com/.default"
|
||||||
|
Public Const O365_AUTHORITY_PREFIX As String = "https://login.microsoftonline.com/"
|
||||||
|
|
||||||
Private _AccessToken As String
|
Public Sub New(pLogConfig As LogConfig, tenantId As String, clientId As String, clientSecret As String)
|
||||||
Public ReadOnly Property AccessToken
|
MyBase.New(pLogConfig)
|
||||||
Get
|
_tenantId = tenantId
|
||||||
Return _AccessToken
|
_clientId = clientId
|
||||||
End Get
|
_clientSecret = clientSecret
|
||||||
End Property
|
End Sub
|
||||||
|
|
||||||
Public Sub New(pLogConfig As LogConfig, pTenantId As String, pClientId As String, pClientSecret As String)
|
Public Function GetAccessToken() As String
|
||||||
MyBase.New(pLogConfig)
|
' input hardening and better diagnostics
|
||||||
TenantId = pTenantId
|
Dim tenantId = If(_tenantId, String.Empty).Trim()
|
||||||
ClientId = pClientId
|
Dim clientId = If(_clientId, String.Empty).Trim()
|
||||||
ClientSecret = pClientSecret
|
Dim clientSecret = If(_clientSecret, String.Empty).Trim()
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Function GetAccessToken() As String
|
If String.IsNullOrWhiteSpace(tenantId) Then
|
||||||
Logger.Debug("Fetching Access Token..")
|
Logger.Error("OAuth2: tenantId is empty.")
|
||||||
|
Throw New ArgumentException("tenantId is empty")
|
||||||
|
End If
|
||||||
|
If String.IsNullOrWhiteSpace(clientId) Then
|
||||||
|
Logger.Error("OAuth2: clientId is empty.")
|
||||||
|
Throw New ArgumentException("clientId is empty")
|
||||||
|
End If
|
||||||
|
If String.IsNullOrWhiteSpace(clientSecret) Then
|
||||||
|
Logger.Error("OAuth2: clientSecret is empty.")
|
||||||
|
Throw New ArgumentException("clientSecret is empty")
|
||||||
|
End If
|
||||||
|
|
||||||
Try
|
' common misconfiguration: using the Secret ID (GUID) instead of the Secret VALUE
|
||||||
' Create the application, which is defined in
|
Dim tmpGuid As Guid
|
||||||
' Microsoft.Identity.Client
|
If Guid.TryParse(clientSecret, tmpGuid) Then
|
||||||
Dim oApp = ConfidentialClientApplicationBuilder.
|
Logger.Error("OAuth2: clientSecret looks like a GUID (likely the secret ID). Use the secret VALUE instead.")
|
||||||
Create(ClientId).
|
Throw New ApplicationException("Invalid client secret: looks like Secret ID (GUID), not the secret value.")
|
||||||
WithTenantId(TenantId).
|
End If
|
||||||
WithClientSecret(ClientSecret).
|
|
||||||
Build()
|
|
||||||
|
|
||||||
' Request an access token
|
Try
|
||||||
Dim oScopes = New List(Of String) From {O365_SCOPE}
|
Dim authority = O365_AUTHORITY_PREFIX & tenantId
|
||||||
Dim oResult = oApp.
|
|
||||||
AcquireTokenForClient(oScopes).
|
|
||||||
ExecuteAsync().Result
|
|
||||||
|
|
||||||
Logger.Debug("Access Token fetched.")
|
Dim app = ConfidentialClientApplicationBuilder.Create(clientId).
|
||||||
|
WithClientSecret(clientSecret).
|
||||||
|
WithAuthority(authority).
|
||||||
|
Build()
|
||||||
|
|
||||||
Return oResult.AccessToken
|
Dim scopes = New String() {O365_SCOPE}
|
||||||
Catch ex As Exception
|
Dim result = app.AcquireTokenForClient(scopes).ExecuteAsync().GetAwaiter().GetResult()
|
||||||
Logger.Warn("Could not request access token!")
|
|
||||||
Logger.Error(ex)
|
Logger.Info("OAuth2 token acquired for tenant {0}. ExpiresOn={1:u}", tenantId, result.ExpiresOn.UtcDateTime)
|
||||||
Return Nothing
|
Return result.AccessToken
|
||||||
End Try
|
Catch ex As MsalServiceException
|
||||||
End Function
|
' richer diagnostics without depending on specific MSAL version members
|
||||||
End Class
|
Logger.Error("MSAL service error. Code={0}. Message={1}", ex.ErrorCode, ex.Message)
|
||||||
|
|
||||||
|
' Try to log StatusCode, ResponseBody if available (via reflection to avoid version dependency)
|
||||||
|
Try
|
||||||
|
Dim t = GetType(MsalServiceException)
|
||||||
|
Dim scProp = t.GetProperty("StatusCode")
|
||||||
|
If scProp IsNot Nothing Then
|
||||||
|
Dim sc = scProp.GetValue(ex, Nothing)
|
||||||
|
If sc IsNot Nothing Then Logger.Error("MSAL StatusCode={0}", sc)
|
||||||
|
End If
|
||||||
|
Dim rbProp = t.GetProperty("ResponseBody")
|
||||||
|
If rbProp IsNot Nothing Then
|
||||||
|
Dim rb = rbProp.GetValue(ex, Nothing)
|
||||||
|
If rb IsNot Nothing Then Logger.Error("MSAL ResponseBody={0}", rb)
|
||||||
|
End If
|
||||||
|
Dim ciProp = t.GetProperty("Claims")
|
||||||
|
If ciProp IsNot Nothing Then
|
||||||
|
Dim claims = ciProp.GetValue(ex, Nothing)
|
||||||
|
If claims IsNot Nothing AndAlso claims.ToString().Length > 0 Then Logger.Error("MSAL Claims={0}", claims)
|
||||||
|
End If
|
||||||
|
Catch
|
||||||
|
' ignore reflection diagnostics failures
|
||||||
|
End Try
|
||||||
|
|
||||||
|
Throw
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Error(ex)
|
||||||
|
Throw
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@@ -48,8 +48,7 @@
|
|||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Mail">
|
<Reference Include="Mail">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\Limilabs\Mail.dll\Mail.dll</HintPath>
|
<HintPath>M:\Bibliotheken\3rdParty\Limilabs\Mail.dll</HintPath>
|
||||||
<EmbedInteropTypes>False</EmbedInteropTypes>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="Microsoft.Identity.Client, Version=4.55.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Identity.Client, Version=4.55.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae, processorArchitecture=MSIL">
|
||||||
|
|||||||
@@ -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("1.9.8.0")>
|
<Assembly: AssemblyVersion("2.0.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.9.8.0")>
|
<Assembly: AssemblyFileVersion("2.0.0.0")>
|
||||||
|
|||||||
2
Messaging/My Project/Settings.Designer.vb
generated
2
Messaging/My Project/Settings.Designer.vb
generated
@@ -15,7 +15,7 @@ Option Explicit On
|
|||||||
Namespace My
|
Namespace My
|
||||||
|
|
||||||
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0"), _
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0"), _
|
||||||
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
Partial Friend NotInheritable Class MySettings
|
Partial Friend NotInheritable Class MySettings
|
||||||
Inherits Global.System.Configuration.ApplicationSettingsBase
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|||||||
152
MigrationBackup/56f77a37/Base/Base.vbproj
Normal file
152
MigrationBackup/56f77a37/Base/Base.vbproj
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{6EA0C51F-C2B1-4462-8198-3DE0B32B74F8}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>DigitalData.Modules.Base</RootNamespace>
|
||||||
|
<AssemblyName>DigitalData.Modules.Base</AssemblyName>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<MyType>Windows</MyType>
|
||||||
|
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DocumentationFile>DigitalData.Modules.Base.xml</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<DefineDebug>false</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DocumentationFile>DigitalData.Modules.Base.xml</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionExplicit>On</OptionExplicit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionCompare>Binary</OptionCompare>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionStrict>Off</OptionStrict>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionInfer>On</OptionInfer>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="DigitalData.Modules.Logging">
|
||||||
|
<HintPath>..\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.IO.Compression" />
|
||||||
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
|
<Reference Include="System.ServiceModel" />
|
||||||
|
<Reference Include="System.Transactions" />
|
||||||
|
<Reference Include="System.Web" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Import Include="Microsoft.VisualBasic" />
|
||||||
|
<Import Include="System" />
|
||||||
|
<Import Include="System.Collections" />
|
||||||
|
<Import Include="System.Collections.Generic" />
|
||||||
|
<Import Include="System.Data" />
|
||||||
|
<Import Include="System.Diagnostics" />
|
||||||
|
<Import Include="System.Linq" />
|
||||||
|
<Import Include="System.Xml.Linq" />
|
||||||
|
<Import Include="System.Threading.Tasks" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Base\BaseClass.vb" />
|
||||||
|
<Compile Include="Base\BaseUtils.vb" />
|
||||||
|
<Compile Include="ECM\ECM.vb" />
|
||||||
|
<Compile Include="Encryption\Compression.vb" />
|
||||||
|
<Compile Include="Encryption\Encryption.vb" />
|
||||||
|
<Compile Include="Encryption\EncryptionLegacy.vb" />
|
||||||
|
<Compile Include="DatabaseEx.vb" />
|
||||||
|
<Compile Include="FilesystemEx.vb" />
|
||||||
|
<Compile Include="FileWatcher\FileWatcher.vb" />
|
||||||
|
<Compile Include="FileWatcher\FileWatcherFilters.vb" />
|
||||||
|
<Compile Include="FileWatcher\FileWatcherProperties.vb" />
|
||||||
|
<Compile Include="IDB\Constants.vb" />
|
||||||
|
<Compile Include="MimeEx.vb" />
|
||||||
|
<Compile Include="StringFunctions.vb" />
|
||||||
|
<Compile Include="WindowsEx.vb" />
|
||||||
|
<Compile Include="ModuleExtensions.vb" />
|
||||||
|
<Compile Include="FileEx.vb" />
|
||||||
|
<Compile Include="NativeMethods.vb" />
|
||||||
|
<Compile Include="ObjectEx.vb" />
|
||||||
|
<Compile Include="GraphicsEx.vb" />
|
||||||
|
<Compile Include="LanguageEx.vb" />
|
||||||
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
|
<Compile Include="My Project\Application.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Application.myapp</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Resources.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Settings.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ScreenEx.vb" />
|
||||||
|
<Compile Include="StringEx.vb" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="My Project\Resources.resx">
|
||||||
|
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="My Project\Application.myapp">
|
||||||
|
<Generator>MyApplicationCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="My Project\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="README.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent>powershell.exe -command "& { &'$(SolutionDir)copy-binary.ps1' '$(TargetPath)' '$(TargetFileName)' '$(ConfigurationName)' '$(ProjectName)' }"</PostBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
163
MigrationBackup/56f77a37/Base/NuGetUpgradeLog.html
Normal file
163
MigrationBackup/56f77a37/Base/NuGetUpgradeLog.html
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- saved from url=(0014)about:internet -->
|
||||||
|
|
||||||
|
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt"><head><meta content="en-us" http-equiv="Content-Language" /><meta content="text/html; charset=utf-16" http-equiv="Content-Type" /><title _locID="NuGetUpgradeReportTitle">
|
||||||
|
NuGetMigrationLog
|
||||||
|
</title><style>
|
||||||
|
|
||||||
|
/* Body style, for the entire document */
|
||||||
|
body
|
||||||
|
{
|
||||||
|
background: #F3F3F4;
|
||||||
|
color: #1E1E1F;
|
||||||
|
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
||||||
|
font-size: 12pt;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header1 style, used for the main title */
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
padding: 10px 0px 10px 10px;
|
||||||
|
font-size: 21pt;
|
||||||
|
background-color: #E2E2E2;
|
||||||
|
border-bottom: 1px #C1C1C2 solid;
|
||||||
|
color: #201F20;
|
||||||
|
margin: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header2 style, used for "Overview" and other sections */
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
font-size: 18pt;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 15px 0 5px 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header3 style, used for sub-sections, such as project name */
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15pt;
|
||||||
|
margin: 0;
|
||||||
|
padding: 15px 0 5px 0;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-text
|
||||||
|
{
|
||||||
|
margin: 0px 0 0.75em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color all hyperlinks one color */
|
||||||
|
a
|
||||||
|
{
|
||||||
|
color: #1382CE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Table styles */
|
||||||
|
table
|
||||||
|
{
|
||||||
|
border-spacing: 0 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
table th
|
||||||
|
{
|
||||||
|
background: #E7E7E8;
|
||||||
|
text-align: left;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 3px 6px 3px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td
|
||||||
|
{
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 3px 6px 5px 5px;
|
||||||
|
margin: 0px;
|
||||||
|
border: 1px solid #E7E7E8;
|
||||||
|
background: #F7F7F8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Local link is a style for hyperlinks that link to file:/// content, there are lots so color them as 'normal' text until the user mouse overs */
|
||||||
|
.localLink
|
||||||
|
{
|
||||||
|
color: #1E1E1F;
|
||||||
|
background: #EEEEED;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.localLink:hover
|
||||||
|
{
|
||||||
|
color: #1382CE;
|
||||||
|
background: #FFFF99;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.issueCell
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.packageIssue
|
||||||
|
{
|
||||||
|
margin-left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Padding around the content after the h1 */
|
||||||
|
#content
|
||||||
|
{
|
||||||
|
padding: 0px 20px 20px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.issues table
|
||||||
|
{
|
||||||
|
width: 97%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* All Icons */
|
||||||
|
.IconSuccessEncoded, .IconInfoEncoded, .IconWarningEncoded, .IconErrorEncoded
|
||||||
|
{
|
||||||
|
min-width:18px;
|
||||||
|
min-height:18px;
|
||||||
|
background-repeat:no-repeat;
|
||||||
|
background-position:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.IconSuccessEncoded
|
||||||
|
{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABcElEQVR4Xq2TsUsCURzHv15g8ZJcBWlyiYYgCIWcb9DFRRwMW5TA2c0/QEFwFkxxUQdxVlBwCYWOi6IhWgQhBLHJUCkhLr/BW8S7gvrAg+N+v8/v+x68Z8MGy+XSCyABQAXgBgHGALoASkIIDWSLeLBetdHryMjd5IxQPWT4rn1c/P7+xxp72Cs9m5SZ0Bq2vPnbPFafK2zDvmNHypdC0BPkLlQhxJsCAhQoZwdZU5mwxh720qGo8MzTxTTKZDPCx2HoVzp6lz0Q9tKhyx0kGs8Ny+TkWRKk8lCROwEduhyg9l/6lunOPSfmH3NUH6uQ0KHLAe7JYvJjevm+DAMGJHToKtigE+vwvIidxLamb8IBY9e+C5LiXREkfho3TSd06HJA13/oh6T51MTsfQbHrsMynQ5dDihFjiK8JJAU9AKIWTp76dCVN7HWHrajmUEGvyF9nkbAE6gLIS7kTUyuf2gscLoJrElZo/Mvj+nPz/kLTmfnEwP3tB0AAAAASUVORK5CYII=);
|
||||||
|
}
|
||||||
|
|
||||||
|
.IconInfoEncoded
|
||||||
|
{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR4Xs2TsUoDQRRF7wwoziokjZUKadInhdhukR9YP8DMX1hYW+QvdsXa/QHBbcXC7W0CamWTQnclFutceIQJwwaWNLlwm5k5d94M76mmaeCrrmsLYOocY12FcxZFUeozCqKqqgYA8uevv1H6VuPxcwlfk5N92KHBxfFeCSAxxswlYAW/Xr989x/mv9gkhtyMDhcAxgzRsp7flj8B/HF1RsMXq+NZMkopaHe7lbKxQUEIGbKsYNoGn969060hZBkQex/W8oRQwsQaW2o3Ago2SVcJUzAgY3N0lTCZZm+zPS8HB51gMmS1DEYyOz9acKO1D8JWTlafKIMxdhvlfdyT94Vv5h7P8Ky7nQzACmhvKq3zk3PjW9asz9D/1oigecsioooAAAAASUVORK5CYII=);
|
||||||
|
}
|
||||||
|
|
||||||
|
.IconWarningEncoded
|
||||||
|
{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAx0lEQVR4XpWSMQ7CMAxFf4xAyBMLCxMrO8dhaBcuwdCJS3RJBw7SA/QGTCxdWJgiQYWKXJWKIXHIlyw5lqr34tQgEOdcBsCOx5yZK3hCCKdYXneQkh4pEfqzLfu+wVDSyyzFoJjfz9NB+pAF+eizx2Vruts0k15mPgvS6GYvpVtQhB61IB/dk6AF6fS4Ben0uIX5odtFe8Q/eW1KvFeH4e8khT6+gm5B+t3juyDt7n0jpe+CANTd+oTUjN/U3yVaABnSUjFz/gFq44JaVSCXeQAAAABJRU5ErkJggg==);
|
||||||
|
}
|
||||||
|
|
||||||
|
.IconErrorEncoded
|
||||||
|
{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQElEQVR4XqWTvUoEQRCE6wYPZUA80AfwAQz23uCMjA7MDRQEIzPBVEyNTQUFIw00vcQTTMzuAh/AxEQQT8HF/3G/oGGnEUGuoNnd6qoZuqltyKEsyzVJq5I6rnUp6SjGeGhESikzzlc1eL7opfuVbrqbU1Zw9NCgtQMaZpY0eNnaaL2fHusvTK5vKu7sjSS1Y4y3QUA6K3e3Mau5UFDyMP7tYF9o8cAHZv68vipoIJg971PZIZ5HiwdvYGGvFVFHmGmZ2MxwmQYPXubPl9Up0tfoMQGetXd6mRbvhBw+boZ6WF7Mbv1+GsHRk0fQmPAH1GfmZirbCfDJ61tw3Px8/8pZsPAG4jlVhcPgZ7adwNWBB68lkRQWFiTgFlbnLY3DGGM7izIJIyT/jjIvEJw6fdJTc6krDzh6aMwMP9bvDH4ADSsa9uSWVJkAAAAASUVORK5CYII=);
|
||||||
|
}
|
||||||
|
|
||||||
|
</style></head><body><h1>
|
||||||
|
NuGet Migration Report - Base</h1><div id="content"><h2 _locID="OverviewTitle">Overview</h2><div class="info-text">Migration to PackageReference was completed successfully. Please build and run your solution to verify that all packages are available.</div><div class="info-text">
|
||||||
|
If you run into any problems, have feedback, questions, or concerns, please
|
||||||
|
<a href="https://github.com/NuGet/Home/issues/">file an issue on the NuGet GitHub repository.</a></div><div class="info-text">
|
||||||
|
Changed files and this report have been backed up here:
|
||||||
|
<a href="E:\SchreiberM\Visual Studio\GIT\2_DLL Projekte\DDModules\MigrationBackup\56f77a37\Base">E:\SchreiberM\Visual Studio\GIT\2_DLL Projekte\DDModules\MigrationBackup\56f77a37\Base</a></div><div class="info-text"><a href="https://aka.ms/nuget-pc2pr-migrator-rollback">Help me rollback to packages.config</a></div><h2 _locID="PackagesTitle">Packages processed</h2><h3 _locID="IncludePackagesTitle">Top-level dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell"><span>NLog</span></td><td><span>
|
||||||
|
v5.0.5</span></td></tr><tr><td class="issueCell"><span>NuGet.CommandLine</span></td><td><span>
|
||||||
|
v6.13.2</span></td></tr></table></div><p /><h3 _locID="IncludePackagesTitle">Transitive dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell">
|
||||||
|
No transitive dependencies found.
|
||||||
|
</td><td /></tr></table></div><h2 _locID="IssuesTitle">Package compatibility issues</h2><div class="issues"><table><tr><th /><th class="issueCell" _locID="DescriptionTableHeader">Description</th></tr><tr><td class="IconInfoEncoded" /><td class="issueCell">
|
||||||
|
No issues were found.
|
||||||
|
</td></tr></table></div></div></body></html>
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DigitalData.Modules.Logging" version="2.6.5" targetFramework="net462" />
|
<package id="NLog" version="5.0.5" targetFramework="net462" />
|
||||||
<package id="NLog" version="5.0.5" targetFramework="net461" />
|
|
||||||
<package id="NuGet.CommandLine" version="6.13.2" targetFramework="net462" developmentDependency="true" />
|
<package id="NuGet.CommandLine" version="6.13.2" targetFramework="net462" developmentDependency="true" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -16,6 +16,9 @@ EndProject
|
|||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Interfaces", "Interfaces\Interfaces.vbproj", "{AB6F09BF-E794-4F6A-94BB-C97C0BA84D64}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Interfaces", "Interfaces\Interfaces.vbproj", "{AB6F09BF-E794-4F6A-94BB-C97C0BA84D64}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Jobs", "Jobs\Jobs.vbproj", "{39EC839A-3C30-4922-A41E-6B09D1DDE5C3}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Jobs", "Jobs\Jobs.vbproj", "{39EC839A-3C30-4922-A41E-6B09D1DDE5C3}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{AB6F09BF-E794-4F6A-94BB-C97C0BA84D64} = {AB6F09BF-E794-4F6A-94BB-C97C0BA84D64}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "License", "License\License.vbproj", "{5EBACBFA-F11A-4BBF-8D02-91461F2293ED}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "License", "License\License.vbproj", "{5EBACBFA-F11A-4BBF-8D02-91461F2293ED}"
|
||||||
EndProject
|
EndProject
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Interop.WINDREAMLib">
|
<Reference Include="Interop.WINDREAMLib">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>
|
<HintPath>M:\Bibliotheken\3rdParty\windream\Interop.WINDREAMLib.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
|||||||
@@ -44,13 +44,18 @@
|
|||||||
<OptionInfer>On</OptionInfer>
|
<OptionInfer>On</OptionInfer>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="Microsoft.Office.Interop.Outlook">
|
||||||
|
<HintPath>M:\Bibliotheken\3rdParty\Office\Microsoft.Office.Interop.Outlook.dll</HintPath>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</Reference>
|
||||||
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="OFFICE">
|
||||||
|
<HintPath>M:\Bibliotheken\3rdParty\Office\OFFICE.DLL</HintPath>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</Reference>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
@@ -141,26 +146,12 @@
|
|||||||
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
|
||||||
<Name>Base</Name>
|
<Name>Base</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Logging\Logging.vbproj">
|
||||||
|
<Project>{903b2d7d-3b80-4be9-8713-7447b704e1b0}</Project>
|
||||||
|
<Name>Logging</Name>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<COMReference Include="Microsoft.Office.Core">
|
|
||||||
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
|
|
||||||
<VersionMajor>2</VersionMajor>
|
|
||||||
<VersionMinor>8</VersionMinor>
|
|
||||||
<Lcid>0</Lcid>
|
|
||||||
<WrapperTool>primary</WrapperTool>
|
|
||||||
<Isolated>False</Isolated>
|
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
|
||||||
</COMReference>
|
|
||||||
<COMReference Include="Microsoft.Office.Interop.Outlook">
|
|
||||||
<Guid>{00062FFF-0000-0000-C000-000000000046}</Guid>
|
|
||||||
<VersionMajor>9</VersionMajor>
|
|
||||||
<VersionMinor>6</VersionMinor>
|
|
||||||
<Lcid>0</Lcid>
|
|
||||||
<WrapperTool>primary</WrapperTool>
|
|
||||||
<Isolated>False</Isolated>
|
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
|
||||||
</COMReference>
|
|
||||||
<COMReference Include="stdole">
|
<COMReference Include="stdole">
|
||||||
<Guid>{00020430-0000-0000-C000-000000000046}</Guid>
|
<Guid>{00020430-0000-0000-C000-000000000046}</Guid>
|
||||||
<VersionMajor>2</VersionMajor>
|
<VersionMajor>2</VersionMajor>
|
||||||
|
|||||||
@@ -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("1.9.7.0")>
|
<Assembly: AssemblyVersion("1.9.8.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.9.7.0")>
|
<Assembly: AssemblyFileVersion("1.9.8.0")>
|
||||||
|
|||||||
@@ -182,7 +182,18 @@ Public Class Windream
|
|||||||
_sessionPassword = SessionPassword
|
_sessionPassword = SessionPassword
|
||||||
_sessionDomain = SessionDomain
|
_sessionDomain = SessionDomain
|
||||||
End Sub
|
End Sub
|
||||||
|
Public Sub Disconnect()
|
||||||
|
Try
|
||||||
|
If Session IsNot Nothing AndAlso Session.aLoggedin Then
|
||||||
|
Session.Logout()
|
||||||
|
_logger.Info("Session successfully logged out.")
|
||||||
|
Else
|
||||||
|
_logger.Info("No active session to log out.")
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
_logger.Error(ex, "Error while logging out session")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
Public Function GetCleanedPath(Path As String) As String
|
Public Function GetCleanedPath(Path As String) As String
|
||||||
Return Regex.Replace(Path, Constants.REGEX_CLEAN_FILENAME, String.Empty)
|
Return Regex.Replace(Path, Constants.REGEX_CLEAN_FILENAME, String.Empty)
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -47,20 +47,21 @@
|
|||||||
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="DigitalData.Modules.Logging, Version=2.6.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
<HintPath>..\packages\DigitalData.Modules.Logging.2.6.5\lib\net462\DigitalData.Modules.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Interop.WINDREAMLib">
|
<Reference Include="Interop.WINDREAMLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<EmbedInteropTypes>False</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
<HintPath>M:\Bibliotheken\3rdParty\windream\Interop.WINDREAMLib.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Interop.WMCNNCTDLLLib">
|
<Reference Include="Interop.WMCNNCTDLLLib">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMCNNCTDLLLib.dll</HintPath>
|
<HintPath>M:\Bibliotheken\3rdParty\windream\Interop.WMCNNCTDLLLib.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Interop.WMOSRCHLib">
|
<Reference Include="Interop.WMOSRCHLib">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOSRCHLib.dll</HintPath>
|
<HintPath>M:\Bibliotheken\3rdParty\windream\Interop.WMOSRCHLib.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Interop.WMOTOOLLib">
|
<Reference Include="Interop.WMOTOOLLib">
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOTOOLLib.dll</HintPath>
|
<HintPath>M:\Bibliotheken\3rdParty\windream\Interop.WMOTOOLLib.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
|||||||
@@ -7,4 +7,10 @@ Public Class Environment
|
|||||||
Public Property Database As MSSQLServer
|
Public Property Database As MSSQLServer
|
||||||
Public Property DatabaseIDB As MSSQLServer
|
Public Property DatabaseIDB As MSSQLServer
|
||||||
Public Property Modules As New Dictionary(Of String, State.ModuleState)
|
Public Property Modules As New Dictionary(Of String, State.ModuleState)
|
||||||
|
Public Class Filehandling
|
||||||
|
Public CopyWMFile2Temp As Boolean = False
|
||||||
|
Public WM_SUFFIX As String = "\\WINDREAM\OBJECTS"
|
||||||
|
Public MAP_SHAREDRIVE As String = ""
|
||||||
|
Public MAP_BLACKLIST As String = ""
|
||||||
|
End Class
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -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("1.3.0.0")>
|
<Assembly: AssemblyVersion("1.4.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.3.0.0")>
|
<Assembly: AssemblyFileVersion("1.4.0.0")>
|
||||||
|
|||||||
@@ -137,7 +137,7 @@
|
|||||||
<Name>Logging</Name>
|
<Name>Logging</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Windows\Windows.vbproj">
|
<ProjectReference Include="..\Windows\Windows.vbproj">
|
||||||
<Project>{5EFAEF9B-90B9-4F05-9F70-F79AD77FFF86}</Project>
|
<Project>{5efaef9b-90b9-4f05-9f70-f79ad77fff86}</Project>
|
||||||
<Name>Windows</Name>
|
<Name>Windows</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
66
c
Normal file
66
c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[33m51798a28[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mmaster[m[33m)[m HEAD@{0}: reset: moving to 51798a28f5fddb5b5e62e5e3944dfa8cea4bb12a
|
||||||
|
[33mec3a677c[m HEAD@{1}: commit: MS Jobs Sichtbeleg
|
||||||
|
[33m48406884[m HEAD@{2}: pull --progress --no-edit --no-stat --recurse-submodules=no origin: Fast-forward
|
||||||
|
[33m204aaaeb[m HEAD@{3}: commit: Korrektur
|
||||||
|
[33mec378ba3[m HEAD@{4}: commit: Modules.Interfaces: Version 2.3.7.0
|
||||||
|
[33m35b19cde[m HEAD@{5}: commit: Modules.Interfaces: Fehlende Elemente der Codeliste UNTDID 7161 (Charge codes) nachgetragen, passend zur Version 2.3.x
|
||||||
|
[33m9ae5465c[m HEAD@{6}: commit: Modules.Jobs: Version 3.0.3.0
|
||||||
|
[33m82139fc3[m HEAD@{7}: commit: Modules.Jobs: 4000 Zeichen-Grenze
|
||||||
|
[33mf4ba4d9e[m HEAD@{8}: commit: Modules.Interface: Listen-Items Handling (Item_Type = 4)
|
||||||
|
[33m0aabc12f[m HEAD@{9}: commit: Modules.Jobs: Version 3.0.2.0
|
||||||
|
[33madbd0fe9[m HEAD@{10}: commit: Modules.Jobs: Kürzen der ITEM_VALUE-Werte entfernt. Tabelle muss VARCHAR(max) vorsehen.
|
||||||
|
[33m2d6a2df4[m HEAD@{11}: commit: Modules.Jobs: Version 3.0.1.0
|
||||||
|
[33me7ccb748[m HEAD@{12}: commit: Modules.Interfaces: Version 2.3.6.0
|
||||||
|
[33m05355c93[m HEAD@{13}: commit: Readonly Property
|
||||||
|
[33m2007bb91[m HEAD@{14}: commit: Modules.Interfaces & Modules.Jobs: Weitergabe der ErrorCodes in den Exceptions, um sie im WebService auswerten zu können.
|
||||||
|
[33md7d2ecf8[m HEAD@{15}: commit: Modules.Jobs: Replace Case-Insensitiv
|
||||||
|
[33m447c7ea6[m HEAD@{16}: commit: Modules.Jobs: Version 3.0.0.0
|
||||||
|
[33m32bb14db[m HEAD@{17}: commit: Modules.Jobs: Strings-Vergleiche sollten unbedingt mit string.equals() erfolgen!
|
||||||
|
[33ma5226a81[m HEAD@{18}: commit: Modules.Interfaces: Try/Catch und logging
|
||||||
|
[33mb534c4c7[m HEAD@{19}: commit: Modules.Interfaces: Version 2.3.5.0
|
||||||
|
[33mdc801383[m HEAD@{20}: commit: Modules.Jobs: Version 2.9.9.0
|
||||||
|
[33m477bb511[m HEAD@{21}: commit: Modules.Interfaces & Modules.Jobs: ZUGFeRD 2.3.x-Logik angepasst. Auswertung der XML-Tabelle korrigiert, das Dictionary wird erst später erstellt.
|
||||||
|
[33m0b66b805[m HEAD@{22}: commit: Modules.Jobs: Version 2.9.8.0
|
||||||
|
[33m5fd924d4[m HEAD@{23}: commit: Modules.Interfaces: Version 2.3.4.0
|
||||||
|
[33me8ebc302[m HEAD@{24}: commit: Modules.Interface + Modules.Jobs: ITEM_TYPE = 4 / Description enthält jetzt BT-Feld-Info / Kommentare / Abfrage BT-Felder
|
||||||
|
[33m262805d1[m HEAD@{25}: commit: Modules.Interface: Datumsformat immer 8-stellig (yyyyMMdd) aufbereiten
|
||||||
|
[33m623807c5[m HEAD@{26}: commit: Modules.Interfaces: Version 2.3.3
|
||||||
|
[33maee7997c[m HEAD@{27}: commit: Modules.Interfaces: Date/DateTime (yyyy-MM-dd) und Decimal/Numeric-Werte mit CultureInfo.Invariant.Culture speichern.
|
||||||
|
[33m82a95faa[m HEAD@{28}: commit: Modules.Jobs: Version 2.9.7.0
|
||||||
|
[33maf7534df[m HEAD@{29}: commit: Modules.Interfaces: Version 2.3.2.0
|
||||||
|
[33mfa2c2a64[m HEAD@{30}: commit: Modules.Jobs: Keine Hochkomma-Ersetzung mehr bei Bulk-Insert
|
||||||
|
[33m390a5247[m HEAD@{31}: commit: Modules.Interfaces: Belegarten in ZUGFeRD 2.3.x korrigiert und fehlende nachgetragen.
|
||||||
|
[33m0ed99610[m HEAD@{32}: commit: Leere Strings (item_type = 0) nicht mehr in die DB schreiben
|
||||||
|
[33m2e0ae13a[m HEAD@{33}: commit: Modules.Jobs: Version 2.9.6.0
|
||||||
|
[33m267e0387[m HEAD@{34}: commit: Modules.Jobs: Prüfe ob Value überhaupt einen Wert hat, sonst wird auch keine Datei erstellt
|
||||||
|
[33m2673755b[m HEAD@{35}: commit: Jobs: base64 / varbinary
|
||||||
|
[33m5052ce4f[m HEAD@{36}: commit: Modules.Jobs: Version 2.9.5.0
|
||||||
|
[33m717909d7[m HEAD@{37}: commit: Modules.Jobs: MIME-Typen (pdf, xlsx, odt) - Fehlerhandling ergänzt, wenn Dateien nicht erstellt werden können.
|
||||||
|
[33m04a408ab[m HEAD@{38}: commit: Jobs: MIME-Types + File-Extension + xlsx-Dateien
|
||||||
|
[33mface3c76[m HEAD@{39}: commit: Modules.Database: Version 2.3.6.0
|
||||||
|
[33m2d3a1cd2[m HEAD@{40}: commit: Korrektur von MS in master nachgezogen
|
||||||
|
[33m43e95a20[m HEAD@{41}: checkout: moving from Update-Net-8 to master
|
||||||
|
[33mc0054d41[m[33m ([m[1;32mUpdate-Net-8[m[33m)[m HEAD@{42}: checkout: moving from master to Update-Net-8
|
||||||
|
[33m43e95a20[m HEAD@{43}: checkout: moving from Update-Net-8 to master
|
||||||
|
[33mc0054d41[m[33m ([m[1;32mUpdate-Net-8[m[33m)[m HEAD@{44}: checkout: moving from master to Update-Net-8
|
||||||
|
[33m43e95a20[m HEAD@{45}: checkout: moving from Update-Net-8 to master
|
||||||
|
[33mc0054d41[m[33m ([m[1;32mUpdate-Net-8[m[33m)[m HEAD@{46}: checkout: moving from master to Update-Net-8
|
||||||
|
[33m43e95a20[m HEAD@{47}: commit: Modules.Jobs: Version 2.9.4.0
|
||||||
|
[33m05d0bd60[m HEAD@{48}: commit: Modules.Interfaces: Version 2.3.1.0
|
||||||
|
[33m7e70c059[m HEAD@{49}: commit: Auslesen von embedded Files aus einer XML-Datei
|
||||||
|
[33m0261d237[m HEAD@{50}: pull --progress --no-edit --no-stat --recurse-submodules=no origin: Fast-forward
|
||||||
|
[33mea7fe74e[m HEAD@{51}: pull --progress --no-edit --no-stat --recurse-submodules=no origin: Merge made by the 'ort' strategy.
|
||||||
|
[33mdf04b0a7[m HEAD@{52}: commit: Modules.Jobs: Version 2.9.3.0
|
||||||
|
[33mce652760[m HEAD@{53}: commit: Modules.Base: version 1.3.9.0
|
||||||
|
[33m17d5acee[m HEAD@{54}: commit: Neue Datum-Konvertierungsfunktion
|
||||||
|
[33mc7afa2f7[m HEAD@{55}: commit: Modules.Interfaces: Version 2.2.9.0
|
||||||
|
[33m4d5ab649[m HEAD@{56}: commit: Peppol in UBL2.1 umbenannt
|
||||||
|
[33mf4c3e9b3[m HEAD@{57}: commit: Modules.Interfaces: Version 2.2.8.0
|
||||||
|
[33m9d76b17b[m HEAD@{58}: commit: Integration ZUGFeRD 2.3.3 XSD Schema
|
||||||
|
[33m2ec92511[m HEAD@{59}: commit: Modules.Jobs: Version 2.9.2.0
|
||||||
|
[33m8e1b9d21[m HEAD@{60}: commit: Modules.Interfaces - Version 2.2.7.0
|
||||||
|
[33m7ac596b9[m HEAD@{61}: pull --progress --no-edit --no-stat --recurse-submodules=no origin: Merge made by the 'ort' strategy.
|
||||||
|
[33mcf9650be[m HEAD@{62}: commit: Peppol 3017 / UBL Logik
|
||||||
|
[33m5774eb76[m HEAD@{63}: pull --progress --no-edit --no-stat --recurse-submodules=no origin: Fast-forward
|
||||||
|
[33m7602f2c8[m HEAD@{64}: commit: Nuget Update - GDPicture
|
||||||
|
[33mc74b7782[m HEAD@{65}: clone: from http://git.dd:3000/AppStd/Modules
|
||||||
Reference in New Issue
Block a user