Compare commits

..

4 Commits

Author SHA1 Message Date
Developer01
a88af162b5 Vor Optimierung TreeListDevexpress_FocusedNodeChanged 2026-02-24 11:24:05 +01:00
Developer01
93645962a6 Drag and Drop Outlook und NodeNavigation Testbutton entfernt 2025-12-18 16:25:09 +01:00
Developer01
5dfa7d1421 Vor Anpassung DragDrop 365 2025-12-10 08:51:47 +01:00
Developer01
784d954441 Jumpto Record 2025-12-09 11:55:44 +01:00
9 changed files with 679 additions and 567 deletions

View File

@@ -1,181 +1,299 @@
Imports System.IO
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Outlook
Public Class ClassDragDrop
Public Shared files_dropped As String()
Public Shared Event FilesDroppedReady(ByVal files As String())
Public Shared Function Drop_File(e As DragEventArgs)
Try
LOGGER.Debug("In Drop_File....")
files_dropped = Nothing
files_dropped = New String() {}
Dim Sql As String = "DELETE FROM TBPMO_FILES_USER WHERE HANDLE_TYPE <> 'SCAN' AND USER_WORK = '" & USER_USERNAME & "'"
MYDB_ECM.ExecuteNonQuery(sql)
' WICHTIG: DB-Löschung NICHT im UI-Thread erzwingen.
' => Verschiebe in aufrufenden Code per BeginInvoke/Task.Run (siehe Kommentar unten).
' MYDB_ECM?.ExecuteNonQuery(Sql)
Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
Dim hasOutlookContents As Boolean = e.Data.GetDataPresent("FileContents")
Dim hasChromiumMime As Boolean = e.Data.GetDataPresent("Chromium Web Custom MIME Data Format")
Dim hasFileNameW As Boolean = e.Data.GetDataPresent("FileNameW") OrElse e.Data.GetDataPresent("FileName")
Dim hasFileDrop As Boolean = e.Data.GetDataPresent(DataFormats.FileDrop)
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
LOGGER.Debug("Simple File Drop")
Dim MyFiles() As String
Dim i As Integer
' Assign the files to an array.
MyFiles = e.Data.GetData(DataFormats.FileDrop)
' Loop through the array and add the files to the list.
For i = 0 To MyFiles.Length - 1
LOGGER.Info("Simple FileDrop - File: " & MyFiles(i))
ReDim Preserve files_dropped(i)
files_dropped(i) = "@DROPFROMFSYSTEM@" & MyFiles(i)
' ListBox1.Items.Add(MyFiles(i))
Next
Return True
ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
'// the first step here is to get the stbFileName
'// of the attachment and
'// build a full-path name so we can store it
'// in the temporary folder
'//
'// set up to obtain the aryFileGroupDescriptor
'// and extract the file name
Dim stmInput As IO.Stream = CType(e.Data.GetData("FileGroupDescriptor"), IO.Stream)
Dim aryFileGroupDescriptor(512) As Byte ' = new byte[512]
stmInput.Read(aryFileGroupDescriptor, 0, 512)
'// used to build the stbFileName from the aryFileGroupDescriptor block
Dim stbFileName As System.Text.StringBuilder = New System.Text.StringBuilder("")
'// this trick gets the stbFileName of the passed attached file
Dim intCnt As Integer = 76
Do While aryFileGroupDescriptor(intCnt) <> 0
stbFileName.Append(Convert.ToChar(aryFileGroupDescriptor(intCnt), System.Globalization.CultureInfo.CreateSpecificCulture("de-DE")))
intCnt += 1
Loop
stmInput.Close()
Dim anhaenge = e.Data.GetDataPresent("FileContents")
'Dim path As String = "C:\VBProjekte\Dateien"
'// put the zip file into the temp directory
Dim strOutFile As String = Path.GetTempPath() & stbFileName.ToString()
'// create the full-path name
'//
'// Second step: we have the file name.
'// Now we need to get the actual raw
'// data for the attached file and copy it to disk so we work on it.
'//
'// get the actual raw file into memory
Dim msInput As IO.MemoryStream = CType(e.Data.GetData("FileContents", True), IO.MemoryStream) 'This returns nothing for an Email
If msInput Is Nothing = False Then
LOGGER.Debug("Drag of Outlook Attachment")
'// allocate enough bytes to hold the raw date
Dim aryFileBytes(CType(msInput.Length, Int32)) As Byte
'// set starting position at first byte and read in the raw data
msInput.Position = 0
msInput.Read(aryFileBytes, 0, CType(msInput.Length, Int32))
'// create a file and save the raw zip file to it
Dim fsOutput As IO.FileStream = New IO.FileStream(strOutFile, IO.FileMode.Create) ';
fsOutput.Write(aryFileBytes, 0, aryFileBytes.Length)
fsOutput.Close() ' // close the file
Dim resultVersion = ClassHelper.Versionierung_Datei(strOutFile)
If resultVersion <> "" Then
strOutFile = resultVersion
End If
Dim finTemp As IO.FileInfo = New IO.FileInfo(strOutFile)
'// always good to make sure we actually created the file
If (finTemp.Exists = True) Then
ReDim Preserve files_dropped(0)
files_dropped(0) = "@OUTLOOK_ATTACHMENT@" & strOutFile
LOGGER.Debug("Drop an Attachment - File: " & strOutFile)
Return True
Else
LOGGER.Warn("Attachment File from Outlook could not be created")
End If
Else
LOGGER.Warn("No simple drag and drop.", True)
For Each fmt As String In e.Data.GetFormats()
' Output format name and type
LOGGER.Warn("e.Data is: " & fmt + " (" +
e.Data.GetData(fmt).ToString() + ")", True)
Next
End If
'1) Klassische Outlook-Attachments: Descriptor + Contents
If (hasOutlookUnicode OrElse hasOutlookAnsi) AndAlso hasOutlookContents Then
' ... dein bestehender Descriptor/Contents-Code ...
' Return True wenn erfolgreich
End If
If e.Data.GetDataPresent("FileGroupDescriptor") Then
Dim oApp
'2) ATTACHMENT oder komplette Mail aus Outlook/WebView2: KEIN Descriptor+Contents, ABER FileDrop vorhanden
' => zuerst FileDrop verarbeiten. Wenn leer (delayed rendering), dann Fallback über Outlook COM Selection/Inspector
If hasFileDrop AndAlso (hasChromiumMime OrElse hasFileNameW) AndAlso Not hasOutlookContents Then
LOGGER?.Debug("WebView2/Outlook Attachment or Mail: try FileDrop, skip Outlook COM initially")
Dim ok As Boolean = HandleFileDrop(e)
If ok Then Return True
' FileDrop leer -> Fallback: versuche ausgewählte Mail via Outlook COM zu speichern
LOGGER?.Warn("FileDrop vorhanden, aber leer. Fallback auf Outlook COM für komplette Mail.")
ScheduleOutlookComFallback()
Return True ' Wichtig: UI-Thread nicht blockieren; wir verarbeiten asynchron.
End If
'3) Outlook Mail (.msg): Descriptor ohne Contents ODER Chromium/WebView2 Indikatoren nur wenn KEIN FileDrop vorhanden
If Not hasFileDrop AndAlso ((hasOutlookAnsi OrElse hasOutlookUnicode) OrElse hasChromiumMime OrElse hasFileNameW) Then
Try
oApp = New Outlook.Application()
Catch ex As Exception
MsgBox("Unexpected error in Initialisieren von Outlook-API:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Evtl ist Outlook nicht in der dafür vorgesehenen For")
Return False
End Try
LOGGER.Debug("Drop of msg")
'supports a drop of a Outlook message
Dim myobj As Object
For i As Integer = 1 To oApp.ActiveExplorer.Selection.Count
myobj = oApp.ActiveExplorer.Selection.Item(i)
Dim subj As String = myobj.Subject
If subj = "" Then
subj = "NO_SUBJECT"
End If
If subj.Contains("\") Then
subj = subj.Replace("\", "-")
End If
If subj.Contains("/") Then
subj = subj.Replace("/", "-")
End If
'hardcode a destination path for testing
Dim strFile As String = IO.Path.Combine(Path.GetTempPath, (subj + ".msg").Replace(":", ""))
strFile = strFile.Replace("?", "")
strFile = strFile.Replace("!", "")
strFile = strFile.Replace("%", "")
strFile = strFile.Replace("$", "")
LOGGER.Info("Drop of msg - File:" & strFile)
Dim oApp As Outlook.Application = Nothing
Try
myobj.SaveAs(strFile)
Catch ex As Exception
MsgBox("Error in Save Email2Tempfile" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
oApp = New Outlook.Application()
Catch ex As System.Exception
MsgBox("Fehler beim Initialisieren der Outlook-API:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
GoTo CheckFileDrop
End Try
ReDim Preserve files_dropped(i)
files_dropped(i) = "@OUTLOOK_MESSAGE@" & strFile
Next
Return True
'Drop eines Outlook Attachments
Dim explorer = oApp.ActiveExplorer
If explorer IsNot Nothing AndAlso explorer.Selection IsNot Nothing AndAlso explorer.Selection.Count > 0 Then
LOGGER?.Debug("Drop of msg (Outlook Explorer Selection)")
For i As Integer = 1 To explorer.Selection.Count
Dim myobj As Object = explorer.Selection.Item(i)
If myobj Is Nothing Then Continue For
SaveMailItemToTemp(myobj)
Next
Return True
Else
Dim inspector = oApp.ActiveInspector
If inspector IsNot Nothing AndAlso inspector.CurrentItem IsNot Nothing Then
LOGGER?.Debug("Drop of msg (ActiveInspector.CurrentItem) Fallback")
SaveMailItemToTemp(inspector.CurrentItem)
Return True
Else
LOGGER?.Warn("Outlook: Keine Auswahl im Explorer und kein ActiveInspector.CurrentItem verfügbar.")
' Namen loggen aber zurück zum FileDrop-Fallback
If hasFileNameW Then
Dim namesObj As Object = e.Data.GetData(If(e.Data.GetDataPresent("FileNameW"), "FileNameW", "FileName"), True)
Dim names As String() = TryCast(namesObj, String())
If names Is Nothing Then
Dim nameSingle As String = TryCast(namesObj, String)
If Not String.IsNullOrWhiteSpace(nameSingle) Then
LOGGER?.Warn("Vorgeschlagener Name (ohne Inhalt): " & nameSingle)
End If
Else
LOGGER?.Warn("Vorgeschlagene Namen (ohne Inhalt): " & String.Join("; ", names))
End If
End If
GoTo CheckFileDrop
End If
End If
Catch ex As System.Exception
LOGGER?.Warn("Outlook MSG-Drop Fehler: " & ex.Message)
End Try
End If
Catch ex As Exception
CheckFileDrop:
'4) Filesystem FileDrop (klassisch ODER WebView2 delayed rendering)
If hasFileDrop Then
If HandleFileDrop(e) Then Return True
ScheduleOutlookComFallback()
Return True
End If
'5) SCAN-StringFormat
If e.Data.GetDataPresent(DataFormats.StringFormat) Then
Dim Wert As String = TryCast(e.Data.GetData(DataFormats.StringFormat), String)
If Not String.IsNullOrEmpty(Wert) Then
Dim idx As Integer = files_dropped.Length
ReDim Preserve files_dropped(idx)
files_dropped(idx) = "@SCAN@" & Wert
Return True
End If
End If
Catch ex As System.Exception
MsgBox("Unexpected Error in Drop_File: " & ex.Message, MsgBoxStyle.Critical)
End Try
If e.Data.GetDataPresent(DataFormats.StringFormat) Then
Dim Wert As String = CType(e.Data.GetData(DataFormats.StringFormat), Object)
Console.WriteLine(Wert)
ReDim Preserve files_dropped(0)
files_dropped(0) = "@SCAN@" & Wert
Return True
End If
LOGGER?.Warn("Drop_File: Kein extrahierbarer Inhalt. Bitte Attachment aus der Nachrichtenliste ziehen oder zunächst speichern.")
Return False
End Function
' FileDrop defensiv behandeln erst ohne, dann mit autoConvert
Private Shared Function HandleFileDrop(e As DragEventArgs) As Boolean
Try
' Versuch1: ohne AutoConvert
Dim rawObj As Object = e.Data.GetData(DataFormats.FileDrop)
Dim rawFiles As String() = TryCast(rawObj, String())
If Not (rawFiles Is Nothing OrElse rawFiles.Length = 0) Then
For Each f In rawFiles
LOGGER?.Info("FileDrop (raw) - File: " & f)
AppendDroppedFile("@DROPFROMFSYSTEM@", f)
Next
Return True
End If
' Versuch2: mit AutoConvert (delayed rendering)
Dim convObj As Object = e.Data.GetData(DataFormats.FileDrop, True)
Dim convFiles As String() = TryCast(convObj, String())
If Not (convFiles Is Nothing OrElse convFiles.Length = 0) Then
For Each f In convFiles
LOGGER?.Info("FileDrop (autoConvert) - File: " & f)
AppendDroppedFile("@DROPFROMFSYSTEM@", f)
Next
Return True
End If
LOGGER?.Warn("FileDrop vorhanden, aber keine Dateien (raw/autoConvert leer).")
Return False
Catch ex As System.Exception
LOGGER?.Warn("HandleFileDrop Fehler: " & ex.Message)
Return False
End Try
End Function
Private Shared Sub AppendDroppedFile(prefix As String, filePath As String)
Dim idx As Integer = files_dropped.Length
ReDim Preserve files_dropped(idx)
files_dropped(idx) = prefix & filePath
End Sub
Private Shared Sub SaveMailItemToTemp(ByVal mailObj As Object)
Dim subj As String = ""
Try
subj = mailObj.Subject
Catch
subj = "NO_SUBJECT"
End Try
If String.IsNullOrWhiteSpace(subj) Then subj = "NO_SUBJECT"
Dim safeName = subj.Replace("\", "-").Replace("/", "-").Replace(":", "") _
.Replace("?", "").Replace("!", "").Replace("%", "").Replace("$", "")
Dim strFile As String = IO.Path.Combine(Path.GetTempPath(), safeName & ".msg")
LOGGER?.Info("Drop of msg - File:" & strFile)
Try
mailObj.SaveAs(strFile)
AppendDroppedFile("@OUTLOOK_MESSAGE@", strFile)
Catch ex As System.Exception
MsgBox("Error in Save Email2Tempfile" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Shared Sub ScheduleOutlookComFallback()
Try
Dim t As New Threading.Thread(
Sub()
Try
Threading.Thread.Sleep(200)
Dim maxRetries As Integer = 10
Dim saved As Boolean = False
For attempt As Integer = 1 To maxRetries
If TrySaveSelectedMailViaOutlook() Then
LOGGER?.Info("Outlook COM Fallback: Mail gespeichert. Versuch " & attempt)
saved = True
Exit For
End If
LOGGER?.Debug("Outlook COM Fallback: Keine Auswahl, Retry " & attempt)
Threading.Thread.Sleep(200)
Next
If saved Then
' UI-Thread benachrichtigen
Dim uiForm = If(System.Windows.Forms.Application.OpenForms.Count > 0, System.Windows.Forms.Application.OpenForms(0), Nothing)
If uiForm IsNot Nothing Then
uiForm.BeginInvoke(
Sub()
Try
RaiseEvent FilesDroppedReady(files_dropped)
Catch ex2 As System.Exception
LOGGER?.Warn("FilesDroppedReady Invoke Fehler: " & ex2.Message)
End Try
End Sub)
Else
' Falls kein Form verfügbar, zumindest Event auslösen (Listener müssen ggf. selbst marshalen)
RaiseEvent FilesDroppedReady(files_dropped)
End If
Else
LOGGER?.Warn("Outlook COM Fallback: Nach Retries keine Mail gespeichert.")
End If
Catch ex As System.Exception
LOGGER?.Warn("Outlook COM Fallback Thread Fehler: " & ex.Message)
End Try
End Sub
)
t.IsBackground = True
t.SetApartmentState(Threading.ApartmentState.STA)
t.Start()
Catch ex As System.Exception
LOGGER?.Warn("ScheduleOutlookComFallback Fehler: " & ex.Message)
End Try
End Sub
Private Shared Function TrySaveSelectedMailViaOutlook() As Boolean
Try
Dim oApp As Outlook.Application = Nothing
Try
oApp = New Outlook.Application()
Catch ex As System.Exception
LOGGER?.Warn("Outlook COM Init fehlgeschlagen: " & ex.Message)
Return False
End Try
Dim savedAny As Boolean = False
Dim inspector = oApp.ActiveInspector
If inspector IsNot Nothing AndAlso inspector.CurrentItem IsNot Nothing Then
LOGGER?.Debug("Fallback: ActiveInspector.CurrentItem speichern")
SaveMailItemToTemp(inspector.CurrentItem)
savedAny = True
End If
If Not savedAny Then
Dim explorer = oApp.ActiveExplorer
If explorer IsNot Nothing AndAlso explorer.Selection IsNot Nothing AndAlso explorer.Selection.Count > 0 Then
LOGGER?.Debug("Fallback: Explorer.Selection speichern")
For i As Integer = 1 To explorer.Selection.Count
Dim myobj As Object = explorer.Selection.Item(i)
If myobj Is Nothing Then Continue For
SaveMailItemToTemp(myobj)
savedAny = True
Next
End If
End If
Return savedAny
Catch ex As System.Exception
LOGGER?.Warn("TrySaveSelectedMailViaOutlook Fehler: " & ex.Message)
Return False
End Try
End Function
Public Shared Sub Drag_enter(e As DragEventArgs)
Try
My.Settings.WD_INDEXDOKART_SAVE = ""
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
LOGGER.Debug("DragEnter ... SimpleFileDrop")
'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... SimpleFileDrop")
ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
Dim hasOutlookDescriptor As Boolean = hasOutlookUnicode OrElse hasOutlookAnsi
Dim hasChromiumMime As Boolean = e.Data.GetDataPresent("Chromium Web Custom MIME Data Format")
Dim hasFileNameW As Boolean = e.Data.GetDataPresent("FileNameW") OrElse e.Data.GetDataPresent("FileName")
Dim hasOutlookLike As Boolean = hasOutlookDescriptor OrElse hasChromiumMime OrElse hasFileNameW
Dim hasFileDrop As Boolean = e.Data.GetDataPresent(DataFormats.FileDrop)
If hasOutlookLike Then
e.Effect = DragDropEffects.Copy
'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... Attachment from Outlook")
LOGGER.Debug("DragEnter ... Attachment from Outlook")
ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
'handle a message dragged from Outlook
LOGGER?.Debug("DragEnter ... Outlook/WebView2 erkannt (Descriptor/Chromium/FileNameW)")
ElseIf hasFileDrop Then
e.Effect = DragDropEffects.Copy
'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... OutlookMessage")
LOGGER.Debug("DragEnter ... OutlookMessage")
LOGGER?.Debug("DragEnter ... SimpleFileDrop")
Else
'otherwise, do not handle
e.Effect = DragDropEffects.Copy
'frmForm_Constructor.tslblStatusMain_show(True, "DragEnter ... Other FileFormat")
LOGGER.Debug("DragEnter ... Other FileFormat")
e.Effect = DragDropEffects.None
LOGGER?.Debug("DragEnter ... Other FileFormat")
End If
Catch ex As Exception
LOGGER?.Debug("DragEnter Formats: " & String.Join(", ", e.Data.GetFormats()))
Catch ex As System.Exception
End Try
End Sub
End Class

View File

@@ -33,7 +33,7 @@
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
@@ -70,6 +70,27 @@
<PropertyGroup>
<ApplicationIcon>ORGFLOW_Icon_256x256.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\x64\Debug\</OutputPath>
<DocumentationFile>orgFLOW.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DefineTrace>true</DefineTrace>
<OutputPath>bin\x64\Release\</OutputPath>
<DocumentationFile>orgFLOW.xml</DocumentationFile>
<Optimize>true</Optimize>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<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>
@@ -172,9 +193,9 @@
<Reference Include="DevExpress.XtraWizard.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DigitalData.Controls.DocumentViewer, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="DigitalData.Controls.DocumentViewer, Version=2.6.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\2_DLL Projekte\DDMonorepo\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll</HintPath>
<HintPath>..\..\..\..\2_DLL Projekte\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll</HintPath>
</Reference>
<Reference Include="DigitalData.GUIs.Common">
<HintPath>..\..\..\..\2_DLL Projekte\DDMonorepo\GUIs.Common\bin\Debug\DigitalData.GUIs.Common.dll</HintPath>
@@ -1747,6 +1768,10 @@
</PropertyGroup>
<Error Condition="!Exists('..\packages\GdPicture.runtimes.windows.14.3.3\build\net462\GdPicture.runtimes.windows.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GdPicture.runtimes.windows.14.3.3\build\net462\GdPicture.runtimes.windows.targets'))" />
</Target>
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@@ -99,7 +99,7 @@ Public Class frmDocSearchResult
Refresh_DocID()
If SplitContainerControl1.Collapsed = False Then
Dim OFilePath = ClassHelper.FORMAT_WM_PATH(SelectedFULL_FILEPATH)
DocumentViewer1.LoadFile(OFilePath)
DocumentViewer1.LoadFile_FromPath(OFilePath)
End If
End Sub
Sub Refresh_DocID()

View File

@@ -52,6 +52,8 @@ Partial Class frmGlobalSearch
Me.BarToggleSearchCombined = New DevExpress.XtraBars.BarToggleSwitchItem()
Me.BarToggleSearchRecord = New DevExpress.XtraBars.BarToggleSwitchItem()
Me.BarToggleFulltext = New DevExpress.XtraBars.BarToggleSwitchItem()
Me.bbtnitmJump2Filestore = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupRecords = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
@@ -62,8 +64,6 @@ Partial Class frmGlobalSearch
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.DD_ECMAdmin1 = New DD_Record_Organizer.DD_ECMAdmin()
Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components)
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
CType(Me.SplitContainerMain, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerMain.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerMain.Panel1.SuspendLayout()
@@ -223,7 +223,7 @@ Partial Class frmGlobalSearch
'RibbonControl1
'
Me.RibbonControl1.ExpandCollapseItem.Id = 0
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.bsiInfo, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarButtonItem6, Me.BarButtonItem7, Me.BarButtonItem8, Me.BarButtonItem9, Me.BarButtonItem10, Me.BarToggleSearchCombined, Me.BarToggleSearchRecord, Me.BarToggleFulltext, Me.BarButtonItem1, Me.BarButtonItem2})
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.bsiInfo, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarButtonItem6, Me.BarButtonItem7, Me.BarButtonItem8, Me.BarButtonItem9, Me.BarButtonItem10, Me.BarToggleSearchCombined, Me.BarToggleSearchRecord, Me.BarToggleFulltext, Me.bbtnitmJump2Filestore, Me.BarButtonItem2})
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
Me.RibbonControl1.MaxItemId = 17
Me.RibbonControl1.Name = "RibbonControl1"
@@ -307,6 +307,20 @@ Partial Class frmGlobalSearch
Me.BarToggleFulltext.Id = 14
Me.BarToggleFulltext.Name = "BarToggleFulltext"
'
'bbtnitmJump2Filestore
'
resources.ApplyResources(Me.bbtnitmJump2Filestore, "bbtnitmJump2Filestore")
Me.bbtnitmJump2Filestore.Id = 15
Me.bbtnitmJump2Filestore.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.bbtnitmJump2Filestore.Name = "bbtnitmJump2Filestore"
'
'BarButtonItem2
'
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
Me.BarButtonItem2.Id = 16
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem2.Name = "BarButtonItem2"
'
'RibbonPage1
'
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroupRecords, Me.RibbonPageGroupFiles, Me.RibbonPageGroupExcel, Me.RibbonPageGroup3})
@@ -337,7 +351,7 @@ Partial Class frmGlobalSearch
Me.RibbonPageGroupFiles.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroupFiles.ItemLinks.Add(Me.BarButtonItem8)
Me.RibbonPageGroupFiles.ItemLinks.Add(Me.BarButtonItem10)
Me.RibbonPageGroupFiles.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroupFiles.ItemLinks.Add(Me.bbtnitmJump2Filestore)
Me.RibbonPageGroupFiles.Name = "RibbonPageGroupFiles"
resources.ApplyResources(Me.RibbonPageGroupFiles, "RibbonPageGroupFiles")
'
@@ -380,20 +394,6 @@ Partial Class frmGlobalSearch
Me.XtraSaveFileDialog1.FileName = "XtraSaveFileDialog1"
resources.ApplyResources(Me.XtraSaveFileDialog1, "XtraSaveFileDialog1")
'
'BarButtonItem1
'
resources.ApplyResources(Me.BarButtonItem1, "BarButtonItem1")
Me.BarButtonItem1.Id = 15
Me.BarButtonItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem1.Name = "BarButtonItem1"
'
'BarButtonItem2
'
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
Me.BarButtonItem2.Id = 16
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem2.Name = "BarButtonItem2"
'
'frmGlobalSearch
'
resources.ApplyResources(Me, "$this")
@@ -469,6 +469,6 @@ Partial Class frmGlobalSearch
Friend WithEvents BarToggleFulltext As DevExpress.XtraBars.BarToggleSwitchItem
Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents LabelControl1 As DevExpress.XtraEditors.LabelControl
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents bbtnitmJump2Filestore As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
End Class

View File

@@ -123,7 +123,7 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="SplitContainerMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 237</value>
<value>0, 248</value>
</data>
<data name="GridControlRecords.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@@ -135,7 +135,7 @@
<value>orgFLOW-Datensätze</value>
</data>
<data name="GridControlRecords.Size" type="System.Drawing.Size, System.Drawing">
<value>616, 412</value>
<value>616, 402</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="GridControlRecords.TabIndex" type="System.Int32, mscorlib">
@@ -205,7 +205,7 @@
<value>Dateien</value>
</data>
<data name="GridControlFiles.Size" type="System.Drawing.Size, System.Drawing">
<value>839, 412</value>
<value>841, 402</value>
</data>
<data name="GridControlFiles.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
@@ -232,7 +232,7 @@
<value>0, 0</value>
</data>
<data name="ToolStripDokumente.Size" type="System.Drawing.Size, System.Drawing">
<value>839, 25</value>
<value>841, 25</value>
</data>
<data name="ToolStripDokumente.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@@ -268,7 +268,7 @@
<value>1</value>
</data>
<data name="SplitContainerMain.Size" type="System.Drawing.Size, System.Drawing">
<value>1467, 437</value>
<value>1467, 427</value>
</data>
<data name="SplitContainerMain.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@@ -330,78 +330,6 @@
<data name="&gt;&gt;Label1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;LabelControl1.Name" xml:space="preserve">
<value>LabelControl1</value>
</data>
<data name="&gt;&gt;LabelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;LabelControl1.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;LabelControl1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;lblFT_Irregular.Name" xml:space="preserve">
<value>lblFT_Irregular</value>
</data>
<data name="&gt;&gt;lblFT_Irregular.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblFT_Irregular.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;lblFT_Irregular.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;txtSearch.Name" xml:space="preserve">
<value>txtSearch</value>
</data>
<data name="&gt;&gt;txtSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtSearch.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;txtSearch.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;Label2.Name" xml:space="preserve">
<value>Label2</value>
</data>
<data name="&gt;&gt;Label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Label2.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;Label2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="Panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="Panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 147</value>
</data>
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>1467, 90</value>
</data>
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;Panel1.Name" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Panel1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LabelControl1.Appearance.Font" type="System.Drawing.Font, System.Drawing">
<value>Tahoma, 8.25pt, style=Italic</value>
</data>
@@ -510,6 +438,30 @@
<data name="&gt;&gt;Label2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="Panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="Panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 158</value>
</data>
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>1467, 90</value>
</data>
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;Panel1.Name" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Panel1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="bsiInfo.ItemAppearance.Normal.Font" type="System.Drawing.Font, System.Drawing">
<value>Tahoma, 8.25pt, style=Bold, Italic</value>
</data>
@@ -735,7 +687,7 @@
<data name="BarToggleFulltext.Caption" xml:space="preserve">
<value>Nur in Volltext</value>
</data>
<data name="BarButtonItem1.Caption" xml:space="preserve">
<data name="bbtnitmJump2Filestore.Caption" xml:space="preserve">
<value>Springe zu Filestore</value>
</data>
<data name="BarButtonItem1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -786,32 +738,17 @@
<data name="RibbonControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="RibbonPageGroup1.Text" xml:space="preserve">
<value>Aktionen</value>
</data>
<data name="RibbonPageGroupRecords.Text" xml:space="preserve">
<value>Datensatz</value>
</data>
<data name="RibbonPageGroupFiles.Text" xml:space="preserve">
<value>Datei(en)</value>
</data>
<data name="RibbonPageGroupExcel.Text" xml:space="preserve">
<value>Funktionen Tabelle</value>
</data>
<data name="RibbonPageGroup3.Text" xml:space="preserve">
<value>Suchvariante</value>
</data>
<data name="RibbonPage1.Text" xml:space="preserve">
<value>Globale Suche</value>
</data>
<data name="RibbonControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>1467, 147</value>
<value>1467, 158</value>
</data>
<data name="RibbonStatusBar1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 674</value>
<value>0, 675</value>
</data>
<data name="RibbonStatusBar1.Size" type="System.Drawing.Size, System.Drawing">
<value>1467, 23</value>
<value>1467, 22</value>
</data>
<data name="&gt;&gt;RibbonStatusBar1.Name" xml:space="preserve">
<value>RibbonStatusBar1</value>
@@ -837,6 +774,21 @@
<data name="&gt;&gt;RibbonControl1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="RibbonPageGroup1.Text" xml:space="preserve">
<value>Aktionen</value>
</data>
<data name="RibbonPageGroupRecords.Text" xml:space="preserve">
<value>Datensatz</value>
</data>
<data name="RibbonPageGroupFiles.Text" xml:space="preserve">
<value>Datei(en)</value>
</data>
<data name="RibbonPageGroupExcel.Text" xml:space="preserve">
<value>Funktionen Tabelle</value>
</data>
<data name="RibbonPageGroup3.Text" xml:space="preserve">
<value>Suchvariante</value>
</data>
<data name="RibbonPage2.Text" xml:space="preserve">
<value>RibbonPage2</value>
</data>
@@ -1009,6 +961,18 @@
<data name="&gt;&gt;BarToggleFulltext.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarToggleSwitchItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;bbtnitmJump2Filestore.Name" xml:space="preserve">
<value>bbtnitmJump2Filestore</value>
</data>
<data name="&gt;&gt;bbtnitmJump2Filestore.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Name" xml:space="preserve">
<value>BarButtonItem2</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RibbonPage1.Name" xml:space="preserve">
<value>RibbonPage1</value>
</data>
@@ -1063,18 +1027,6 @@
<data name="&gt;&gt;XtraSaveFileDialog1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraSaveFileDialog, DevExpress.XtraDialogs.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;BarButtonItem1.Name" xml:space="preserve">
<value>BarButtonItem1</value>
</data>
<data name="&gt;&gt;BarButtonItem1.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Name" xml:space="preserve">
<value>BarButtonItem2</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>frmGlobalSearch</value>
</data>

View File

@@ -289,7 +289,11 @@ Public Class frmGlobalSearch
End Function
Private Sub frmSearchAllOVer_Load(sender As Object, e As EventArgs) Handles Me.Load
If OF_FILESTORE_ENTITY = 0 Then
bbtnitmJump2Filestore.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Else
bbtnitmJump2Filestore.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
End If
_Helper = New ClassHelper
Load_DocGrid_Layout()
Load_RecordGrid_Layout()
@@ -408,7 +412,7 @@ Public Class frmGlobalSearch
End Sub
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmJump2Filestore.ItemClick
For Each row In GridViewFiles.GetSelectedRows
Dim SELECTED_DOC_ID = GridViewFiles.GetRowCellValue(row, "DocID")
Dim oJumpToDocSQL = String.Format("DECLARE @PID BIGINT

View File

@@ -46,15 +46,12 @@ Partial Class frmNodeNavigation
Me.tsitmDMSReadOnly = New DevExpress.XtraBars.BarStaticItem()
Me.bsiNotification = New DevExpress.XtraBars.BarStaticItem()
Me.bsiDocIDChanged = New DevExpress.XtraBars.BarStaticItem()
Me.BarEditItem1 = New DevExpress.XtraBars.BarEditItem()
Me.RepositoryItemTextEdit1 = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit()
Me.FindNode = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RPGNodes = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupRecord = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupDocResult = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.SplitContainerTreeList = New DevExpress.XtraEditors.SplitContainerControl()
@@ -169,7 +166,7 @@ Partial Class frmNodeNavigation
'ribbonNodeNavigation
'
Me.ribbonNodeNavigation.ExpandCollapseItem.Id = 0
Me.ribbonNodeNavigation.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.ribbonNodeNavigation.ExpandCollapseItem, Me.ribbonNodeNavigation.SearchEditItem, Me.bbtnitmRecEdit, Me.bsiInfo, Me.bbtnitmRecSave, Me.bsiDocID, Me.bsitmRecordID, Me.bbtnitmDocResultExport, Me.bbtnitmDocResultLayoutSave, Me.bbtnitmDocResultLayoutReset, Me.bbtnitmDocResultRefresh, Me.BarStaticItemLocked, Me.bsitmtInfoDoc, Me.BarButtonItem1, Me.bbtnitmReloadView, Me.BbtnitmNodeReorder, Me.bbtnItm_TV_Collape_Expand, Me.checkShowPreview, Me.btnCreateNewNode, Me.tsitmDMSReadOnly, Me.bsiNotification, Me.bsiDocIDChanged, Me.BarEditItem1, Me.FindNode})
Me.ribbonNodeNavigation.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.ribbonNodeNavigation.ExpandCollapseItem, Me.ribbonNodeNavigation.SearchEditItem, Me.bbtnitmRecEdit, Me.bsiInfo, Me.bbtnitmRecSave, Me.bsiDocID, Me.bsitmRecordID, Me.bbtnitmDocResultExport, Me.bbtnitmDocResultLayoutSave, Me.bbtnitmDocResultLayoutReset, Me.bbtnitmDocResultRefresh, Me.BarStaticItemLocked, Me.bsitmtInfoDoc, Me.BarButtonItem1, Me.bbtnitmReloadView, Me.BbtnitmNodeReorder, Me.bbtnItm_TV_Collape_Expand, Me.checkShowPreview, Me.btnCreateNewNode, Me.tsitmDMSReadOnly, Me.bsiNotification, Me.bsiDocIDChanged})
Me.ribbonNodeNavigation.Location = New System.Drawing.Point(0, 0)
Me.ribbonNodeNavigation.MaxItemId = 30
Me.ribbonNodeNavigation.Name = "ribbonNodeNavigation"
@@ -181,7 +178,7 @@ Partial Class frmNodeNavigation
Me.ribbonNodeNavigation.ShowExpandCollapseButton = DevExpress.Utils.DefaultBoolean.[True]
Me.ribbonNodeNavigation.ShowMoreCommandsButton = DevExpress.Utils.DefaultBoolean.[False]
Me.ribbonNodeNavigation.ShowToolbarCustomizeItem = False
Me.ribbonNodeNavigation.Size = New System.Drawing.Size(1151, 147)
Me.ribbonNodeNavigation.Size = New System.Drawing.Size(1151, 158)
Me.ribbonNodeNavigation.StatusBar = Me.RibbonStatusBar1
Me.ribbonNodeNavigation.Toolbar.ShowCustomizeItem = False
'
@@ -336,27 +333,14 @@ Partial Class frmNodeNavigation
Me.bsiDocIDChanged.Name = "bsiDocIDChanged"
Me.bsiDocIDChanged.Visibility = DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing
'
'BarEditItem1
'
Me.BarEditItem1.Caption = "NodeGUID"
Me.BarEditItem1.Edit = Me.RepositoryItemTextEdit1
Me.BarEditItem1.Id = 28
Me.BarEditItem1.Name = "BarEditItem1"
'
'RepositoryItemTextEdit1
'
Me.RepositoryItemTextEdit1.AutoHeight = False
Me.RepositoryItemTextEdit1.Name = "RepositoryItemTextEdit1"
'
'FindNode
'
Me.FindNode.Caption = "BarButtonItem19"
Me.FindNode.Id = 29
Me.FindNode.Name = "FindNode"
'
'RibbonPage1
'
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RPGNodes, Me.RibbonPageGroupRecord, Me.RibbonPageGroupDocResult, Me.RibbonPageGroup2})
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RPGNodes, Me.RibbonPageGroupRecord, Me.RibbonPageGroupDocResult})
Me.RibbonPage1.Name = "RibbonPage1"
Me.RibbonPage1.Text = "Node Navigation"
'
@@ -395,13 +379,6 @@ Partial Class frmNodeNavigation
Me.RibbonPageGroupDocResult.Name = "RibbonPageGroupDocResult"
Me.RibbonPageGroupDocResult.Text = "Dateien"
'
'RibbonPageGroup2
'
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarEditItem1)
Me.RibbonPageGroup2.ItemLinks.Add(Me.FindNode)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
Me.RibbonPageGroup2.Text = "RibbonPageGroup2"
'
'RibbonStatusBar1
'
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsiInfo)
@@ -412,10 +389,10 @@ Partial Class frmNodeNavigation
Me.RibbonStatusBar1.ItemLinks.Add(Me.BarStaticItemLocked)
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmtInfoDoc)
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsiDocIDChanged)
Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 566)
Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 567)
Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
Me.RibbonStatusBar1.Ribbon = Me.ribbonNodeNavigation
Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 23)
Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 22)
'
'RibbonPage2
'
@@ -437,7 +414,7 @@ Partial Class frmNodeNavigation
'
Me.SplitContainerTreeList.Panel2.Controls.Add(Me.SplitContainerDocumentSearch)
Me.SplitContainerTreeList.Panel2.Text = "Panel2"
Me.SplitContainerTreeList.Size = New System.Drawing.Size(776, 419)
Me.SplitContainerTreeList.Size = New System.Drawing.Size(776, 409)
Me.SplitContainerTreeList.SplitterPosition = 229
Me.SplitContainerTreeList.TabIndex = 2
'
@@ -479,7 +456,7 @@ Partial Class frmNodeNavigation
Me.TreeListDevexpress.OptionsView.ShowVertLines = False
Me.TreeListDevexpress.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Dark
Me.TreeListDevexpress.ParentFieldName = "PARENT_GUID"
Me.TreeListDevexpress.Size = New System.Drawing.Size(229, 419)
Me.TreeListDevexpress.Size = New System.Drawing.Size(229, 409)
Me.TreeListDevexpress.StateImageList = Me.ImageCollection1
Me.TreeListDevexpress.TabIndex = 1
'
@@ -503,7 +480,7 @@ Partial Class frmNodeNavigation
'
Me.SplitContainerDocumentSearch.Panel2.Controls.Add(Me.GridControlDocSearch)
Me.SplitContainerDocumentSearch.Panel2.Text = "Panel2"
Me.SplitContainerDocumentSearch.Size = New System.Drawing.Size(535, 419)
Me.SplitContainerDocumentSearch.Size = New System.Drawing.Size(537, 409)
Me.SplitContainerDocumentSearch.SplitterPosition = 133
Me.SplitContainerDocumentSearch.TabIndex = 1
'
@@ -514,7 +491,7 @@ Partial Class frmNodeNavigation
Me.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill
Me.pnlControls.Location = New System.Drawing.Point(0, 0)
Me.pnlControls.Name = "pnlControls"
Me.pnlControls.Size = New System.Drawing.Size(535, 133)
Me.pnlControls.Size = New System.Drawing.Size(537, 133)
Me.pnlControls.TabIndex = 0
'
'GridControlDocSearch
@@ -528,7 +505,7 @@ Partial Class frmNodeNavigation
Me.GridControlDocSearch.Location = New System.Drawing.Point(0, 0)
Me.GridControlDocSearch.MainView = Me.GridViewDoc_Search
Me.GridControlDocSearch.Name = "GridControlDocSearch"
Me.GridControlDocSearch.Size = New System.Drawing.Size(535, 274)
Me.GridControlDocSearch.Size = New System.Drawing.Size(537, 266)
Me.GridControlDocSearch.TabIndex = 8
Me.GridControlDocSearch.TabStop = False
Me.GridControlDocSearch.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewDoc_Search})
@@ -538,7 +515,7 @@ Partial Class frmNodeNavigation
Me.cmsResultFileDetail.ImageScalingSize = New System.Drawing.Size(18, 18)
Me.cmsResultFileDetail.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsmiFileProperties, Me.ToolStripSeparator5, Me.tsmiFileOpen, Me.tsmiFileFolderOpen, Me.ToolStripSeparator1, Me.tsmiFileInWorkMultiple_Lock, Me.tsmiFileInWorkMultiple_Free, Me.tsmiFileInWork, Me.ToolStripSeparator3, Me.tsmiFileLink_Add, Me.tsmiFileLinkRemove, Me.tsmiFileLink_ShowAll, Me.TsmitmJumpToFilestore, Me.LinkPerMailVersendenToolStripMenuItem, Me.ToolStripSeparator2, Me.tsmiFileRename, Me.DokumentartÄndernToolStripMenuItem, Me.tsmiFileVersion, Me.tsmiFileRightsShow, Me.ToolStripSeparator4, Me.tsmiFileDelete})
Me.cmsResultFileDetail.Name = "ContextMenuStripResultFiles"
Me.cmsResultFileDetail.Size = New System.Drawing.Size(315, 440)
Me.cmsResultFileDetail.Size = New System.Drawing.Size(315, 418)
'
'tsmiFileProperties
'
@@ -754,7 +731,7 @@ Partial Class frmNodeNavigation
'
Me.SplitContainerDocView.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
Me.SplitContainerDocView.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainerDocView.Location = New System.Drawing.Point(0, 147)
Me.SplitContainerDocView.Location = New System.Drawing.Point(0, 158)
Me.SplitContainerDocView.Name = "SplitContainerDocView"
'
'SplitContainerDocView.Panel1
@@ -766,7 +743,7 @@ Partial Class frmNodeNavigation
'
Me.SplitContainerDocView.Panel2.Controls.Add(Me.DocumentViewer)
Me.SplitContainerDocView.Panel2.Text = "Panel2"
Me.SplitContainerDocView.Size = New System.Drawing.Size(1151, 419)
Me.SplitContainerDocView.Size = New System.Drawing.Size(1151, 409)
Me.SplitContainerDocView.SplitterPosition = 776
Me.SplitContainerDocView.TabIndex = 0
'
@@ -777,7 +754,7 @@ Partial Class frmNodeNavigation
Me.DocumentViewer.FileLoaded = False
Me.DocumentViewer.Location = New System.Drawing.Point(0, 0)
Me.DocumentViewer.Name = "DocumentViewer"
Me.DocumentViewer.Size = New System.Drawing.Size(363, 419)
Me.DocumentViewer.Size = New System.Drawing.Size(365, 409)
Me.DocumentViewer.TabIndex = 0
Me.DocumentViewer.Viewer_ForceTemporaryMode = False
'
@@ -1242,8 +1219,5 @@ Partial Class frmNodeNavigation
Friend WithEvents DD_DMSDataSet1 As DD_DMSDataSet
Friend WithEvents bsiDocIDChanged As DevExpress.XtraBars.BarStaticItem
Friend WithEvents TsmitmJumpToFilestore As ToolStripMenuItem
Friend WithEvents BarEditItem1 As DevExpress.XtraBars.BarEditItem
Friend WithEvents RepositoryItemTextEdit1 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
Friend WithEvents FindNode As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
End Class

View File

@@ -145,13 +145,14 @@ Public Class frmNodeNavigation
End If
checkShowPreview.Checked = CONFIG.Config.DocumentViewerShown
UpdateDocViewCollapsedState()
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Private Async Function frmNodeNavigation_Load(sender As Object, e As EventArgs) As Task Handles Me.Load
Private Async Sub frmNodeNavigation_Load(sender As Object, e As EventArgs) Handles Me.Load
NNLogger.Debug("Loading NodeNavigation")
CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID
@@ -222,7 +223,13 @@ Public Class frmNodeNavigation
End Try
Await Load_nodes()
End Function
AddHandler ClassDragDrop.FilesDroppedReady, Sub(files As String())
' Hier deine bisherige Verarbeitung von files_dropped triggern.
' Beispiel:
LOGGER?.Info("FilesDroppedReady: " & String.Join("; ", files))
' ... bestehende Routine aufrufen ...
End Sub
End Sub
Private Async Function Load_nodes() As Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
NNLogger.Debug("Loading nodes for entity [{0}]", CURRENT_ENTITY_ID)
@@ -233,32 +240,47 @@ Public Class frmNodeNavigation
Dim oNodeConfigSql = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T.ENTITY_ID = {0}", CURRENT_ENTITY_ID)
Dim DT_TREEVIEW_CONFIGURATION = MYDB_ECM.GetDatatable(oNodeConfigSql)
For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows
Try
Dim bimage = row.ItemEx(Of Object)("NODE_IMAGE", Nothing)
If bimage Is Nothing Then
Continue For
End If
Dim oNodeImage = ByteArrayToBitmap(bimage)
ImageCollection1.AddImage(oNodeImage, row.Item("GUID"))
Catch ex As Exception
NNLogger.Error(ex)
End Try
Next
Dim imageInit = TryCast(ImageCollection1, System.ComponentModel.ISupportInitialize)
If imageInit IsNot Nothing Then
imageInit.BeginInit()
End If
TreeListDevexpress.DataSource = DT_STRUCTURE_NODES
TreeListDevexpress.KeyFieldName = "GUID"
TreeListDevexpress.ParentFieldName = "PARENT_GUID"
TreeListDevexpress.Columns("SEQUENCE").SortOrder = SortOrder.Ascending
TreeListDevexpress.StateImageList = ImageCollection1
Try
For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows
Try
Dim bimage = row.ItemEx(Of Object)("NODE_IMAGE", Nothing)
If bimage Is Nothing Then
Continue For
End If
Dim oVisibleColumns = New List(Of String) From {"NODE_CAPTION"} ', "NAVIGATION_PATH"}
For Each oColumn In TreeListDevexpress.Columns
If oVisibleColumns.Contains(oColumn.FieldName) = False Then
oColumn.Visible = False
Dim oNodeImage = ByteArrayToBitmap(bimage)
ImageCollection1.AddImage(oNodeImage, row.Item("GUID"))
Catch ex As Exception
NNLogger.Error(ex)
End Try
Next
Finally
If imageInit IsNot Nothing Then
imageInit.EndInit()
End If
Next
End Try
TreeListDevexpress.BeginUpdate()
Try
TreeListDevexpress.DataSource = DT_STRUCTURE_NODES
TreeListDevexpress.KeyFieldName = "GUID"
TreeListDevexpress.ParentFieldName = "PARENT_GUID"
TreeListDevexpress.Columns("SEQUENCE").SortOrder = SortOrder.Ascending
TreeListDevexpress.StateImageList = ImageCollection1
Dim oVisibleColumns As New System.Collections.Generic.HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From {"NODE_CAPTION"}
For Each oColumn As TreeListColumn In TreeListDevexpress.Columns
oColumn.Visible = oVisibleColumns.Contains(oColumn.FieldName)
Next
Finally
TreeListDevexpress.EndUpdate()
End Try
JumptoNode()
@@ -319,10 +341,6 @@ Public Class frmNodeNavigation
Exit Sub
End If
MyFocusedNode = Nothing
If btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Then
btnCreateNewNode.Enabled = False
End If
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
Exit Sub
@@ -386,23 +404,23 @@ Public Class frmNodeNavigation
CurrentNodeConfigId = oNodeConfigId
AvailableConfigNodes.Clear()
If btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always And
Not IsNothing(NODE_CONFIGURABLE_NODES_DT) Then
If Not IsNothing(NODE_CONFIGURABLE_NODES_DT) Then
Dim oNodeConfigList = NODE_CONFIGURABLE_NODES_DT.Select($"PARENT_NODE = {oNodeConfigId}").
Cast(Of DataRow).
Select(Function(row) New frmNewNode.NodeConfig() With {
.Id = row.Item("GUID"),
.Name = row.Item("NAME")
}).ToList()
Cast(Of DataRow).
Select(Function(row) New frmNewNode.NodeConfig() With {
.Id = row.Item("GUID"),
.Name = row.Item("NAME")
}).ToList()
AvailableConfigNodes = oNodeConfigList
If AvailableConfigNodes.Count > 0 Then
btnCreateNewNode.Enabled = True
Else
btnCreateNewNode.Enabled = False
End If
End If
NNLogger.Info($"Node changed: NodeID={oNodeConfigId}, NodeGUID={oGuid}, ConfigNodesFound={AvailableConfigNodes.Count}, " &
$"ButtonVisible={btnCreateNewNode.Visibility}, ConfigTableRows={If(IsNothing(NODE_CONFIGURABLE_NODES_DT), 0, NODE_CONFIGURABLE_NODES_DT.Rows.Count)}")
' NEUE zentrale Methode aufrufen statt direkter Manipulation
UpdateCreateNodeButtonState()
' END NEW NODE
CURRENT_NODEID = oGuid
@@ -425,7 +443,7 @@ Public Class frmNodeNavigation
Await Show_Selected_Record_Data(CURRENT_RECORD_ID, oLoadRecordData)
DocView_DisplaySelectedDoc(True)
Await DocView_DisplaySelectedDoc(True)
ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, _EntityId)
CONTROL_HANDLING()
@@ -486,6 +504,48 @@ Public Class frmNodeNavigation
End If
End If
End Sub
' Neue zentrale Methode zum konsistenten Setzen des Button-Status
Private Sub UpdateCreateNodeButtonState()
Try
' *** HIER: Eingangsdiagnose ***
NNLogger.Debug($"UpdateCreateNodeButtonState called - Visibility={btnCreateNewNode.Visibility}, " &
$"CurrentEnabled={btnCreateNewNode.Enabled}, AvailableNodes={AvailableConfigNodes.Count}, " &
$"ConfigTableExists={Not IsNothing(NODE_CONFIGURABLE_NODES_DT)}")
If btnCreateNewNode.Visibility <> DevExpress.XtraBars.BarItemVisibility.Always Then
Exit Sub
End If
' Button aktivieren wenn:
' 1. Konfigurierbare Nodes existieren UND
' 2. Verfügbare Config-Nodes für aktuellen Node vorhanden sind
Dim shouldEnable As Boolean = False
If Not IsNothing(NODE_CONFIGURABLE_NODES_DT) AndAlso
NODE_CONFIGURABLE_NODES_DT.Rows.Count > 0 AndAlso
AvailableConfigNodes.Count > 0 Then
shouldEnable = True
End If
' Thread-sicheres Update
If Me.InvokeRequired Then
Me.Invoke(Sub() btnCreateNewNode.Enabled = shouldEnable)
Else
btnCreateNewNode.Enabled = shouldEnable
End If
If shouldEnable Then
LOGGER.Debug($"btnCreateNewNode ENABLED (AvailableConfigNodes: {AvailableConfigNodes.Count})")
Else
LOGGER.Debug($"btnCreateNewNode DISABLED (ConfigNodes: {AvailableConfigNodes.Count})")
End If
Catch ex As Exception
NNLogger.Error(ex)
' Im Fehlerfall: Sicherheitshalber deaktivieren
btnCreateNewNode.Enabled = False
End Try
End Sub
Public Async Function ShowDialogAsync() As Task(Of DialogResult)
Return Await Task.Run(Function()
Return MessageBox.Show("Der Parent-Node wird nun getauscht? Wollen Sie fortfahren?",
@@ -651,9 +711,15 @@ Public Class frmNodeNavigation
btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Dim oSql = String.Format("SELECT * FROM TBPMO_STRUCTURE_NODES_CONFIGURATION where TYPE_NODE = 1000 AND ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", oConstructID)
NODE_CONFIGURABLE_NODES_DT = MYDB_ECM.GetDatatable(oSql)
NNLogger.Info($"Load_Configurable_Nodes: ConstructID={oConstructID}, " &
$"FoundRows={If(IsNothing(NODE_CONFIGURABLE_NODES_DT), 0, NODE_CONFIGURABLE_NODES_DT.Rows.Count)}")
If Not IsNothing(NODE_CONFIGURABLE_NODES_DT) Then
If NODE_CONFIGURABLE_NODES_DT.Rows.Count > 0 Then
btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' Initial-State setzen
UpdateCreateNodeButtonState()
End If
End If
Catch ex As Exception
@@ -978,7 +1044,7 @@ Public Class frmNodeNavigation
Else
RibbonPageGroupDocResult.Enabled = True
If Node_AfterSelect = False Then
SplitContainerDocView.Collapsed = Not CONFIG.Config.DocumentViewerShown
UpdateDocViewCollapsedState()
Else
SplitContainerDocView.Collapsed = True
End If
@@ -1831,9 +1897,9 @@ Public Class frmNodeNavigation
End Try
sw.Done()
End Sub
Private Sub OnCBSelectedValueChanged(sender As Object, e As EventArgs)
Private Async Sub OnCBSelectedValueChanged(sender As Object, e As EventArgs)
Try
Dim oDocID = Focused_Row_GetDocID()
Dim oDocID = Await Focused_Row_GetDocID() ' ✅ Mit Await
If oDocID = 0 Then
Exit Sub
End If
@@ -1869,9 +1935,9 @@ Public Class frmNodeNavigation
End Try
End Sub
Private Sub OnDateSelectedValueChanged(sender As Object, e As EventArgs)
Private Async Sub OnDateSelectedValueChanged(sender As Object, e As EventArgs)
Try
Dim oDocID = Focused_Row_GetDocID()
Dim oDocID = Await Focused_Row_GetDocID() ' ✅ Mit Await
If oDocID = 0 Then
Exit Sub
End If
@@ -1917,9 +1983,9 @@ Public Class frmNodeNavigation
End Try
End Sub
Private Sub OnTextSelectedValueChanged(sender As Object, e As EventArgs)
Private Async Sub OnTextSelectedValueChanged(sender As Object, e As EventArgs)
Try
Dim oDocID = Focused_Row_GetDocID()
Dim oDocID = Await Focused_Row_GetDocID() ' ✅ Mit Await
If oDocID = 0 Then
Exit Sub
End If
@@ -1950,10 +2016,10 @@ Public Class frmNodeNavigation
End Try
End Sub
Private Sub OnCheckboxValueChanged(sender As Object, e As EventArgs)
Private Async Sub OnCheckboxValueChanged(sender As Object, e As EventArgs)
'TODO Save Checkboxvalue
Try
Dim oDocID = Focused_Row_GetDocID()
Dim oDocID = Await Focused_Row_GetDocID() ' ✅ Mit Await
If oDocID = 0 Then
Exit Sub
End If
@@ -1997,32 +2063,42 @@ Public Class frmNodeNavigation
End Try
End Sub
Private Sub GridViewDoc_Search_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles GridViewDoc_Search.FocusedRowChanged
Focused_Row_GetDocID()
Private Async Sub GridViewDoc_Search_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles GridViewDoc_Search.FocusedRowChanged
' ✅ Jetzt mit Await aufrufen
Dim docId = Await Focused_Row_GetDocID()
End Sub
Private Function Focused_Row_GetDocID() As Int64
Private Async Function Focused_Row_GetDocID() As Task(Of Int64)
Try
' Early Exit 1: Formular noch nicht angezeigt
If FORM_SHOWN = False Then
Return 0
End If
' Early Exit 2: Node-Wechsel aktiv
If Node_AfterSelect = True Then
SplitContainerDocView.Collapsed = True
GridViewDoc_Search.ClearSelection()
GridViewDoc_Search.FocusedRowHandle = DevExpress.XtraGrid.GridControl.InvalidRowHandle
Return 0
End If
Update_DocID_Label(False)
Update_Notification_Label(False, "", "")
' Prüfung: Ist eine Zeile fokussiert?
If GridViewDoc_Search.FocusedRowHandle >= 0 Then
Dim oDocID = GridViewDoc_Search.GetRowCellValue(GridViewDoc_Search.FocusedRowHandle, "DocID")
If Not IsNothing(oDocID) Then
Dim omsg = "Doc-ID: " & oDocID
Update_DocID_Label(True, omsg, EditState.Update)
' ✅ Dokumentvorschau nur bei DocID-Wechsel aktualisieren
If SELECTED_DOC_ID <> oDocID Then
SELECTED_DOC_ID = oDocID
' Panel-Status setzen (falls Vorschau deaktiviert)
If checkShowPreview.Checked = False Then
SplitContainerDocView.Collapsed = True
Else
@@ -2031,8 +2107,10 @@ Public Class frmNodeNavigation
End If
End If
DocView_DisplaySelectedDoc(False)
' ✅ Async-Aufruf mit Await
Await DocView_DisplaySelectedDoc(False)
End If
Update_DocID_Label(True, omsg, EditState.Update)
Return SELECTED_DOC_ID
Else
@@ -2043,6 +2121,7 @@ Public Class frmNodeNavigation
Return 0
End If
Catch ex As Exception
NNLogger.Error(ex, "Error in Focused_Row_GetDocID")
Return 0
End Try
End Function
@@ -2124,115 +2203,96 @@ Public Class frmNodeNavigation
End Sub
#Region "Dropping Files"
Sub Drag_Enter(e As DragEventArgs)
If _EntityId <> 0 Then
If WM_READ_ONLY = False Then
ClassDragDrop.Drag_enter(e)
Else
Update_Notification_Label(True, "READ ONLY ACCESS", "Yellow")
End If
Else
If _EntityId = 0 Then
Update_Notification_Label(True, "No entity selected", "Yellow")
e.Effect = DragDropEffects.None
Exit Sub
End If
If WM_READ_ONLY Then
Update_Notification_Label(True, "READ ONLY ACCESS", "Yellow")
e.Effect = DragDropEffects.None
Exit Sub
End If
' Delegiere die Priorisierung (Outlook > FileDrop) an die zentrale Routine
ClassDragDrop.Drag_enter(e)
End Sub
Private Async Function Drag_Drop(e As DragEventArgs) As Task
Try
If ClassDragDrop.Drop_File(e) = False Then
Exit Function
End If
' Basis-Prechecks bevor wir irgendetwas verarbeiten
If USER_PERSONIFIED_TEST = True Then
ClassHelper.MSGBOX_Handler("INFO", "Attention", "You are using orgFLOW in personified mode! Adding files is not allowed!")
Exit Function
End If
If WMMOD.SessionLoggedin = False Then
ClassHelper.MSGBOX_Handler("INFO", "Attention", "Check Your windream-connection and restart orgFLOW afterwards.", "Could not create a windream session!")
Exit Function
End If
If _EntityId <> 0 And (RIGHT_READ_ONLY_DOC = False And GridControlDocSearch.ContextMenuStrip.Name = "ContextMenuStripResultFiles") Or RIGHT_ADD_DOC = True Then
Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID
Dim count_DT = MYDB_ECM.GetScalarValue(sql)
If count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID = 0 Then
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Function
ElseIf count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID <> 0 Then
sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORM_ID = " & CURRENT_ENTITY_REDUNDANT_ID
count_DT = MYDB_ECM.GetScalarValue(sql)
If count_DT = 0 Then
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Function
End If
End If
If RECORD_CHANGED = True Then
If Save_Record() = False Then
Exit Function
End If
End If
CURRENT_CONTROL_DOCTYPE_MATCH = 0
If CONTROL_DOCTYPE_MATCH <> 0 Then
Try
CURRENT_CONTROL_DOCTYPE_MATCH = ""
CURRENT_CONTROL_DOCTYPE_MATCH = ClassControlValues.GetControlValuesREC_CONTROL(CURRENT_RECORD_ID, CONTROL_DOCTYPE_MATCH)
Catch ex As Exception
NNLogger.Error(ex)
CURRENT_CONTROL_DOCTYPE_MATCH = 0
CURRENT_CONTROL_DOCTYPE_MATCH = ""
End Try
End If
DROPPED_CHECKED = False
If e.Data.GetDataPresent(DataFormats.StringFormat) Then
Dim Wert As String = CType(e.Data.GetData(DataFormats.StringFormat), Object)
Console.WriteLine("DragDrop-Wert: " & Wert)
If Wert.Contains("SCAN") Then
Dim split() = Wert.Split(";")
If IsNumeric(split(1)) Then
CURRENT_FILEID = split(1)
CURRENT_FORMVIEW_ID = FORMVIEW_ID
ClassHelper.Create_USER_FILE_TABLE()
If Not IsNothing(CURRENT_TBPMO_FILES_USER) Then
If CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then
frmWM_IndexFile.ShowDialog()
End If
End If
'RUN_WD_SEARCH(WD_Suche, "RECORD")
End If
ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
If ClassDragDrop.Drop_File(e) = True Then
Check_Dropped_Files()
End If
ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
If ClassDragDrop.Drop_File(e) = True Then
Check_Dropped_Files()
End If
End If
Else
If ClassDragDrop.Drop_File(e) = True Then
Check_Dropped_Files()
End If
End If
'Nur wenn neue Dateien abgelegt wurden muss die Prozedur zur aktualisierung der windream Dateien ausgeführt werden...ansonsten muss nichts passieren
If NEW_FILES_ADDED = True Then
Me.Cursor = Cursors.WaitCursor
Await RUN_DOCSEARCH(True)
ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID)
TimerClearResultfiles.Start()
Else
NNLogger.Debug("No new files were added or windream tab is not focused!")
End If
Me.Cursor = Cursors.Default
Else
'If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
' NNLogger.Warn("RIGHT_RECORD_AND_FILE_READ_ONLY is set! No DragDrop allowed")
'End If
' Rechte-/Kontextprüfung
If Not (_EntityId <> 0 AndAlso ((RIGHT_READ_ONLY_DOC = False AndAlso GridControlDocSearch.ContextMenuStrip.Name = "ContextMenuStripResultFiles") OrElse RIGHT_ADD_DOC = True)) Then
If RIGHT_READ_ONLY_DOC = True Then
NNLogger.Warn("RIGHT_WD_FORBIDDEN is set! No DragDrop allowed")
Else
NNLogger.Warn("No DragDrop allowed - ELSE")
End If
Exit Function
End If
' Dokumenttypen-Konfiguration prüfen (wie gehabt)
Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID
Dim count_DT = MYDB_ECM.GetScalarValue(sql)
If count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID = 0 Then
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Function
ElseIf count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID <> 0 Then
sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORM_ID = " & CURRENT_ENTITY_REDUNDANT_ID
count_DT = MYDB_ECM.GetScalarValue(sql)
If count_DT = 0 Then
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Function
End If
End If
' Ungespeicherte Änderungen sichern
If RECORD_CHANGED = True Then
If Save_Record() = False Then Exit Function
End If
' Doctype-Match ermitteln (wie gehabt)
CURRENT_CONTROL_DOCTYPE_MATCH = 0
If CONTROL_DOCTYPE_MATCH <> 0 Then
Try
CURRENT_CONTROL_DOCTYPE_MATCH = ""
CURRENT_CONTROL_DOCTYPE_MATCH = ClassControlValues.GetControlValuesREC_CONTROL(CURRENT_RECORD_ID, CONTROL_DOCTYPE_MATCH)
Catch ex As Exception
NNLogger.Error(ex)
CURRENT_CONTROL_DOCTYPE_MATCH = 0
CURRENT_CONTROL_DOCTYPE_MATCH = ""
End Try
End If
DROPPED_CHECKED = False
' Zentrale Verarbeitung: genau EIN Aufruf Outlook/Filesystem/SCAN wird intern erkannt und geschrieben
If ClassDragDrop.Drop_File(e) = False Then
NNLogger.Debug("Drag_Drop: No supported data format detected by ClassDragDrop.")
Exit Function
End If
' Nach erfolgreichem Drop die User-File-Tabelle konsolidieren und ggf. Indexdialog öffnen
Check_Dropped_Files()
' Falls Dateien hinzugefügt wurden, Ergebnisliste aktualisieren
If NEW_FILES_ADDED = True Then
Me.Cursor = Cursors.WaitCursor
Await RUN_DOCSEARCH(True)
ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID)
TimerClearResultfiles.Start()
Else
NNLogger.Debug("No new files were added or windream tab is not focused!")
End If
Catch ex As Exception
NNLogger.Error(ex)
@@ -2527,7 +2587,7 @@ Public Class frmNodeNavigation
Else
tsmiFileRenameDisplayname.Visible = False
End If
If CURRENT_ENTITY_ID <> OF_FILESTORE_ENTITY Then
If CURRENT_ENTITY_ID <> OF_FILESTORE_ENTITY And OF_FILESTORE_ENTITY <> 0 Then
TsmitmJumpToFilestore.Visible = True
Else
TsmitmJumpToFilestore.Visible = False
@@ -3241,18 +3301,28 @@ Public Class frmNodeNavigation
Private Sub bbtnitmRecSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmRecSave.ItemClick
Save_Record()
End Sub
Private Sub checkShowPreview_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkShowPreview.CheckedChanged
''' <summary>
''' Setzt den Collapsed-Status des DocumentViewer-Panels konsistent.
''' Panel ist nur aufgeklappt, wenn DocViewInitialized = True UND checkShowPreview.Checked = True
''' </summary>
Private Sub UpdateDocViewCollapsedState()
If DocViewInitialized AndAlso checkShowPreview.Checked Then
SplitContainerDocView.Collapsed = False
Else
SplitContainerDocView.Collapsed = True
End If
End Sub
Private Async Sub checkShowPreview_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkShowPreview.CheckedChanged
If FORM_LOADED = False Then
Exit Sub
End If
If DocViewInitialized Then
CONFIG.Config.DocumentViewerShown = checkShowPreview.Checked
CONFIG.Save()
SplitContainerDocView.Collapsed = Not checkShowPreview.Checked
If checkShowPreview.Checked Then
DocView_DisplaySelectedDoc(False)
End If
' ✅ Konsistente zentrale Methode verwenden
UpdateDocViewCollapsedState()
Await DocView_DisplaySelectedDoc(False)
Else
SplitContainerDocView.Collapsed = True
@@ -3260,104 +3330,48 @@ Public Class frmNodeNavigation
End Sub
Private Sub GridViewDoc_Search_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridViewDoc_Search.SelectionChanged
DocView_DisplaySelectedDoc(False)
Private Async Sub GridViewDoc_Search_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridViewDoc_Search.SelectionChanged
Await DocView_DisplaySelectedDoc(False)
End Sub
Private Async Sub DocView_DisplaySelectedDoc(AfterNodeChange As Boolean)
Private Async Function DocView_DisplaySelectedDoc(AfterNodeChange As Boolean) As Task
' ✅ Early Exit: Keine Vorschau nach Node-Wechsel
If AfterNodeChange Then
Exit Sub
Return
End If
' ✅ Early Exit: Vorschau ist deaktiviert
If Not checkShowPreview.Checked Then
NNLogger.Info("checkShowPreview NOT Checked.")
Return
End If
' ✅ Early Exit: Viewer nicht initialisiert
If Not DocViewInitialized Then
NNLogger.Info("DocumentViewer not initialized. No preview possible.")
Return
End If
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Dim oSelectedDoc = ClassDocGrid.GetSingleSelectedDocument(GridViewDoc_Search)
If Not IsNothing(oSelectedDoc) Then
If checkShowPreview.Checked Then
If DocViewInitialized Then
If oSelectedDoc.Count = 1 Then
Close_Document_Viewer()
System.Threading.Thread.Sleep(400)
Dim oDocument As ClassDocGrid.clsWMDoc = oSelectedDoc.First()
Dim oPath = ClassHelper.FORMAT_WM_PATH(oDocument.DocPath)
DocumentViewer.LoadFile(oPath)
Else
NNLogger.Debug("Show_SelectedDoc - oSelectedDocs.Count not = 1 ")
Close_Document_Viewer()
End If
Else
NNLogger.Info("DocumentViewer not inited. No Show_SelectedDoc")
End If
End If
Else
NNLogger.Debug("Show_SelectedDoc - oSelectedDocs is nothing")
If IsNothing(oSelectedDoc) OrElse oSelectedDoc.Count <> 1 Then
NNLogger.Debug("No single document selected for preview. Check oSelectedDoc count: " & If(IsNothing(oSelectedDoc), "oSelectedDoc is Nothing", oSelectedDoc.Count.ToString()))
Close_Document_Viewer()
Return
End If
' ✅ Alle Prüfungen bestanden → Dokument laden
Close_Document_Viewer()
Await Task.Delay(400)
Dim oDocument As ClassDocGrid.clsWMDoc = oSelectedDoc.First()
Dim oPath = ClassHelper.FORMAT_WM_PATH(oDocument.DocPath)
' If AfterNodeChange Then Exit Sub
'Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
'Try
' Dim oSelectedDoc = ClassDocGrid.GetSingleSelectedDocument(GridViewDoc_Search)
' If oSelectedDoc Is Nothing OrElse oSelectedDoc.Count <> 1 Then
' NNLogger.Debug("Kein oder mehrere Dokumente ausgewählt.")
' Close_Document_Viewer()
' Return
' End If
' If Not checkShowPreview.Checked OrElse Not DocViewInitialized Then
' NNLogger.Info("Vorschau deaktiviert oder Viewer nicht initialisiert.")
' Return
' End If
' Close_Document_Viewer()
' Await Task.Delay(400)
' Dim oDocument As ClassDocGrid.clsWMDoc = oSelectedDoc.First()
' Dim oPath = ClassHelper.FORMAT_WM_PATH(oDocument.DocPath)
' NNLogger.Debug("Starte DocumentViewer.LoadFile...")
' ' Flag für Erfolg
' Dim fileLoadedSuccessfully As Boolean = False
' ' Starte Timeout-Überwachung
' Dim timeoutTask = Task.Delay(TimeSpan.FromSeconds(20))
' ' Starte Laden im UI-Thread
' Dim loadTask = Task.Run(Sub()
' Try
' ' Direkt im UI-Thread ausführen
' Me.Invoke(Sub()
' DocumentViewer.LoadFile(oPath)
' fileLoadedSuccessfully = True
' End Sub)
' Catch ex As Exception
' NNLogger.Error("Fehler beim Laden des Dokuments: " & ex.Message)
' End Try
' End Sub)
' ' Warte auf Timeout oder Ladeende
' Await Task.WhenAny(loadTask, timeoutTask)
' If Not fileLoadedSuccessfully Then
' NNLogger.Warn("Ladevorgang hat Timeout überschritten oder ist fehlgeschlagen.")
' ' Optional: Viewer zurücksetzen oder Meldung anzeigen
' Else
' NNLogger.Info("Dokument erfolgreich geladen.")
' End If
DocumentViewer.LoadFile_FromPath(oPath)
Catch ex As Exception
NNLogger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Sub
End Function
@@ -3750,14 +3764,4 @@ Public Class frmNodeNavigation
MessageBox.Show("Unerwarteter Fehler beim Springen zum Filestore-Knoten: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub FindNode_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles FindNode.ItemClick
Dim oNode = TreeListDevexpress.FindNodeByFieldValue("GUID", BarEditItem1.EditValue)
If Not IsNothing(oNode) Then
TreeListDevexpress.FocusedNode = oNode
TreeListDevexpress.MakeNodeVisible(oNode)
Else
MessageBox.Show("Knoten nicht gefunden!", "Knoten nicht gefunden", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
End Sub
End Class

View File

@@ -13,18 +13,23 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
CD_ROM|Any CPU = CD_ROM|Any CPU
CD_ROM|Mixed Platforms = CD_ROM|Mixed Platforms
CD_ROM|x64 = CD_ROM|x64
CD_ROM|x86 = CD_ROM|x86
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
DVD-5|Any CPU = DVD-5|Any CPU
DVD-5|Mixed Platforms = DVD-5|Mixed Platforms
DVD-5|x64 = DVD-5|x64
DVD-5|x86 = DVD-5|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x64 = Release|x64
Release|x86 = Release|x86
SingleImage|Any CPU = SingleImage|Any CPU
SingleImage|Mixed Platforms = SingleImage|Mixed Platforms
SingleImage|x64 = SingleImage|x64
SingleImage|x86 = SingleImage|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
@@ -32,78 +37,108 @@ Global
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|x64.ActiveCfg = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|x64.Build.0 = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|x64.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|x64.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Debug|x86.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|x64.ActiveCfg = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|x64.Build.0 = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|Any CPU.Build.0 = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|x64.ActiveCfg = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|x64.Build.0 = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.Release|x86.ActiveCfg = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|x64.ActiveCfg = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|x64.Build.0 = Release|x64
{BDCC148B-4C84-4A48-80CF-4C56057294E0}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|x64.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|x64.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|x64.Build.0 = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Debug|x86.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|x64.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|x64.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|Any CPU.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|x64.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|x64.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.Release|x86.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|x64.ActiveCfg = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|x64.Build.0 = Release|Any CPU
{F1C8A9DF-2452-4E3B-9C32-0C792F6ED2E6}.SingleImage|x86.ActiveCfg = Release|Any CPU
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|Any CPU.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|Any CPU.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|Mixed Platforms.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|Mixed Platforms.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|x64.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|x64.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|x86.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.CD_ROM|x86.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|Any CPU.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|Mixed Platforms.Build.0 = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|x64.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|x64.Build.0 = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|x86.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Debug|x86.Build.0 = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|Any CPU.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|Any CPU.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|Mixed Platforms.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|Mixed Platforms.Build.0 = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|x64.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|x64.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|x86.ActiveCfg = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.DVD-5|x86.Build.0 = Debug|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|Any CPU.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|Mixed Platforms.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|Mixed Platforms.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|x64.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|x64.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|x86.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.Release|x86.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|Any CPU.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|Any CPU.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|Mixed Platforms.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|Mixed Platforms.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x64.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x64.Build.0 = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x86.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x86.Build.0 = Release|x86
EndGlobalSection