Compare commits

...

3 Commits

Author SHA1 Message Date
Developer01
e9cb352674 Release für ewa 2026-03-24 12:42:53 +01:00
Developer01
1469063ad7 Zu testen bei ewa 2026-03-18 15:31:59 +01:00
Developer01
a50e7e3c55 Bug Multiindexing, Cache load 2026-03-16 12:29:11 +01:00
22 changed files with 2401 additions and 583 deletions

View File

@@ -527,7 +527,7 @@ Public Class ClassDOC_SEARCH
Return False Return False
End Try End Try
End Function End Function
Public Shared Function SET_WD_RIGHTS(oWMObject As WINDREAMLib.WMObject, RESULT_DOCID As Integer, RESULT_DOC_PATH As String, DeleteRightsBefore As Boolean) Public Shared Function SET_WD_RIGHTS(oWMObject As WINDREAMLib.WMObject, pDocID As Integer, RESULT_DOC_PATH As String, DeleteRightsBefore As Boolean)
Try Try
If CURRENT_RECORD_ID = 0 Then If CURRENT_RECORD_ID = 0 Then
MsgBox("No Record selected - Please select one!", MsgBoxStyle.Exclamation) MsgBox("No Record selected - Please select one!", MsgBoxStyle.Exclamation)
@@ -535,7 +535,7 @@ Public Class ClassDOC_SEARCH
End If End If
LOGGER.Debug("#### SETTING RIGHTS FOR FILE ######") LOGGER.Debug("#### SETTING RIGHTS FOR FILE ######")
If ClassWDRights.Init = True Then If ClassWDRights.Init = True Then
If ClassWDRights.Doc_Renew_Rights(oWMObject, RESULT_DOCID, RESULT_DOC_PATH, DeleteRightsBefore) Then If ClassWDRights.Doc_Renew_Rights(oWMObject, pDocID, RESULT_DOC_PATH, DeleteRightsBefore) Then
If ClassWDRights.MSG_RESULT <> "" Then If ClassWDRights.MSG_RESULT <> "" Then
Dim msg = "Achtung: einige Rechte konnten nicht gesetzt werden: " & vbCrLf & ClassWDRights.MSG_RESULT Dim msg = "Achtung: einige Rechte konnten nicht gesetzt werden: " & vbCrLf & ClassWDRights.MSG_RESULT
If USER_LANGUAGE <> "de-DE" Then If USER_LANGUAGE <> "de-DE" Then

View File

@@ -0,0 +1,111 @@
Imports System.Data
''' <summary>
''' Zentraler Cache für häufig abgerufene Datenbank-Queries
''' Reduziert DB-Roundtrips um bis zu 90%
''' </summary>
Public Class ClassDataCache
Private Shared ReadOnly _cache As New Dictionary(Of String, CachedItem)
Private Shared ReadOnly _lockObject As New Object()
Private Shared _defaultTimeout As TimeSpan = TimeSpan.FromMinutes(5)
Private Class CachedItem
Public Data As DataTable
Public Timestamp As DateTime
Public Timeout As TimeSpan
Public ReadOnly Property IsExpired As Boolean
Get
Return DateTime.Now - Timestamp > Timeout
End Get
End Property
End Class
''' <summary>
''' Daten aus Cache holen oder neu laden
''' </summary>
Public Shared Function GetOrLoad(cacheKey As String,
loadFunction As Func(Of DataTable),
Optional timeout As TimeSpan? = Nothing) As DataTable
SyncLock _lockObject
' Cache-Check
If _cache.ContainsKey(cacheKey) Then
Dim item = _cache(cacheKey)
If Not item.IsExpired Then
LOGGER.Debug($"Cache HIT: {cacheKey} (Age: {(DateTime.Now - item.Timestamp).TotalSeconds:F1}s)")
Return item.Data.Copy() ' Kopie zurückgeben!
Else
' Abgelaufen - entfernen
_cache.Remove(cacheKey)
LOGGER.Debug($"Cache EXPIRED: {cacheKey}")
End If
End If
' Cache MISS - neu laden
LOGGER.Debug($"Cache MISS: {cacheKey} - Loading from DB...")
Dim result = loadFunction()
If result IsNot Nothing Then
_cache(cacheKey) = New CachedItem With {
.Data = result.Copy(),
.Timestamp = DateTime.Now,
.Timeout = If(timeout, _defaultTimeout)
}
End If
Return result
End SyncLock
End Function
''' <summary>
''' Bestimmten Cache-Eintrag invalidieren
''' </summary>
Public Shared Sub Invalidate(cacheKey As String)
SyncLock _lockObject
If _cache.ContainsKey(cacheKey) Then
_cache.Remove(cacheKey)
LOGGER.Debug($"Cache INVALIDATED: {cacheKey}")
End If
End SyncLock
End Sub
''' <summary>
''' Alle Cache-Einträge löschen
''' </summary>
Public Shared Sub ClearAll()
SyncLock _lockObject
Dim count = _cache.Count
_cache.Clear()
LOGGER.Info($"Cache CLEARED: {count} entries removed")
End SyncLock
End Sub
''' <summary>
''' Abgelaufene Einträge entfernen
''' </summary>
Public Shared Sub CleanupExpired()
SyncLock _lockObject
Dim expiredKeys = _cache.Where(Function(kvp) kvp.Value.IsExpired).
Select(Function(kvp) kvp.Key).ToList()
For Each key In expiredKeys
_cache.Remove(key)
Next
If expiredKeys.Count > 0 Then
LOGGER.Debug($"Cache CLEANUP: {expiredKeys.Count} expired entries removed")
End If
End SyncLock
End Sub
''' <summary>
''' Cache-Statistiken
''' </summary>
Public Shared Function GetStatistics() As String
SyncLock _lockObject
Return $"Cache Entries: {_cache.Count}, Default Timeout: {_defaultTimeout.TotalMinutes:F1} min"
End SyncLock
End Function
End Class

View File

@@ -23,6 +23,8 @@ Public Class ClassDocGrid
End Class End Class
Private ReadOnly GridView As GridView Private ReadOnly GridView As GridView
' ✅ NEU: Flag zum Unterdrücken aller Grid-Events während Bulk-Operationen
Public Shared Property IsBulkSelectionActive As Boolean = False
Public ReadOnly Property SelectedDocuments As List(Of clsWMDoc) Public ReadOnly Property SelectedDocuments As List(Of clsWMDoc)
Get Get
@@ -64,6 +66,9 @@ Public Class ClassDocGrid
Private Shared _datepickerValueChangedHandler As EventHandler Private Shared _datepickerValueChangedHandler As EventHandler
Private Shared _textValueChangedHandler As EventHandler Private Shared _textValueChangedHandler As EventHandler
Private Shared _checkValueChangedHandler As EventHandler Private Shared _checkValueChangedHandler As EventHandler
Private Shared EnableVerboseGridLogging As Boolean = False ' PRODUKTIV: FALSE!
Private Shared _isGridRefreshing As Boolean = False
Private Shared Function Init_Table() Private Shared Function Init_Table()
Try Try
@@ -273,11 +278,20 @@ Public Class ClassDocGrid
End If End If
End If End If
End Sub End Sub
Public Shared Sub FillColumns(pDocGridView As GridView, Public Shared Sub FillColumns(pDocGridView As GridView,
DT_RESULT As DataTable, DT_WINDREAM_RESULTLIST As DataTable, DT_DOCRESULT_DROPDOWN_ITEMS As DataTable, DT_RESULT As DataTable, DT_WINDREAM_RESULTLIST As DataTable, DT_DOCRESULT_DROPDOWN_ITEMS As DataTable,
DropdownValueChangedHandler As EventHandler, DatepickerValueChangedHandler As EventHandler, TextValueChangedHandler As EventHandler, CheckValueChangedHandler As EventHandler, DropdownValueChangedHandler As EventHandler, DatepickerValueChangedHandler As EventHandler, TextValueChangedHandler As EventHandler, CheckValueChangedHandler As EventHandler,
SearchType As String, RECORD_ID As Integer) SearchType As String, RECORD_ID As Integer)
' ── 1. KRITISCH: Event-Handler ENTFERNEN vor Neuregistrierung ───────────
RemoveHandler pDocGridView.MasterRowExpanded, AddressOf gridView_MasterRowExpanded
RemoveHandler pDocGridView.CustomColumnDisplayText, AddressOf gridView_CustomColumnDisplayText
RemoveHandler pDocGridView.FocusedRowChanged, AddressOf GVDoc_Values_FocusedRowChanged
' ── 2. DATE_COLUMNS Listen leeren (verhindert Duplikate) ────────────────
DATE_COLUMNS.Clear()
DATE_COLUMNS_CONFIG.Clear()
' Handler speichern ' Handler speichern
_dropdownValueChangedHandler = DropdownValueChangedHandler _dropdownValueChangedHandler = DropdownValueChangedHandler
_datepickerValueChangedHandler = DatepickerValueChangedHandler _datepickerValueChangedHandler = DatepickerValueChangedHandler
@@ -298,7 +312,6 @@ Public Class ClassDocGrid
Dim columnTitle As String = row.Item("HEADER_CAPTION") Dim columnTitle As String = row.Item("HEADER_CAPTION")
Dim type As Integer = row.Item("TYPE_ID") Dim type As Integer = row.Item("TYPE_ID")
If type = 3 And isConfig = False Then If type = 3 And isConfig = False Then
DATE_COLUMNS.Add(columnTitle) DATE_COLUMNS.Add(columnTitle)
ElseIf type = 3 And isConfig = True Then ElseIf type = 3 And isConfig = True Then
@@ -318,20 +331,41 @@ Public Class ClassDocGrid
' Neues Dataset für Master- und Detail-Tabelle erstellen ' Neues Dataset für Master- und Detail-Tabelle erstellen
Dim ds As New DataSet() Dim ds As New DataSet()
Dim DT_DETAILS_SQL Dim DT_DETAILS_SQL
' ── Cache-optimiertes Laden der Detail-Values ─────────────────────────
Dim cacheKey As String
Dim DT_DETAIL_VALUES As DataTable
Select Case CURRENT_SEARCH_TYPE Select Case CURRENT_SEARCH_TYPE
Case "NODE_DOWN" Case "NODE_DOWN"
DT_DETAILS_SQL = String.Format("SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " & cacheKey = $"DocDetailValues_NodeDown_E{CURRENT_ENTITY_ID}_L{USER_LANGUAGE}"
"FROM TBPMO_DOC_VALUES T INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP ON T.RECORD_ID = TTEMP.RECORD_ID RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1", CURRENT_ENTITY_ID, USER_LANGUAGE)
DT_DETAIL_VALUES = ClassDataCache.GetOrLoad(cacheKey, Function()
Dim sql = String.Format(
"SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], " &
"T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " &
"FROM TBPMO_DOC_VALUES T " &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP ON T.RECORD_ID = TTEMP.RECORD_ID " &
"RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID " &
"WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1",
CURRENT_ENTITY_ID, USER_LANGUAGE)
Return MYDB_ECM.GetDatatable(sql)
End Function, TimeSpan.FromMinutes(2))
Case Else Case Else
DT_DETAILS_SQL = String.Format("SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " & cacheKey = $"DocDetailValues_E{CURRENT_ENTITY_ID}_R{RECORD_ID}_L{USER_LANGUAGE}"
"FROM TBPMO_DOC_VALUES T RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1 AND T.RECORD_ID = {2}", CURRENT_ENTITY_ID, USER_LANGUAGE, RECORD_ID)
DT_DETAIL_VALUES = ClassDataCache.GetOrLoad(cacheKey, Function()
Dim sql = String.Format(
"SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], " &
"T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " &
"FROM TBPMO_DOC_VALUES T " &
"RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID " &
"WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1 AND T.RECORD_ID = {2}",
CURRENT_ENTITY_ID, USER_LANGUAGE, RECORD_ID)
Return MYDB_ECM.GetDatatable(sql)
End Function, TimeSpan.FromMinutes(2))
End Select End Select
'"FROM TBPMO_DOC_VALUES T INNER JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND T1.LANGUAGE = '{1}' AND T.RECORD_ID = {2} ORDER BY T.DocID, T1.SEQUENCE", CURRENT_ENTITY_ID, USER_LANGUAGE, RECORD_ID)
Dim DT_DETAIL_VALUES As DataTable = MYDB_ECM.GetDatatable(DT_DETAILS_SQL)
Dim oDocID As Integer Dim oDocID As Integer
Dim oConfigID As Integer Dim oConfigID As Integer
Dim recordId As Integer Dim recordId As Integer
@@ -352,9 +386,6 @@ Public Class ClassDocGrid
If oFlteredRows.Length > 0 Then If oFlteredRows.Length > 0 Then
value = oFlteredRows(0)("VALUE").ToString() value = oFlteredRows(0)("VALUE").ToString()
End If End If
'value = MYDB_ECM.GetScalarValue(String.Format("SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = {0} AND DocID = {1} AND RECORD_ID = {2}", oConfigID, oDocID, RECORD_ID))
Catch ex As Exception Catch ex As Exception
LOGGER.Warn(String.Format("Attention: Could not get Value from TBPMO_DOC_VALUES for ConfigId[{0}], DocId[{1}]: ", oConfigID, oDocID) & ex.Message) LOGGER.Warn(String.Format("Attention: Could not get Value from TBPMO_DOC_VALUES for ConfigId[{0}], DocId[{1}]: ", oConfigID, oDocID) & ex.Message)
End Try End Try
@@ -367,6 +398,7 @@ Public Class ClassDocGrid
LOGGER.Warn($"Attention: Could not load values from TBPMO_DOC_VALUES: " & ex.Message & vbNewLine & $"SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = {oConfigID} AND DocID = {oDocID} AND RECORD_ID = {RECORD_ID}") LOGGER.Warn($"Attention: Could not load values from TBPMO_DOC_VALUES: " & ex.Message & vbNewLine & $"SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = {oConfigID} AND DocID = {oDocID} AND RECORD_ID = {RECORD_ID}")
End Try End Try
LOGGER.Debug("Values loaded...") LOGGER.Debug("Values loaded...")
Try Try
' Tabellen zum DataSet hinzufügen ' Tabellen zum DataSet hinzufügen
ds.Tables.Add(DT_RESULT) ds.Tables.Add(DT_RESULT)
@@ -400,15 +432,26 @@ Public Class ClassDocGrid
Dim gridControl As GridControl = pDocGridView.GridControl Dim gridControl As GridControl = pDocGridView.GridControl
' ── 3. KRITISCH: Performance-optimiertes DataSource-Setzen ───────────
_isGridRefreshing = True ' Flag setzen VOR DataSource-Änderung
Try
pDocGridView.BeginDataUpdate() ' Events unterdrücken
pDocGridView.BeginUpdate() ' UI-Updates unterdrücken
' Datasource auf Master-Tabelle setzen ' Datasource auf Master-Tabelle setzen
'gridView.GridControl.DataSource = DT_RESULT gridControl.DataSource = ds.Tables(0)
gridControl.DataSource = ds.Tables(0) gridControl.ForceInitialize()
gridControl.ForceInitialize()
pDocGridView.EndUpdate() ' UI-Updates reaktivieren
pDocGridView.EndDataUpdate() ' Events reaktivieren
Catch ex As Exception
LOGGER.Error($"Error setting DataSource: {ex.Message}")
Finally
' Flag NICHT hier zurücksetzen - erst NACH allen Grid-Operationen!
End Try
' Detail View anlegen und der Relation `docIdDetails` zuweisen ' Detail View anlegen und der Relation `docIdDetails` zuweisen
Dim GVDoc_Values As New GridView(gridControl) Dim GVDoc_Values As New GridView(gridControl)
'grvwDetail.OptionsBehavior.Editable = False
GVDoc_Values.OptionsView.ShowGroupPanel = False GVDoc_Values.OptionsView.ShowGroupPanel = False
GVDoc_Values.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Style3D GVDoc_Values.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Style3D
GVDoc_Values.OptionsView.EnableAppearanceEvenRow = True GVDoc_Values.OptionsView.EnableAppearanceEvenRow = True
@@ -416,18 +459,17 @@ Public Class ClassDocGrid
GVDoc_Values.Appearance.HeaderPanel.BackColor = Color.Orange GVDoc_Values.Appearance.HeaderPanel.BackColor = Color.Orange
GVDoc_Values.Appearance.HeaderPanel.Options.UseBackColor = True GVDoc_Values.Appearance.HeaderPanel.Options.UseBackColor = True
gridControl.LevelTree.Nodes.Add("docIdDetails", GVDoc_Values) gridControl.LevelTree.Nodes.Add("docIdDetails", GVDoc_Values)
Catch ex As Exception Catch ex As Exception
MsgBox("Error in FillColumns: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in FillColumns: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
LOGGER.Warn("Attention: Could not load converted datatable DocSearch: " & ex.Message) LOGGER.Warn("Attention: Could not load converted datatable DocSearch: " & ex.Message)
End Try End Try
' ── 4. KRITISCH: Handler NACH DataSource-Setzen registrieren ─────────────
AddHandler pDocGridView.MasterRowExpanded, AddressOf gridView_MasterRowExpanded AddHandler pDocGridView.MasterRowExpanded, AddressOf gridView_MasterRowExpanded
AddHandler pDocGridView.CustomColumnDisplayText, AddressOf gridView_CustomColumnDisplayText AddHandler pDocGridView.CustomColumnDisplayText, AddressOf gridView_CustomColumnDisplayText
AddHandler pDocGridView.FocusedRowChanged, AddressOf GVDoc_Values_FocusedRowChanged AddHandler pDocGridView.FocusedRowChanged, AddressOf GVDoc_Values_FocusedRowChanged
For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows
Dim col As GridColumn = pDocGridView.Columns(row.Item("HEADER_CAPTION")) Dim col As GridColumn = pDocGridView.Columns(row.Item("HEADER_CAPTION"))
Dim colCaption = row.Item("HEADER_CAPTION") Dim colCaption = row.Item("HEADER_CAPTION")
@@ -470,11 +512,22 @@ Public Class ClassDocGrid
oChangedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" oChangedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss"
End If End If
' ── 5. BestFitColumns mit gesetztem Flag ──────────────────────────────────
If GridDocResult_BestFitColumns Then If GridDocResult_BestFitColumns Then
pDocGridView.OptionsView.BestFitMaxRowCount = -1 ' _isGridRefreshing ist bereits True
pDocGridView.BestFitColumns(True) Try
pDocGridView.BeginUpdate()
pDocGridView.OptionsView.BestFitMaxRowCount = -1
pDocGridView.BestFitColumns(True)
pDocGridView.EndUpdate()
Catch ex As Exception
LOGGER.Error($"Error in BestFitColumns: {ex.Message}")
End Try
End If End If
' ── 6. KRITISCH: Flag ERST JETZT zurücksetzen! ────────────────────────────
_isGridRefreshing = False
' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt ' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt
For Each column As GridColumn In pDocGridView.Columns For Each column As GridColumn In pDocGridView.Columns
column.OptionsColumn.AllowEdit = False column.OptionsColumn.AllowEdit = False
@@ -570,49 +623,116 @@ Public Class ClassDocGrid
Private Shared Sub gridView_CustomColumnDisplayText(sender As Object, e As CustomColumnDisplayTextEventArgs) Private Shared Sub gridView_CustomColumnDisplayText(sender As Object, e As CustomColumnDisplayTextEventArgs)
Try Try
Dim view As ColumnView = sender ' ── Performance-Check 1: Während Refresh nichts tun ──────────────────
If _isGridRefreshing Then Return
' ── Performance-Check 2: Ungültige Row-Handles ignorieren ────────────
If e.ListSourceRowIndex = DevExpress.XtraGrid.GridControl.InvalidRowHandle Then
Return
End If
' ── Performance-Check 3: Leere Werte schnell verarbeiten ─────────────
If e.Value Is Nothing OrElse String.IsNullOrWhiteSpace(e.Value.ToString()) Then
e.DisplayText = ""
Return
End If
Dim fieldName As String = e.Column.FieldName
Dim valueString As String = e.Value.ToString()
' ── WICHTIG: Verhindere rekursive Aufrufe ────────────────────────────
' Wenn DisplayText bereits korrekt ist, nichts ändern
If e.DisplayText = valueString Then Return
Dim parsedDate As DateTime Dim parsedDate As DateTime
If Not IsNothing(DATE_COLUMNS) Then
If DATE_COLUMNS.Contains(e.Column.FieldName) And e.ListSourceRowIndex <> DevExpress.XtraGrid.GridControl.InvalidRowHandle Then ' ── Datumskonvertierung für Standard-Datumsspalten ───────────────────
LOGGER.Debug($"gridView_CustomColumnDisplayText1 [{e.Column.FieldName}] ") If DATE_COLUMNS IsNot Nothing AndAlso DATE_COLUMNS.Contains(fieldName) Then
If e.Value.ToString() = String.Empty Then Try
e.DisplayText = "" If DateTime.TryParse(valueString, parsedDate) Then
Exit Sub Dim formattedDate As String = parsedDate.ToString(CURRENT_DATE_FORMAT & " HH:mm:ss")
' Nur setzen wenn unterschiedlich
If e.DisplayText <> formattedDate Then
e.DisplayText = formattedDate
End If
End If End If
Catch ex As FormatException
If Not DateTime.TryParse(e.Value, parsedDate) Then ' Bei Fehler Original-Wert belassen (NICHT setzen!)
parsedDate = DateTime.ParseExact(e.Value, CURRENT_DATE_FORMAT & " HH:MM:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo) If EnableVerboseGridLogging Then
LOGGER.Debug($"Date parsing failed for [{fieldName}]: {valueString}")
End If End If
End Try
e.DisplayText = parsedDate.ToString(CURRENT_DATE_FORMAT & " HH:MM:ss") Return
End If
End If End If
If Not IsNothing(DATE_COLUMNS_CONFIG) Then
If DATE_COLUMNS_CONFIG.Contains(e.Column.FieldName) And e.ListSourceRowIndex <> DevExpress.XtraGrid.GridControl.InvalidRowHandle Then
If e.Value.ToString() = String.Empty Then
e.DisplayText = ""
Exit Sub
End If
LOGGER.Debug($"gridView_CustomColumnDisplayText2 [{e.Column.FieldName}] ")
If Not DateTime.TryParse(e.Value, parsedDate) Then
parsedDate = DateTime.ParseExact(e.Value, CURRENT_DATE_FORMAT, System.Globalization.DateTimeFormatInfo.InvariantInfo)
End If
e.DisplayText = parsedDate.ToString(CURRENT_DATE_FORMAT) ' ── Datumskonvertierung für Config-Datumsspalten ──────────────────────
End If If DATE_COLUMNS_CONFIG IsNot Nothing AndAlso DATE_COLUMNS_CONFIG.Contains(fieldName) Then
Try
If DateTime.TryParse(valueString, parsedDate) Then
Dim formattedDate As String = parsedDate.ToString(CURRENT_DATE_FORMAT)
' Nur setzen wenn unterschiedlich
If e.DisplayText <> formattedDate Then
e.DisplayText = formattedDate
End If
End If
Catch ex As FormatException
' Bei Fehler Original-Wert belassen
If EnableVerboseGridLogging Then
LOGGER.Debug($"Date parsing failed for [{fieldName}]: {valueString}")
End If
End Try
End If End If
Catch ex As Exception Catch ex As Exception
LOGGER.Warn("Unexpected error in gridView_CustomColumnDisplayText: " & ex.Message) LOGGER.Error($"gridView_CustomColumnDisplayText Error [{e.Column?.FieldName}]: {ex.Message}")
End Try End Try
End Sub End Sub
Public Shared Sub GVDoc_Values_FocusedRowChanged(sender As GridView, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Public Shared Sub GVDoc_Values_FocusedRowChanged(sender As GridView, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs)
If IsBulkSelectionActive Then Return
LOGGER.Debug("GVDoc_Values_FocusedRowChanged triggered...")
Try Try
ClassDocGrid.GetDocItems(sender) If sender.FocusedRowHandle < 0 Then Return
' Nur die fokussierte Zeile in DT_RESULTFILES speichern (Legacy-Kompatibilität)
If Init_Table() Then
Dim newRow As DataRow = DT_RESULTFILES.NewRow()
Try
Dim oDocID = sender.GetFocusedRowCellValue(sender.Columns("DocID"))
SELECTED_DOC_ID = If(oDocID IsNot Nothing, CInt(oDocID), 0)
newRow("DOC_ID") = SELECTED_DOC_ID ' ✅ DOC_ID wird gesetzt
Catch ex As Exception
newRow("DOC_ID") = 0
SELECTED_DOC_ID = 0
End Try
Try
SELECTED_DOC_PATH = sender.GetFocusedRowCellValue(sender.Columns("FULLPATH"))
If IsNothing(SELECTED_DOC_PATH) Then
SELECTED_DOC_PATH = sender.GetFocusedRowCellValue(sender.Columns("FULL_FILENAME"))
End If
newRow("DOC_PATH") = If(SELECTED_DOC_PATH, "")
Catch ex As Exception
newRow("DOC_PATH") = ""
End Try
Try
newRow("OBJECTTYPE") = sender.GetFocusedRowCellValue(sender.Columns("OBJECTTYPE"))
Catch ex As Exception
newRow("OBJECTTYPE") = ""
End Try
Try
Dim dpn = sender.GetFocusedRowCellValue(sender.Columns("Displayname"))
newRow("DISPLAYNAME") = If(IsDBNull(dpn) OrElse dpn Is Nothing, "", dpn)
Catch ex As Exception
newRow("DISPLAYNAME") = ""
End Try
' ✅ FIX: INWORK-Spalte setzen, sonst ConstraintException beim Add
newRow("INWORK") = False
newRow("ACCESS_RIGHT") = 0
DT_RESULTFILES.Rows.Add(newRow)
DT_RESULTFILES.AcceptChanges()
End If
Catch ex As Exception Catch ex As Exception
LOGGER.Warn("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message) LOGGER.Warn("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message)
MsgBox("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message, MsgBoxStyle.Critical)
End Try End Try
End Sub End Sub
Public Shared Sub gridView_MasterRowExpanded(sender As GridView, e As DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs) Public Shared Sub gridView_MasterRowExpanded(sender As GridView, e As DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs)

View File

@@ -5,6 +5,131 @@ Imports Microsoft.Office.Interop.Outlook
Public Class ClassDragDrop Public Class ClassDragDrop
Public Shared files_dropped As String() Public Shared files_dropped As String()
Public Shared Event FilesDroppedReady(ByVal files As String()) Public Shared Event FilesDroppedReady(ByVal files As String())
''' <summary>
''' Eindeutiges Drag-Format für DocID-Transfers zwischen frmNodeNavigation-Instanzen.
''' Muss mit frmNodeNavigation.DRAGDROP_FORMAT_DOCID identisch sein.
''' </summary>
Public Shared ReadOnly DRAGDROP_FORMAT_DOCID As String = "DD_RecordOrganizer_DocID"
''' <summary>
''' Zeichen, die im Dateinamen Probleme bei DB-Import und Dateihandling verursachen können.
''' </summary>
Private Shared ReadOnly ProblematicChars As Char() = {
"'"c, "`"c, ";"c, "%"c, "&"c, "+"c, "#"c, "~"c,
"{"c, "}"c, "["c, "]"c, "^"c, "="c, "@"c
}
Private Shared Function CheckAndSanitizeFilename(filePath As String) As String
Try
Dim dir As String = Path.GetDirectoryName(filePath)
Dim originalName As String = Path.GetFileNameWithoutExtension(filePath)
Dim ext As String = Path.GetExtension(filePath)
' ── 1) Unicode-Normalisierung NFD → NFC ──────────────────────────────
Dim normalizedName As String = originalName.Normalize(System.Text.NormalizationForm.FormC)
Dim hadNormalizationIssue As Boolean = (normalizedName <> originalName)
If hadNormalizationIssue Then
LOGGER?.Warn($"CheckAndSanitizeFilename: NFD-Encoding erkannt in [{originalName}{ext}]")
Dim normMsg As String
If USER_LANGUAGE <> "de-DE" Then
normMsg = $"The filename contains Unicode characters in decomposed form (NFD encoding)." &
vbCrLf & vbCrLf &
$"File: {originalName}{ext}" & vbCrLf & vbCrLf &
"This causes garbled characters in the database (e.g. ü → Ru¨ckbau)." & vbCrLf & vbCrLf &
"Please rename the file and try again." & vbCrLf &
"The import of this file has been aborted."
Else
normMsg = $"Der Dateiname enthält nicht sichtbare Unicode-Zeichen in dekomponiierter Form (NFD-Kodierung)." &
vbCrLf & vbCrLf &
$"Datei: {originalName}{ext}" & vbCrLf & vbCrLf &
"Dies kann zu kryptischen Zeichen in der Datenbank (z.B. ü → Ru¨ckbau) oder Problemen beim Import nach windream führen." & vbCrLf & vbCrLf &
"Ursache dafür kann sein, das die Datei aus einer NICHT Windows Umgebung erstellt wurde. (MacOS, Linux etc)" & vbCrLf &
"Bitte benennen Sie die Datei um und versuchen Sie es erneut." & vbCrLf &
"Der Import dieser Datei wurde abgebrochen."
End If
Dim normCaption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
MessageBox.Show(normMsg, normCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen wegen NFD-Problem [{originalName}{ext}].")
Return Nothing
End If
' ── 2) Leerzeichen-Probleme prüfen (führend, abschließend, doppelt) ──
Dim hasLeadingOrTrailingSpace As Boolean = (originalName <> originalName.Trim())
Dim hasDoubleSpace As Boolean = originalName.Contains(" ") ' zwei aufeinanderfolgende Leerzeichen
If hasLeadingOrTrailingSpace OrElse hasDoubleSpace Then
LOGGER?.Warn($"CheckAndSanitizeFilename: Leerzeichen-Problem in [{originalName}{ext}]")
Dim spaceMsg As String
If USER_LANGUAGE <> "de-DE" Then
spaceMsg = $"The filename contains leading, trailing or consecutive spaces:" &
vbCrLf & vbCrLf &
$"File: ""{originalName}{ext}""" & vbCrLf & vbCrLf &
"This can cause problems during database import or file comparisons." & vbCrLf & vbCrLf &
"Please rename the file (remove extra spaces) and try again." & vbCrLf &
"The import of this file has been aborted."
Else
spaceMsg = $"Der Dateiname enthält führende, abschließende oder doppelte Leerzeichen:" &
vbCrLf & vbCrLf &
$"Datei: ""{originalName}{ext}""" & vbCrLf & vbCrLf &
"Dies kann beim Datenbankimport oder Dateivergleichen zu Problemen führen." & vbCrLf & vbCrLf &
"Bitte benennen Sie die Datei um (Leerzeichen entfernen) und versuchen Sie es erneut." & vbCrLf &
"Der Import dieser Datei wurde abgebrochen."
End If
Dim spaceCaption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
MessageBox.Show(spaceMsg, spaceCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen wegen Leerzeichen-Problem [{originalName}{ext}].")
Return Nothing
End If
' ── 3) Problematische Sonderzeichen prüfen ───────────────────────────
Dim found As New System.Text.StringBuilder()
For Each c As Char In ProblematicChars
If originalName.IndexOf(c) >= 0 Then
If found.Length > 0 Then found.Append(" ")
found.Append($"'{c}'")
End If
Next
If found.Length = 0 Then
Return filePath
End If
LOGGER?.Warn($"CheckAndSanitizeFilename: Problematische Zeichen in [{originalName}{ext}]: {found}")
Dim msg As String
If USER_LANGUAGE <> "de-DE" Then
msg = $"The filename contains characters that cause problems during database import or file handling:" &
vbCrLf & vbCrLf &
$"File: {originalName}{ext}" & vbCrLf &
$"Problematic chars: {found}" & vbCrLf & vbCrLf &
"Please rename the file and try again." & vbCrLf &
"The import of this file has been aborted."
Else
msg = $"Der Dateiname enthält nicht sichtbare Zeichen, die beim Datenbankimport oder späteren Dateihandling in windream Probleme verursachen:" &
vbCrLf & vbCrLf &
$"Datei: {originalName}{ext}" & vbCrLf &
$"Problematische Zeichen: {found}" & vbCrLf & vbCrLf &
"Ursache dafür kann sein, das die Datei aus einer NICHT Windows Umgebung erstellt wurde. (MacOS, Linux etc)" & vbCrLf &
"Bitte benennen Sie die Datei um und versuchen Sie es erneut." & vbCrLf &
"Der Import dieser Datei wurde abgebrochen."
End If
Dim caption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
MessageBox.Show(msg, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen für [{originalName}{ext}].")
Return Nothing
Catch ex As System.Exception
LOGGER?.Warn("CheckAndSanitizeFilename Fehler: " & ex.Message)
Return filePath
End Try
End Function
Public Shared Function Drop_File(e As DragEventArgs) Public Shared Function Drop_File(e As DragEventArgs)
Try Try
LOGGER.Debug("In Drop_File....") LOGGER.Debug("In Drop_File....")
@@ -12,10 +137,6 @@ Public Class ClassDragDrop
files_dropped = New String() {} files_dropped = New String() {}
' 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 hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor") Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
Dim hasOutlookContents As Boolean = e.Data.GetDataPresent("FileContents") Dim hasOutlookContents As Boolean = e.Data.GetDataPresent("FileContents")
@@ -30,16 +151,14 @@ Public Class ClassDragDrop
End If End If
'2) ATTACHMENT oder komplette Mail aus Outlook/WebView2: KEIN Descriptor+Contents, ABER FileDrop vorhanden '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 If hasFileDrop AndAlso (hasChromiumMime OrElse hasFileNameW) AndAlso Not hasOutlookContents Then
LOGGER?.Debug("WebView2/Outlook Attachment or Mail: try FileDrop, skip Outlook COM initially") LOGGER?.Debug("WebView2/Outlook Attachment or Mail: try FileDrop, skip Outlook COM initially")
Dim ok As Boolean = HandleFileDrop(e) Dim ok As Boolean = HandleFileDrop(e)
If ok Then Return True 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.") LOGGER?.Warn("FileDrop vorhanden, aber leer. Fallback auf Outlook COM für komplette Mail.")
ScheduleOutlookComFallback() ScheduleOutlookComFallback()
Return True ' Wichtig: UI-Thread nicht blockieren; wir verarbeiten asynchron. Return True
End If End If
'3) Outlook Mail (.msg): Descriptor ohne Contents ODER Chromium/WebView2 Indikatoren nur wenn KEIN FileDrop vorhanden '3) Outlook Mail (.msg): Descriptor ohne Contents ODER Chromium/WebView2 Indikatoren nur wenn KEIN FileDrop vorhanden
@@ -70,7 +189,6 @@ Public Class ClassDragDrop
Return True Return True
Else Else
LOGGER?.Warn("Outlook: Keine Auswahl im Explorer und kein ActiveInspector.CurrentItem verfügbar.") LOGGER?.Warn("Outlook: Keine Auswahl im Explorer und kein ActiveInspector.CurrentItem verfügbar.")
' Namen loggen aber zurück zum FileDrop-Fallback
If hasFileNameW Then If hasFileNameW Then
Dim namesObj As Object = e.Data.GetData(If(e.Data.GetDataPresent("FileNameW"), "FileNameW", "FileName"), True) Dim namesObj As Object = e.Data.GetData(If(e.Data.GetDataPresent("FileNameW"), "FileNameW", "FileName"), True)
Dim names As String() = TryCast(namesObj, String()) Dim names As String() = TryCast(namesObj, String())
@@ -116,13 +234,11 @@ CheckFileDrop:
LOGGER?.Warn("Drop_File: Kein extrahierbarer Inhalt. Bitte Attachment aus der Nachrichtenliste ziehen oder zunächst speichern.") LOGGER?.Warn("Drop_File: Kein extrahierbarer Inhalt. Bitte Attachment aus der Nachrichtenliste ziehen oder zunächst speichern.")
Return False Return False
End Function End Function
' FileDrop defensiv behandeln erst ohne, dann mit autoConvert ' FileDrop defensiv behandeln erst ohne, dann mit autoConvert
Private Shared Function HandleFileDrop(e As DragEventArgs) As Boolean Private Shared Function HandleFileDrop(e As DragEventArgs) As Boolean
Try Try
' Versuch1: ohne AutoConvert
Dim rawObj As Object = e.Data.GetData(DataFormats.FileDrop) Dim rawObj As Object = e.Data.GetData(DataFormats.FileDrop)
Dim rawFiles As String() = TryCast(rawObj, String()) Dim rawFiles As String() = TryCast(rawObj, String())
If Not (rawFiles Is Nothing OrElse rawFiles.Length = 0) Then If Not (rawFiles Is Nothing OrElse rawFiles.Length = 0) Then
@@ -133,7 +249,6 @@ CheckFileDrop:
Return True Return True
End If End If
' Versuch2: mit AutoConvert (delayed rendering)
Dim convObj As Object = e.Data.GetData(DataFormats.FileDrop, True) Dim convObj As Object = e.Data.GetData(DataFormats.FileDrop, True)
Dim convFiles As String() = TryCast(convObj, String()) Dim convFiles As String() = TryCast(convObj, String())
If Not (convFiles Is Nothing OrElse convFiles.Length = 0) Then If Not (convFiles Is Nothing OrElse convFiles.Length = 0) Then
@@ -151,11 +266,21 @@ CheckFileDrop:
Return False Return False
End Try End Try
End Function End Function
Private Shared Sub AppendDroppedFile(prefix As String, filePath As String)
''' <summary>
''' Hängt eine Datei an files_dropped an mit vorheriger Sonderzeichen-Prüfung.
''' Gibt False zurück wenn der Dateiname ungültig ist.
''' </summary>
Private Shared Function AppendDroppedFile(prefix As String, filePath As String) As Boolean
Dim checkedPath As String = CheckAndSanitizeFilename(filePath)
If checkedPath Is Nothing Then
Return False
End If
Dim idx As Integer = files_dropped.Length Dim idx As Integer = files_dropped.Length
ReDim Preserve files_dropped(idx) ReDim Preserve files_dropped(idx)
files_dropped(idx) = prefix & filePath files_dropped(idx) = prefix & checkedPath
End Sub Return True
End Function
Private Shared Sub SaveMailItemToTemp(ByVal mailObj As Object) Private Shared Sub SaveMailItemToTemp(ByVal mailObj As Object)
Dim subj As String = "" Dim subj As String = ""
@@ -197,7 +322,6 @@ CheckFileDrop:
Next Next
If saved Then If saved Then
' UI-Thread benachrichtigen
Dim uiForm = If(System.Windows.Forms.Application.OpenForms.Count > 0, System.Windows.Forms.Application.OpenForms(0), Nothing) Dim uiForm = If(System.Windows.Forms.Application.OpenForms.Count > 0, System.Windows.Forms.Application.OpenForms(0), Nothing)
If uiForm IsNot Nothing Then If uiForm IsNot Nothing Then
uiForm.BeginInvoke( uiForm.BeginInvoke(
@@ -209,7 +333,6 @@ CheckFileDrop:
End Try End Try
End Sub) End Sub)
Else Else
' Falls kein Form verfügbar, zumindest Event auslösen (Listener müssen ggf. selbst marshalen)
RaiseEvent FilesDroppedReady(files_dropped) RaiseEvent FilesDroppedReady(files_dropped)
End If End If
Else Else
@@ -270,6 +393,12 @@ CheckFileDrop:
Public Shared Sub Drag_enter(e As DragEventArgs) Public Shared Sub Drag_enter(e As DragEventArgs)
Try Try
My.Settings.WD_INDEXDOKART_SAVE = "" My.Settings.WD_INDEXDOKART_SAVE = ""
' ✅ DocID-Format hat Vorrang Early Exit
If e.Data.GetDataPresent(DRAGDROP_FORMAT_DOCID) Then
e.Effect = DragDropEffects.Copy
LOGGER?.Debug("DragEnter ... DocID-Format erkannt (Inter-Instance Transfer)")
Return
End If
Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW") Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor") Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
@@ -297,5 +426,4 @@ CheckFileDrop:
End Try End Try
End Sub End Sub
End Class
End Class

View File

@@ -258,24 +258,26 @@ Public Class ClassHelper
End If End If
' ###### Prozess starten ###### ' ###### Prozess starten ######
' Prozess kann Nothing sein, wenn eine bestehende Anwendung (z. B. Outlook)
' die Datei übernimmt, ohne einen neuen Prozess zu erstellen.
If oMyProcess IsNot Nothing Then
Dim ProcID As Integer = oMyProcess.Id
LOGGER.Debug($"Started process ID {ProcID} for document [{BW_DocPath}].")
' ID des gestarteten Prozesses holen (nicht den eigenen!) oMyProcess.WaitForExit()
Dim ProcID As Integer = oMyProcess.Id
LOGGER.Debug($"Started process ID {ProcID} for document [{BW_DocPath}].")
' Warten, bis der Benutzer das Dokument geschlossen hat oExtension = Path.GetExtension(BW_DocPath).ToLower()
oMyProcess.WaitForExit() LOGGER.Debug($"Checking if file extension [{oExtension}] may change during edit...")
' Nachbearbeitung, wenn Format bearbeitbar ist
oExtension = Path.GetExtension(BW_DocPath).ToLower()
LOGGER.Debug($"Checking if file extension [{oExtension}] may change during edit...")
If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) And oOverrideRunPath = "" Then
LOGGER.Debug("Create possible Document change in TBPMO_DOC_ID_CHANGED.")
Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID,DOC_PATH) VALUES (" &
$"{USER_GUID},'{ProcID}',9999,{BW_DocID},0,'{BW_DocPath}')"
MYDB_ECM.ExecuteNonQuery(oInsert)
If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) And oOverrideRunPath = "" Then
LOGGER.Debug("Create possible Document change in TBPMO_DOC_ID_CHANGED.")
Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID,DOC_PATH) VALUES (" &
$"{USER_GUID},'{ProcID}',9999,{BW_DocID},0,'{BW_DocPath}')"
MYDB_ECM.ExecuteNonQuery(oInsert)
End If
Else
' Kein neuer Prozess gestartet Datei wurde von bestehender Anwendung übernommen
LOGGER.Debug($"No new process created for [{BW_DocPath}]. File likely handled by existing application (e.g. Outlook).")
End If End If
Catch ex As Exception Catch ex As Exception
@@ -301,68 +303,7 @@ Public Class ClassHelper
End Try End Try
End Try End Try
End Sub End Sub
'Private Shared Sub BWFileHandler_DoWork()
' Try
' Dim oOverrideRunPath As String = ""
' Dim oExtension = Path.GetExtension(BW_DocPath).ToLower
' For Each oROW As DataRow In CURRENT_TBFILE_EXTENSION_OVERRIDE.Rows
' If oExtension.Replace(".", "") = oROW.Item("FILE_EXTENSION") Then
' LOGGER.Debug($"Specific fileextension override for extension [{oExtension}] found! ")
' oOverrideRunPath = oROW.Item("PROCESS")
' End If
' Next
' Dim oMyProcess = New Process()
' Dim oSql
' Try
' '######
' Dim startInfo As New ProcessStartInfo()
' If oOverrideRunPath <> "" Then
' startInfo.FileName = oOverrideRunPath
' startInfo.Arguments = """" & BW_DocPath & """"
' startInfo.UseShellExecute = True
' startInfo.RedirectStandardOutput = False
' Else
' startInfo.FileName = BW_DocPath
' startInfo.UseShellExecute = True
' startInfo.RedirectStandardOutput = False
' End If
' '#####
' oMyProcess.Start(startInfo)
' Dim myViewerProcessID = oMyProcess.Id
' oMyProcess.WaitForExit()
' oExtension = Path.GetExtension(BW_DocPath).ToLower
' LOGGER.Debug($"Checking oExtension [{oExtension}]...")
' If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) Then
' oSql = $"SELECT * FROM VWOF_DOCID_HANDLE WHERE dwParentID = {BW_ParentID} and [Filename] = '{BW_Filename}'"
' Dim oDTNEWDoc As DataTable = MYDB_ECM.GetDatatable(oSql)
' If Not IsNothing(oDTNEWDoc) Then
' If oDTNEWDoc.Rows.Count = 1 Then
' Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID, DOC_PATH) VALUES (
' {USER_GUID},'{myViewerProcessID.ToString}',{oDTNEWDoc.Rows(0).Item("dwVersionID")},{BW_DocID},{oDTNEWDoc.Rows(0).Item("NewDocID")}, '{BW_DocPath}')"
' MYDB_ECM.ExecuteNonQuery(oInsert)
' End If
' End If
' End If
' Catch ex As Exception
' LOGGER.Warn("Error in Process1.Start(): " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID)
' MsgBox("Error in OpenFile: " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID, MsgBoxStyle.Exclamation)
' Exit Sub
' End Try
' Catch ex As Exception
' LOGGER.Warn("Error in Process.Start(): " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID)
' Try
' Process.Start(BW_DocPath)
' Catch ex1 As Exception
' LOGGER.Warn("Error in Process.Start(1): " & ex1.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID)
' End Try
' End Try
'End Sub
Private Shared Sub FOLDER_OPEN(PATH As Object, DocID As String) Private Shared Sub FOLDER_OPEN(PATH As Object, DocID As String)
Try Try
If PATH <> Nothing Then If PATH <> Nothing Then
@@ -461,12 +402,35 @@ Public Class ClassHelper
End Function End Function
Public Shared Sub REMOVE_OLD_DROP_FILES() Public Shared Sub REMOVE_OLD_DROP_FILES()
Try Try
' ✅ NEU: Pre-Check - welche Dateien sind betroffen?
Dim preCheckSQL = $"SELECT GUID, FILENAME_ONLY, ADDED_WHEN, DATEDIFF(MINUTE, ADDED_WHEN, GETDATE()) AS AGE_MINUTES " &
$"FROM TBPMO_FILES_USER " &
$"WHERE ADDED_WHEN < DATEADD(MINUTE, -15, GETDATE()) " &
$"AND WORKED = 0 AND USER_WORK = '{USER_USERNAME}'"
Dim preCheckDT = MYDB_ECM.GetDatatable(preCheckSQL)
If preCheckDT IsNot Nothing AndAlso preCheckDT.Rows.Count > 0 Then
LOGGER.Warn($"REMOVE_OLD_DROP_FILES: {preCheckDT.Rows.Count} Dateien werden als TIMEOUT markiert:")
For Each row As DataRow In preCheckDT.Rows
LOGGER.Warn($" - GUID={row("GUID")}, Datei={row("FILENAME_ONLY")}, Alter={row("AGE_MINUTES")} Minuten")
Next
Else
LOGGER.Debug($"REMOVE_OLD_DROP_FILES: Keine Dateien älter als 15 Minuten (User: {USER_USERNAME})")
End If
' ✅ Dann UPDATE
Dim oDEL = String.Format("UPDATE [DD_ECM].[dbo].[TBPMO_FILES_USER] Dim oDEL = String.Format("UPDATE [DD_ECM].[dbo].[TBPMO_FILES_USER]
SET [USER_WORK] = [USER_WORK] + '_TIMEOUT', SET [USER_WORK] = [USER_WORK] + '_TIMEOUT',
WORKED = 1 WORKED = 1
WHERE ADDED_WHEN < DATEADD(MINUTE, -5, GETDATE()) WHERE ADDED_WHEN < DATEADD(MINUTE, -15, GETDATE())
AND WORKED = 0 AND USER_WORK = '{0}' ;", USER_USERNAME) AND WORKED = 0 AND USER_WORK = '{0}' ;", USER_USERNAME)
MYDB_ECM.ExecuteNonQuery(oDEL)
Dim rowsAffected = MYDB_ECM.ExecuteNonQuery(oDEL)
If rowsAffected > 0 Then
LOGGER.Warn($"REMOVE_OLD_DROP_FILES: {rowsAffected} Dateien wurden als TIMEOUT markiert")
End If
Catch ex As Exception Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while REMOVE_OLD_DROP_FILES") MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while REMOVE_OLD_DROP_FILES")
End Try End Try
@@ -475,7 +439,19 @@ Public Class ClassHelper
Try Try
Dim sql = String.Format("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER WHERE (USER_WORK = '{0}') AND WORKED = 0", USER_USERNAME) Dim sql = String.Format("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER WHERE (USER_WORK = '{0}') AND WORKED = 0", USER_USERNAME)
CURRENT_TBPMO_FILES_USER = MYDB_ECM.GetDatatable(sql) CURRENT_TBPMO_FILES_USER = MYDB_ECM.GetDatatable(sql)
' ✅ NEU: Logging
If CURRENT_TBPMO_FILES_USER Is Nothing Then
LOGGER.Warn($"Create_USER_FILE_TABLE: GetDatatable gab Nothing zurück (User: {USER_USERNAME})")
Else
LOGGER.Debug($"Create_USER_FILE_TABLE: {CURRENT_TBPMO_FILES_USER.Rows.Count} Dateien geladen (User: {USER_USERNAME})")
' ✅ DEBUG: Zeige GUIDs der geladenen Dateien
For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows
LOGGER.Debug($" - GUID={row("GUID")}, WORKED={row("WORKED")}, Datei={row("FILENAME2WORK")}")
Next
End If
Catch ex As Exception Catch ex As Exception
LOGGER.Error($"Create_USER_FILE_TABLE Exception: {ex.Message}")
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while creating User_File_Table") MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while creating User_File_Table")
End Try End Try
End Sub End Sub
@@ -534,7 +510,7 @@ Public Class ClassHelper
End Function End Function
Public Shared Function Insert_USER_File(pFilename As String, handleType As String) Public Shared Function Insert_USER_File(pFilename As String, handleType As String)
Try Try
Dim filename_only As String = Path.GetFileName(pFilename) Dim oImport_filename_only As String = Path.GetFileName(pFilename)
Dim CURRENT_FILE_HASH = "" Dim CURRENT_FILE_HASH = ""
If File.Exists(pFilename) Then If File.Exists(pFilename) Then
@@ -551,9 +527,11 @@ Public Class ClassHelper
Else Else
LOGGER.Warn($"File does not exist: [{pFilename}] - Cannot compute hash.") LOGGER.Warn($"File does not exist: [{pFilename}] - Cannot compute hash.")
End If End If
Dim oSQL = $"SELECT Filename, ADDED_WHO, FORMAT(ADDED_WHEN, 'dd-MM-yyyy HH:mm') AS ADDED_WHEN_STRING FROM TBPMO_DOCRESULT_LIST WHERE FILE_HASH = '{CURRENT_FILE_HASH}' ORDER BY ADDED_WHEN DESC" Dim oSQL = $"SELECT Filename, ADDED_WHO, FORMAT(ADDED_WHEN, 'dd-MM-yyyy HH:mm') AS ADDED_WHEN_STRING FROM TBPMO_DOCRESULT_LIST WHERE FILE_HASH = '{CURRENT_FILE_HASH}' ORDER BY ADDED_WHEN DESC"
LOGGER.Debug($"Inserting File - hash is [{CURRENT_FILE_HASH}]") LOGGER.Debug($"Inserting File - hash is [{CURRENT_FILE_HASH}]")
Dim oDTCHECK As DataTable = MYDB_ECM.GetDatatable(oSQL) Dim oDTCHECK As DataTable = MYDB_ECM.GetDatatable(oSQL)
If Not IsNothing(oDTCHECK) Then If Not IsNothing(oDTCHECK) Then
If oDTCHECK.Rows.Count >= 1 Then If oDTCHECK.Rows.Count >= 1 Then
LOGGER.Info($"We got a file with the same hash [{CURRENT_FILE_HASH}]") LOGGER.Info($"We got a file with the same hash [{CURRENT_FILE_HASH}]")
@@ -561,34 +539,74 @@ Public Class ClassHelper
Dim oUSER = oDTCHECK.Rows(0).Item(1) Dim oUSER = oDTCHECK.Rows(0).Item(1)
Dim oADDED_WHEN = oDTCHECK.Rows(0).Item(2) Dim oADDED_WHEN = oDTCHECK.Rows(0).Item(2)
Dim oMSG As String Dim oMSG As String
If USER_LANGUAGE <> "de-DE" Then If USER_LANGUAGE <> "de-DE" Then
oMSG = $"This file has already been imported into orgFLOW!" & vbCrLf & oMSG = $"This file [{oImport_filename_only}] has already been imported into orgFLOW!" & vbCrLf &
$"File: [{oFilename}]" & vbCrLf & $"File already imported: [{oFilename}]" & vbCrLf &
$"Imported on: {oADDED_WHEN}" & vbCrLf & $"Imported on: {oADDED_WHEN}" & vbCrLf &
$"Imported by: {oUSER}" & vbCrLf & $"Imported by: {oUSER}" & vbCrLf &
$"Total imports with identical content: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf & $"Total imports with identical content: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf &
"Do you want to import this file again?" & vbCrLf & "Do you want to import this file again?" & vbCrLf &
"NO → Teh complete Import will be cancelled." "NO → The complete import will be cancelled."
Else Else
oMSG = $"Diese Datei wurde bereits in orgFLOW importiert!" & vbCrLf & oMSG = $"Diese Datei [{oImport_filename_only}] wurde bereits in orgFLOW importiert!" & vbCrLf &
$"Datei: [{oFilename}]" & vbCrLf & $"Bereits vorhandene Datei: [{oFilename}]" & vbCrLf &
$"Importiert am: {oADDED_WHEN}" & vbCrLf & $"Importiert am: {oADDED_WHEN}" & vbCrLf &
$"Importiert von: {oUSER}" & vbCrLf & $"Importiert von: {oUSER}" & vbCrLf &
$"Anzahl Importe mit identischem Inhalt: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf & $"Anzahl Importe mit identischem Inhalt: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf &
"Möchten Sie die Datei dennoch erneut importieren?" & vbCrLf & "Möchten Sie die Datei dennoch erneut importieren?" & vbCrLf &
"NEIN → Der gesamte Import (alle folgenden) wird abgebrochen." "NEIN → Der gesamte Import (alle folgenden) wird abgebrochen."
End If End If
Dim result As MsgBoxResult Dim result As MsgBoxResult
result = MessageBox.Show(oMSG, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) result = MessageBox.Show(oMSG, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.No Then If result = MsgBoxResult.No Then
LOGGER.Info($"User wählte NEIN bei Hash-Duplikat-Check für [{oImport_filename_only}] - Import abgebrochen")
Return False Return False
Else
LOGGER.Info($"User wählte JA bei Hash-Duplikat-Check für [{oImport_filename_only}] - fahre fort")
End If End If
End If End If
End If End If
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK,HANDLE_TYPE,FILENAME_ONLY,FILE_HASH) VALUES ('{0}','{1}','{2}','{3}','{4}')", pFilename, USER_USERNAME, handleType, filename_only, CURRENT_FILE_HASH) ' ✅ NEU: Pre-Check - gibt es bereits einen Eintrag mit diesem Hash?
Return MYDB_ECM.ExecuteNonQuery(ins) Dim preCheckSQL = $"SELECT GUID, USER_WORK, WORKED FROM TBPMO_FILES_USER WHERE FILE_HASH = '{CURRENT_FILE_HASH}' AND USER_WORK = '{USER_USERNAME}'"
Dim preCheckDT = MYDB_ECM.GetDatatable(preCheckSQL)
If preCheckDT IsNot Nothing AndAlso preCheckDT.Rows.Count > 0 Then
LOGGER.Warn($"WARNUNG: Datei mit Hash [{CURRENT_FILE_HASH}] bereits in TBPMO_FILES_USER vorhanden:")
For Each row As DataRow In preCheckDT.Rows
LOGGER.Warn($" - GUID={row("GUID")}, USER_WORK={row("USER_WORK")}, WORKED={row("WORKED")}")
Next
End If
' ✅ INSERT mit explizitem Logging
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK, HANDLE_TYPE, FILENAME_ONLY, FILE_HASH) VALUES ('{0}','{1}','{2}','{3}','{4}')", pFilename, USER_USERNAME, handleType, oImport_filename_only, CURRENT_FILE_HASH)
LOGGER.Debug($"Führe INSERT aus: [{ins}]")
Dim insertResult = MYDB_ECM.ExecuteNonQuery(ins)
If insertResult Then
' ✅ VERIFY - wurde wirklich eingefügt?
Dim verifySQL = $"SELECT TOP 1 GUID, ADDED_WHEN FROM TBPMO_FILES_USER WHERE FILE_HASH = '{CURRENT_FILE_HASH}' AND USER_WORK = '{USER_USERNAME}' ORDER BY GUID DESC"
Dim verifyDT = MYDB_ECM.GetDatatable(verifySQL)
If verifyDT IsNot Nothing AndAlso verifyDT.Rows.Count > 0 Then
Dim insertedGUID = verifyDT.Rows(0)("GUID")
Dim insertedADDED_WHEN = verifyDT.Rows(0)("ADDED_WHEN")
LOGGER.Info($"INSERT ERFOLGREICH: GUID={insertedGUID}, ADDED_WHEN={insertedADDED_WHEN}, Datei=[{oImport_filename_only}]")
Else
LOGGER.Error($"INSERT fehlgeschlagen (VERIFY)! Datei=[{oImport_filename_only}], Hash=[{CURRENT_FILE_HASH}]")
End If
Else
LOGGER.Error($"INSERT fehlgeschlagen (ExecuteNonQuery)! Datei=[{oImport_filename_only}]")
End If
Return insertResult
Catch ex As Exception Catch ex As Exception
LOGGER.Error($"Insert_USER_File Exception: {ex.Message}")
MsgBox("Unexpected Error in Insert file for user (TBPMO_FILES_USER): " & ex.Message, MsgBoxStyle.Critical) MsgBox("Unexpected Error in Insert file for user (TBPMO_FILES_USER): " & ex.Message, MsgBoxStyle.Critical)
Return False Return False
End Try End Try

View File

@@ -230,8 +230,8 @@ Public Class ClassWDRights
End Select End Select
MSG_RESULT &= String.Format("Error while working on RightChange:" & vbNewLine & "Fileright: {0}" & vbNewLine & "User: {1} " & vbNewLine & "File: {2}", _right, oFileRightString, reldocpath) & vbNewLine MSG_RESULT &= String.Format("Error while working on RightChange:" & vbNewLine & "Fileright: {0}" & vbNewLine & "User: {1} " & vbNewLine & "File: {2}", _right, oFileRightString, reldocpath) & vbNewLine
LOGGER.Warn(ex.Message) LOGGER.Warn(ex.Message)
End Try End Try
Next Next
'Für jede Gruppe das Recht einzeln hinzufügen 'Für jede Gruppe das Recht einzeln hinzufügen

Binary file not shown.

View File

@@ -46,9 +46,9 @@ Module ModuleRuntimeVariables
Public CURRENT_SCREEN_ID As Integer = 1 Public CURRENT_SCREEN_ID As Integer = 1
Public CURRENT_CONTROL_ID As Integer Public CURRENT_CONTROL_ID As Integer
Public CURRENT_RECORD_ID As Integer
Public CURRENT_NODE_GUID As Integer Public CURRENT_RECORD_ID As Integer = 0
Public CURRENT_NODEID As Integer Public CURRENT_DOC_ID As Integer = 0
Public CURRENT_CHANGE_STEP As Integer = 0 Public CURRENT_CHANGE_STEP As Integer = 0
@@ -73,7 +73,7 @@ Module ModuleRuntimeVariables
Public CURRENT_REDUNDANT_FORMVIEW_ID As Integer Public CURRENT_REDUNDANT_FORMVIEW_ID As Integer
'Public CURRENT_MASTER_FORM_ID As Integer 'Public CURRENT_MASTER_FORM_ID As Integer
Public CURRENT_FILEIN_WD As String Public CURRENT_FILEIN_WD As String
Public CURRENT_DOC_ID 'Public CURRENT_DOC_ID
Public CURRENT_NAVIGATION_TYPE As String = "DEFAULT" Public CURRENT_NAVIGATION_TYPE As String = "DEFAULT"
Public CURRENT_SELECTED_NODE As TreeNode Public CURRENT_SELECTED_NODE As TreeNode

View File

@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben: ' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("3.7.2.0")> <Assembly: AssemblyVersion("3.7.3.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: NeutralResourcesLanguageAttribute("")> <Assembly: NeutralResourcesLanguageAttribute("")>

View File

@@ -386,6 +386,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Classes\ClassConfig.vb" /> <Compile Include="Classes\ClassConfig.vb" />
<Compile Include="Classes\ClassDataCache.vb" />
<Compile Include="Classes\ClassTreeListViewState.vb" /> <Compile Include="Classes\ClassTreeListViewState.vb" />
<Compile Include="Classes\Commands\ClassNodeCommands.vb" /> <Compile Include="Classes\Commands\ClassNodeCommands.vb" />
<Compile Include="Classes\NodeNavigation\ClassAsyncNodeBuild.vb" /> <Compile Include="Classes\NodeNavigation\ClassAsyncNodeBuild.vb" />
@@ -549,6 +550,12 @@
<Compile Include="frmNodeNavigation.vb"> <Compile Include="frmNodeNavigation.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="frmNodeNavigation_RenameNode.Designer.vb">
<DependentUpon>frmNodeNavigation_RenameNode.vb</DependentUpon>
</Compile>
<Compile Include="frmNodeNavigation_RenameNode.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmRight_Management.Designer.vb"> <Compile Include="frmRight_Management.Designer.vb">
<DependentUpon>frmRight_Management.vb</DependentUpon> <DependentUpon>frmRight_Management.vb</DependentUpon>
</Compile> </Compile>
@@ -1005,6 +1012,9 @@
<DependentUpon>frmNodeNavigation.vb</DependentUpon> <DependentUpon>frmNodeNavigation.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmNodeNavigation_RenameNode.resx">
<DependentUpon>frmNodeNavigation_RenameNode.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmRecordView.en-US.resx"> <EmbeddedResource Include="frmRecordView.en-US.resx">
<DependentUpon>frmRecordView.vb</DependentUpon> <DependentUpon>frmRecordView.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@@ -1716,6 +1726,7 @@
<None Include="MailLicense.xml"> <None Include="MailLicense.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<Content Include="Log_ewa.txt" />
<Content Include="ORGFLOW_Icon_16x16.ico" /> <Content Include="ORGFLOW_Icon_16x16.ico" />
<Content Include="ORGFLOW_Icon_256x256.ico" /> <Content Include="ORGFLOW_Icon_256x256.ico" />
<Content Include="Resources\cube.ico" /> <Content Include="Resources\cube.ico" />

View File

@@ -33,41 +33,11 @@ Public Class frmDocRecordLink
If CURRENT_LINK_ENTITY_ID = 0 Then If CURRENT_LINK_ENTITY_ID = 0 Then
CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID
End If End If
'Try
' DT_RECORDS.Columns.Add("already linked", Type.GetType("System.Boolean")).SetOrdinal(0)
' DT_RECORDS.Columns("already linked").DefaultValue = False
'Catch ex As Exception
'End Try
'Try
' For Each row As DataRow In CURRENT_DT_SELECTED_FILES.Rows
' Dim DOC_ID = row.Item("DOC_ID")
' Dim sel = String.Format("select T.RECORD_ID FROM TBPMO_DOC_RECORD_LINK T, TBPMO_RECORD T1 WHERE T.RECORD_ID = T1.GUID AND T1.FORM_ID = {0} AND T.DOC_ID = {1}", CURRENT_LINK_ENTITY_ID, DOC_ID)
' Dim DTRECS_LINKED As DataTable = MYDB_ECM.GetDatatable(sel)
' For Each recrow As DataRow In DTRECS_LINKED.Rows
' For Each rowrecsdisplay As DataRow In DT_RECORDS.Rows
' If rowrecsdisplay.Item("Record-ID") = recrow.Item("RECORD_ID") Then
' rowrecsdisplay.Item("already linked") = True
' Else
' rowrecsdisplay.Item("already linked") = False
' End If
' Next
' Next
' Next
'Catch ex As Exception
' ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in displaying already linked", ex.Message, ex.StackTrace)
'End Try
Try Try
grvwGrid.Columns.Clear() grvwGrid.Columns.Clear()
dgEntityRecords.DataSource = DT_RECORDS dgEntityRecords.DataSource = DT_RECORDS
' grvwGrid.Columns.Item("already linked").Fixed = True
'grvwGrid.PopulateColumns()
'dgEntityRecords.RefreshDataSource()
'grvwGrid.OptionsView.ColumnAutoWidth = False
'grvwGrid.Columns(0).Fixed = FixedStyle.Left
'grvwGrid.BestFitColumns()
Catch ex As Exception Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in format grid", ex.Message, ex.StackTrace) ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in format grid", ex.Message, ex.StackTrace)
@@ -306,17 +276,17 @@ Public Class frmDocRecordLink
End If End If
Try Try
For Each oRow As DataRow In CURRENT_DT_SELECTED_FILES.Rows For Each oRow As DataRow In CURRENT_DT_SELECTED_FILES.Rows
Dim oDocID As Integer
CURRENT_DOC_ID = oRow.Item("DOC_ID") oDocID = oRow.Item("DOC_ID")
LOGGER.Info("DocID {0} will be linked with Record {1} ", CURRENT_DOC_ID.ToString, oSelectedRecordID.ToString) LOGGER.Info("DocID {0} will be linked with Record {1} ", oDocID.ToString, oSelectedRecordID.ToString)
Dim DOC_PATH = oRow.Item("FILEPATH") Dim DOC_PATH = oRow.Item("FILEPATH")
Dim _objecttype = oRow.Item("OBJECTTYPE") Dim _objecttype = oRow.Item("OBJECTTYPE")
WMOBJECTTYPE = _objecttype WMOBJECTTYPE = _objecttype
Dim sql_Exec = String.Format("EXEC PRPMO_CHECK_DOC_RECORD_LINK {0},{1},'{2}','{3}'", oSelectedRecordID, CURRENT_DOC_ID, "MANUAL RECORD-LINK", USER_USERNAME) Dim sql_Exec = String.Format("EXEC PRPMO_CHECK_DOC_RECORD_LINK {0},{1},'{2}','{3}'", oSelectedRecordID, oDocID, "MANUAL RECORD-LINK", USER_USERNAME)
If MYDB_ECM.ExecuteNonQuery(sql_Exec) = False Then If MYDB_ECM.ExecuteNonQuery(sql_Exec) = False Then
MsgBox("Unexpected Error in Inserting Record-Doc Link. Please check logfile!", MsgBoxStyle.Critical) MsgBox("Unexpected Error in Inserting Record-Doc Link. Please check logfile!", MsgBoxStyle.Critical)
Else Else
ClassHelper.InsertEssential_Log(CURRENT_DOC_ID, "DOC-ID", "FILE LINK CREATED FOR RECORD: " & oSelectedRecordID.ToString) ClassHelper.InsertEssential_Log(oDocID, "DOC-ID", "FILE LINK CREATED FOR RECORD: " & oSelectedRecordID.ToString)
oLinkCount += 1 oLinkCount += 1
End If End If
Dim sql = String.Format("SELECT * FROM TBPMO_WD_OBJECTTYPE WHERE OBJECT_TYPE = '{0}'", _objecttype) Dim sql = String.Format("SELECT * FROM TBPMO_WD_OBJECTTYPE WHERE OBJECT_TYPE = '{0}'", _objecttype)

View File

@@ -62,6 +62,8 @@ Partial Class frmNodeNavigation
Me.GridControlDocSearch = New DevExpress.XtraGrid.GridControl() Me.GridControlDocSearch = New DevExpress.XtraGrid.GridControl()
Me.cmsResultFileDetail = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.cmsResultFileDetail = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.tsmiFileProperties = New System.Windows.Forms.ToolStripMenuItem() Me.tsmiFileProperties = New System.Windows.Forms.ToolStripMenuItem()
Me.AlleDateienAuswählenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.AlleDateienEntwaehlenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator()
Me.tsmiFileOpen = New System.Windows.Forms.ToolStripMenuItem() Me.tsmiFileOpen = New System.Windows.Forms.ToolStripMenuItem()
Me.tsmiFileFolderOpen = New System.Windows.Forms.ToolStripMenuItem() Me.tsmiFileFolderOpen = New System.Windows.Forms.ToolStripMenuItem()
@@ -127,6 +129,7 @@ Partial Class frmNodeNavigation
Me.PopupMenu4 = New DevExpress.XtraBars.PopupMenu(Me.components) Me.PopupMenu4 = New DevExpress.XtraBars.PopupMenu(Me.components)
Me.PopupMenu5 = New DevExpress.XtraBars.PopupMenu(Me.components) Me.PopupMenu5 = New DevExpress.XtraBars.PopupMenu(Me.components)
Me.DD_DMSDataSet1 = New DD_Record_Organizer.DD_DMSDataSet() Me.DD_DMSDataSet1 = New DD_Record_Organizer.DD_DMSDataSet()
Me.KnotenUmbenennenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
CType(Me.ribbonNodeNavigation, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ribbonNodeNavigation, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerTreeList, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerTreeList, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -178,7 +181,7 @@ Partial Class frmNodeNavigation
Me.ribbonNodeNavigation.ShowExpandCollapseButton = DevExpress.Utils.DefaultBoolean.[True] Me.ribbonNodeNavigation.ShowExpandCollapseButton = DevExpress.Utils.DefaultBoolean.[True]
Me.ribbonNodeNavigation.ShowMoreCommandsButton = DevExpress.Utils.DefaultBoolean.[False] Me.ribbonNodeNavigation.ShowMoreCommandsButton = DevExpress.Utils.DefaultBoolean.[False]
Me.ribbonNodeNavigation.ShowToolbarCustomizeItem = 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.StatusBar = Me.RibbonStatusBar1
Me.ribbonNodeNavigation.Toolbar.ShowCustomizeItem = False Me.ribbonNodeNavigation.Toolbar.ShowCustomizeItem = False
' '
@@ -389,10 +392,10 @@ Partial Class frmNodeNavigation
Me.RibbonStatusBar1.ItemLinks.Add(Me.BarStaticItemLocked) Me.RibbonStatusBar1.ItemLinks.Add(Me.BarStaticItemLocked)
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmtInfoDoc) Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmtInfoDoc)
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsiDocIDChanged) 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.Name = "RibbonStatusBar1"
Me.RibbonStatusBar1.Ribbon = Me.ribbonNodeNavigation Me.RibbonStatusBar1.Ribbon = Me.ribbonNodeNavigation
Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 23) Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 22)
' '
'RibbonPage2 'RibbonPage2
' '
@@ -414,7 +417,7 @@ Partial Class frmNodeNavigation
' '
Me.SplitContainerTreeList.Panel2.Controls.Add(Me.SplitContainerDocumentSearch) Me.SplitContainerTreeList.Panel2.Controls.Add(Me.SplitContainerDocumentSearch)
Me.SplitContainerTreeList.Panel2.Text = "Panel2" 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.SplitterPosition = 229
Me.SplitContainerTreeList.TabIndex = 2 Me.SplitContainerTreeList.TabIndex = 2
' '
@@ -456,7 +459,7 @@ Partial Class frmNodeNavigation
Me.TreeListDevexpress.OptionsView.ShowVertLines = False Me.TreeListDevexpress.OptionsView.ShowVertLines = False
Me.TreeListDevexpress.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Dark Me.TreeListDevexpress.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Dark
Me.TreeListDevexpress.ParentFieldName = "PARENT_GUID" 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.StateImageList = Me.ImageCollection1
Me.TreeListDevexpress.TabIndex = 1 Me.TreeListDevexpress.TabIndex = 1
' '
@@ -480,7 +483,7 @@ Partial Class frmNodeNavigation
' '
Me.SplitContainerDocumentSearch.Panel2.Controls.Add(Me.GridControlDocSearch) Me.SplitContainerDocumentSearch.Panel2.Controls.Add(Me.GridControlDocSearch)
Me.SplitContainerDocumentSearch.Panel2.Text = "Panel2" 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.SplitterPosition = 133
Me.SplitContainerDocumentSearch.TabIndex = 1 Me.SplitContainerDocumentSearch.TabIndex = 1
' '
@@ -491,7 +494,7 @@ Partial Class frmNodeNavigation
Me.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill Me.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill
Me.pnlControls.Location = New System.Drawing.Point(0, 0) Me.pnlControls.Location = New System.Drawing.Point(0, 0)
Me.pnlControls.Name = "pnlControls" 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 Me.pnlControls.TabIndex = 0
' '
'GridControlDocSearch 'GridControlDocSearch
@@ -505,7 +508,7 @@ Partial Class frmNodeNavigation
Me.GridControlDocSearch.Location = New System.Drawing.Point(0, 0) Me.GridControlDocSearch.Location = New System.Drawing.Point(0, 0)
Me.GridControlDocSearch.MainView = Me.GridViewDoc_Search Me.GridControlDocSearch.MainView = Me.GridViewDoc_Search
Me.GridControlDocSearch.Name = "GridControlDocSearch" 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.TabIndex = 8
Me.GridControlDocSearch.TabStop = False Me.GridControlDocSearch.TabStop = False
Me.GridControlDocSearch.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewDoc_Search}) Me.GridControlDocSearch.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewDoc_Search})
@@ -513,9 +516,9 @@ Partial Class frmNodeNavigation
'cmsResultFileDetail 'cmsResultFileDetail
' '
Me.cmsResultFileDetail.ImageScalingSize = New System.Drawing.Size(18, 18) 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.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsmiFileProperties, Me.AlleDateienAuswählenToolStripMenuItem, Me.AlleDateienEntwaehlenToolStripMenuItem, 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.Name = "ContextMenuStripResultFiles"
Me.cmsResultFileDetail.Size = New System.Drawing.Size(315, 440) Me.cmsResultFileDetail.Size = New System.Drawing.Size(315, 466)
' '
'tsmiFileProperties 'tsmiFileProperties
' '
@@ -524,6 +527,19 @@ Partial Class frmNodeNavigation
Me.tsmiFileProperties.Size = New System.Drawing.Size(314, 24) Me.tsmiFileProperties.Size = New System.Drawing.Size(314, 24)
Me.tsmiFileProperties.Text = "Eigenschaften" Me.tsmiFileProperties.Text = "Eigenschaften"
' '
'AlleDateienAuswählenToolStripMenuItem
'
Me.AlleDateienAuswählenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.checkbox_16xLG
Me.AlleDateienAuswählenToolStripMenuItem.Name = "AlleDateienAuswählenToolStripMenuItem"
Me.AlleDateienAuswählenToolStripMenuItem.Size = New System.Drawing.Size(314, 24)
Me.AlleDateienAuswählenToolStripMenuItem.Text = "Alle Dateien auswählen"
'
'AlleDateienEntwaehlenToolStripMenuItem
'
Me.AlleDateienEntwaehlenToolStripMenuItem.Name = "AlleDateienEntwaehlenToolStripMenuItem"
Me.AlleDateienEntwaehlenToolStripMenuItem.Size = New System.Drawing.Size(314, 24)
Me.AlleDateienEntwaehlenToolStripMenuItem.Text = "Nicht auswählen"
'
'ToolStripSeparator5 'ToolStripSeparator5
' '
Me.ToolStripSeparator5.Name = "ToolStripSeparator5" Me.ToolStripSeparator5.Name = "ToolStripSeparator5"
@@ -731,7 +747,7 @@ Partial Class frmNodeNavigation
' '
Me.SplitContainerDocView.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2 Me.SplitContainerDocView.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
Me.SplitContainerDocView.Dock = System.Windows.Forms.DockStyle.Fill 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" Me.SplitContainerDocView.Name = "SplitContainerDocView"
' '
'SplitContainerDocView.Panel1 'SplitContainerDocView.Panel1
@@ -743,7 +759,7 @@ Partial Class frmNodeNavigation
' '
Me.SplitContainerDocView.Panel2.Controls.Add(Me.DocumentViewer) Me.SplitContainerDocView.Panel2.Controls.Add(Me.DocumentViewer)
Me.SplitContainerDocView.Panel2.Text = "Panel2" 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.SplitterPosition = 776
Me.SplitContainerDocView.TabIndex = 0 Me.SplitContainerDocView.TabIndex = 0
' '
@@ -754,7 +770,7 @@ Partial Class frmNodeNavigation
Me.DocumentViewer.FileLoaded = False Me.DocumentViewer.FileLoaded = False
Me.DocumentViewer.Location = New System.Drawing.Point(0, 0) Me.DocumentViewer.Location = New System.Drawing.Point(0, 0)
Me.DocumentViewer.Name = "DocumentViewer" 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.TabIndex = 0
Me.DocumentViewer.Viewer_ForceTemporaryMode = False Me.DocumentViewer.Viewer_ForceTemporaryMode = False
' '
@@ -770,9 +786,9 @@ Partial Class frmNodeNavigation
' '
'CMSAdmin_Treeview 'CMSAdmin_Treeview
' '
Me.CMSAdmin_Treeview.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.KnotenLöschenadminToolStripMenuItem, Me.KnotenVerschiebenToolStripMenuItem}) Me.CMSAdmin_Treeview.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.KnotenLöschenadminToolStripMenuItem, Me.KnotenVerschiebenToolStripMenuItem, Me.KnotenUmbenennenToolStripMenuItem})
Me.CMSAdmin_Treeview.Name = "CMSAdmin_Treeview" Me.CMSAdmin_Treeview.Name = "CMSAdmin_Treeview"
Me.CMSAdmin_Treeview.Size = New System.Drawing.Size(202, 48) Me.CMSAdmin_Treeview.Size = New System.Drawing.Size(202, 92)
' '
'KnotenLöschenadminToolStripMenuItem 'KnotenLöschenadminToolStripMenuItem
' '
@@ -1062,6 +1078,13 @@ Partial Class frmNodeNavigation
Me.DD_DMSDataSet1.DataSetName = "DD_DMSDataSet" Me.DD_DMSDataSet1.DataSetName = "DD_DMSDataSet"
Me.DD_DMSDataSet1.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema Me.DD_DMSDataSet1.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema
' '
'KnotenUmbenennenToolStripMenuItem
'
Me.KnotenUmbenennenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.brick
Me.KnotenUmbenennenToolStripMenuItem.Name = "KnotenUmbenennenToolStripMenuItem"
Me.KnotenUmbenennenToolStripMenuItem.Size = New System.Drawing.Size(201, 22)
Me.KnotenUmbenennenToolStripMenuItem.Text = "Knoten umbenennen"
'
'frmNodeNavigation 'frmNodeNavigation
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -1220,4 +1243,7 @@ Partial Class frmNodeNavigation
Friend WithEvents bsiDocIDChanged As DevExpress.XtraBars.BarStaticItem Friend WithEvents bsiDocIDChanged As DevExpress.XtraBars.BarStaticItem
Friend WithEvents TsmitmJumpToFilestore As ToolStripMenuItem Friend WithEvents TsmitmJumpToFilestore As ToolStripMenuItem
Friend WithEvents RepositoryItemTextEdit1 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit Friend WithEvents RepositoryItemTextEdit1 As DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
Friend WithEvents AlleDateienAuswählenToolStripMenuItem As ToolStripMenuItem
Friend WithEvents AlleDateienEntwaehlenToolStripMenuItem As ToolStripMenuItem
Friend WithEvents KnotenUmbenennenToolStripMenuItem As ToolStripMenuItem
End Class End Class

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,92 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmNodeNavigation_RenameNode
Inherits DevExpress.XtraEditors.XtraForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmNodeNavigation_RenameNode))
Me.LabelControl1 = New DevExpress.XtraEditors.LabelControl()
Me.txtNode_Caption = New DevExpress.XtraEditors.TextEdit()
Me.btnRename = New DevExpress.XtraEditors.SimpleButton()
Me.btncancel = New DevExpress.XtraEditors.SimpleButton()
CType(Me.txtNode_Caption.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'LabelControl1
'
Me.LabelControl1.Location = New System.Drawing.Point(23, 6)
Me.LabelControl1.Name = "LabelControl1"
Me.LabelControl1.Size = New System.Drawing.Size(60, 13)
Me.LabelControl1.TabIndex = 0
Me.LabelControl1.Text = "Knoten-Text"
'
'txtNode_Caption
'
Me.txtNode_Caption.Location = New System.Drawing.Point(23, 25)
Me.txtNode_Caption.Name = "txtNode_Caption"
Me.txtNode_Caption.Size = New System.Drawing.Size(264, 20)
Me.txtNode_Caption.TabIndex = 1
'
'btnRename
'
Me.btnRename.DialogResult = System.Windows.Forms.DialogResult.OK
Me.btnRename.ImageOptions.SvgImage = CType(resources.GetObject("btnRename.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.btnRename.Location = New System.Drawing.Point(23, 61)
Me.btnRename.Name = "btnRename"
Me.btnRename.Size = New System.Drawing.Size(151, 36)
Me.btnRename.TabIndex = 2
Me.btnRename.Text = "Umbenennen"
'
'btncancel
'
Me.btncancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.btncancel.ImageOptions.SvgImage = CType(resources.GetObject("btncancel.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.btncancel.Location = New System.Drawing.Point(180, 61)
Me.btncancel.Name = "btncancel"
Me.btncancel.Size = New System.Drawing.Size(107, 36)
Me.btncancel.TabIndex = 3
Me.btncancel.Text = "Abbrechen"
'
'frmNodeNavigation_RenameNode
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(318, 109)
Me.Controls.Add(Me.btncancel)
Me.Controls.Add(Me.btnRename)
Me.Controls.Add(Me.txtNode_Caption)
Me.Controls.Add(Me.LabelControl1)
Me.IconOptions.SvgImage = CType(resources.GetObject("frmNodeNavigation_RenameNode.IconOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmNodeNavigation_RenameNode"
Me.Text = "Umbenennen Knoten-Text"
CType(Me.txtNode_Caption.Properties, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents LabelControl1 As DevExpress.XtraEditors.LabelControl
Friend WithEvents txtNode_Caption As DevExpress.XtraEditors.TextEdit
Friend WithEvents btnRename As DevExpress.XtraEditors.SimpleButton
Friend WithEvents btncancel As DevExpress.XtraEditors.SimpleButton
End Class

View File

@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="btnRename.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIIFAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyAvPg0KICA8ZyBpZD0iUmVuYW1lIj4NCiAgICA8cGF0
aCBkPSJNMjEuNiwxMC4zYzAtMC43LTAuMy0xLjMtMC45LTEuN0MyMC4xLDguMiwxOS4xLDgsMTcuOSw4
SDE0djkuOVYxOGg0YzEuMiwwLDIuMi0wLjIsMi45LTAuOCAgIEMyMS43LDE2LjYsMjIsMTYsMjIsMTVj
MC0wLjYtMC4yLTEuMi0wLjctMS42Yy0wLjUtMC40LTEuMS0wLjctMS44LTAuOGMwLjYtMC4yLDEuMS0w
LjUsMS41LTAuOUMyMS40LDExLjMsMjEuNiwxMC45LDIxLjYsMTAuM3ogICAgTTE2LjQsOS43aDAuOWMx
LjEsMCwxLjcsMC40LDEuNywxLjFjMCwwLjQtMC4xLDAuNy0wLjQsMC45QzE4LjQsMTEuOSwxOCwxMiwx
Ny41LDEyaC0xLjFWOS43eiBNMTksMTUuOGMtMC4zLDAuMi0wLjgsMC40LTEuMywwLjQgICBoLTEuM3Yt
Mi42aDEuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC4zLDAuMiwwLjUsMC42LDAuNSwwLjlDMTkuNSwx
NS4zLDE5LjQsMTUuNiwxOSwxNS44eiBNMTcuMiwyMkgxYy0wLjUsMC0xLTAuNS0xLTFWNSAgIGMwLTAu
NSwwLjUtMSwxLTFoMjRjMC41LDAsMSwwLjUsMSwxdjguMmwtMiwyVjZIMnYxNGgxNy4yTDE3LjIsMjJ6
IE00LjEsMThoMi4ybDAuNi0yLjNoMy4ybDAuNiwyLjNIMTNMOS44LDhINy40TDQuMSwxOHogICAgTTgu
NCwxMC43YzAuMS0wLjMsMC4xLTAuNiwwLjEtMC45aDAuMWMwLDAuMywwLjEsMC42LDAuMSwwLjlsMSwz
LjNINy40TDguNCwxMC43eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwYXRoIGQ9Ik0yOSwyMWwtOCw4
bC00LTRsOC04TDI5LDIxeiBNMzAsMjBsMS43LTEuN2MwLjQtMC40LDAuNC0xLDAtMS4zTDI5LDE0LjNj
LTAuNC0wLjQtMS0wLjQtMS4zLDBMMjYsMTZMMzAsMjB6ICAgIE0xNiwyNnY0aDRMMTYsMjZ6IiBjbGFz
cz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
</data>
<data name="btncancel.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANcBAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQo8L3N0
eWxlPg0KICA8cGF0aCBkPSJNMTYsMkM4LjMsMiwyLDguMywyLDE2czYuMywxNCwxNCwxNHMxNC02LjMs
MTQtMTRTMjMuNywyLDE2LDJ6IE0yMywyMGwtMywzbC00LTRsLTQsNGwtMy0zbDQtNGwtNC00bDMtM2w0
LDQgIGw0LTRsMywzbC00LDRMMjMsMjB6IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw==
</value>
</data>
<data name="frmNodeNavigation_RenameNode.IconOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABwFAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyAvPg0KICA8ZyBpZD0iUmVuYW1lXzFfIj4NCiAgICA8
cGF0aCBkPSJNMi4xLDE2aDIuMmwwLjYtMi4zaDMuMkw4LjgsMTZIMTFMNy44LDZINS40TDIuMSwxNnog
TTYuNCw4LjdjMC4xLTAuMywwLjEtMC42LDAuMS0wLjloMC4xICAgYzAsMC4zLDAuMSwwLjYsMC4xLDAu
OWwxLDMuM0g1LjRMNi40LDguN3ogTTE3LjUsMTAuNmMwLjYtMC4yLDEuMS0wLjUsMS41LTAuOWMwLjQt
MC40LDAuNi0wLjksMC42LTEuNGMwLTAuNy0wLjMtMS4zLTAuOS0xLjcgICBDMTguMSw2LjIsMTcuMSw2
LDE1LjksNkgxMnY5LjlWMTZoNGMxLjIsMCwyLjItMC4yLDIuOS0wLjhDMTkuNywxNC42LDIwLDE0LDIw
LDEzYzAtMC42LTAuMi0xLjItMC43LTEuNiAgIEMxOC45LDExLDE4LjMsMTAuNywxNy41LDEwLjZ6IE0x
NC40LDcuN2gwLjljMS4xLDAsMS43LDAuNCwxLjcsMS4xYzAsMC40LTAuMSwwLjctMC40LDAuOUMxNi40
LDkuOSwxNiwxMCwxNS41LDEwaC0xLjFWNy43eiAgICBNMTcsMTMuOGMtMC4zLDAuMi0wLjgsMC40LTEu
MywwLjRoLTEuM3YtMi42aDEuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC4zLDAuMiwwLjUsMC42LDAu
NSwwLjlDMTcuNSwxMy4zLDE3LjQsMTMuNiwxNywxMy44eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxw
YXRoIGQ9Ik0yNywxOWwtOCw4bC00LTRsOC04TDI3LDE5eiBNMjgsMThsMS43LTEuN2MwLjQtMC40LDAu
NC0xLDAtMS4zTDI3LDEyLjNjLTAuNC0wLjQtMS0wLjQtMS4zLDBMMjQsMTRMMjgsMTh6ICAgIE0xNCwy
NHY0aDRMMTQsMjR6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
</data>
</root>

View File

@@ -0,0 +1,24 @@
Public Class frmNodeNavigation_RenameNode
''' <summary>
''' Die initiale Beschriftung des Knotens vor dem Öffnen setzen.
''' </summary>
Public Property NodeCaption As String = ""
''' <summary>
''' Die neue Beschriftung nach erfolgreichem Umbenennen.
''' </summary>
Public Property NewNodeCaption As String = ""
Private Sub frmNodeNavigation_RenameNode_Load(sender As Object, e As EventArgs) Handles Me.Load
txtNode_Caption.Text = NodeCaption
End Sub
Private Sub txtNode_Caption_EditValueChanged(sender As Object, e As EventArgs) Handles txtNode_Caption.EditValueChanged
btnRename.Enabled = Not String.IsNullOrWhiteSpace(txtNode_Caption.Text)
End Sub
Private Sub btnRename_Click(sender As Object, e As EventArgs) Handles btnRename.Click
NewNodeCaption = txtNode_Caption.Text.Trim()
Me.DialogResult = DialogResult.OK
Me.Close()
End Sub
End Class

View File

@@ -33,6 +33,7 @@ Partial Class frmStructureNodeConfig
Dim COMMENTLabel As System.Windows.Forms.Label Dim COMMENTLabel As System.Windows.Forms.Label
Dim Label1 As System.Windows.Forms.Label Dim Label1 As System.Windows.Forms.Label
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStructureNodeConfig)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStructureNodeConfig))
Dim GridLevelNode1 As DevExpress.XtraGrid.GridLevelNode = New DevExpress.XtraGrid.GridLevelNode()
Me.TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource = New System.Windows.Forms.BindingSource(Me.components) Me.TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource = New System.Windows.Forms.BindingSource(Me.components)
Me.DD_DMSDataSet = New DD_Record_Organizer.DD_DMSDataSet() Me.DD_DMSDataSet = New DD_Record_Organizer.DD_DMSDataSet()
Me.GUIDTextBox = New System.Windows.Forms.TextBox() Me.GUIDTextBox = New System.Windows.Forms.TextBox()
@@ -63,16 +64,38 @@ Partial Class frmStructureNodeConfig
Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem2 = 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.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem5 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem5 = New DevExpress.XtraBars.BarButtonItem()
Me.bsitmSave = New DevExpress.XtraBars.BarStaticItem() Me.bsitmSave = New DevExpress.XtraBars.BarStaticItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.Label3 = New System.Windows.Forms.Label() Me.Label3 = New System.Windows.Forms.Label()
Me.CheckEdit1 = New DevExpress.XtraEditors.CheckEdit() Me.CheckEdit1 = New DevExpress.XtraEditors.CheckEdit()
Me.GridControl_Right_AddmanNode_User = New DevExpress.XtraGrid.GridControl()
Me.TBWH_Users1BindingSource = New System.Windows.Forms.BindingSource(Me.components)
Me.GridViewRight_AddmanNode_User = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.GridColumn3 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.colSurname1 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn8 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn9 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.Label5 = New System.Windows.Forms.Label()
Me.btndeleteUser = New System.Windows.Forms.Button()
Me.btnAddUser = New System.Windows.Forms.Button()
Me.TBAD_UsersBindingSource = New System.Windows.Forms.BindingSource(Me.components)
Me.GridControlFreeUsers = New DevExpress.XtraGrid.GridControl()
Me.GridViewFreeUsers = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.colSelect = New DevExpress.XtraGrid.Columns.GridColumn()
Me.colSurname = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn1 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn2 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.colID = New DevExpress.XtraGrid.Columns.GridColumn()
Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.AlleUserAuswählenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.KeineAuswahlToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
GUIDLabel = New System.Windows.Forms.Label() GUIDLabel = New System.Windows.Forms.Label()
TYPE_NODELabel = New System.Windows.Forms.Label() TYPE_NODELabel = New System.Windows.Forms.Label()
ADDED_WHOLabel = New System.Windows.Forms.Label() ADDED_WHOLabel = New System.Windows.Forms.Label()
@@ -92,6 +115,13 @@ Partial Class frmStructureNodeConfig
CType(Me.DD_ECMAdmin, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.DD_ECMAdmin, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.CheckEdit1.Properties, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.CheckEdit1.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridControl_Right_AddmanNode_User, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TBWH_Users1BindingSource, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridViewRight_AddmanNode_User, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TBAD_UsersBindingSource, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridControlFreeUsers, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridViewFreeUsers, System.ComponentModel.ISupportInitialize).BeginInit()
Me.ContextMenuStrip1.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
'GUIDLabel 'GUIDLabel
@@ -109,7 +139,7 @@ Partial Class frmStructureNodeConfig
TYPE_NODELabel.AutoSize = True TYPE_NODELabel.AutoSize = True
TYPE_NODELabel.Location = New System.Drawing.Point(633, 327) TYPE_NODELabel.Location = New System.Drawing.Point(633, 327)
TYPE_NODELabel.Name = "TYPE_NODELabel" TYPE_NODELabel.Name = "TYPE_NODELabel"
TYPE_NODELabel.Size = New System.Drawing.Size(93, 13) TYPE_NODELabel.Size = New System.Drawing.Size(92, 13)
TYPE_NODELabel.TabIndex = 5 TYPE_NODELabel.TabIndex = 5
TYPE_NODELabel.Text = "Node Type/Level:" TYPE_NODELabel.Text = "Node Type/Level:"
' '
@@ -340,12 +370,10 @@ Partial Class frmStructureNodeConfig
' '
'TreeView1 'TreeView1
' '
Me.TreeView1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.TreeView1.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.TreeView1.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TreeView1.Location = New System.Drawing.Point(15, 203) Me.TreeView1.Location = New System.Drawing.Point(15, 203)
Me.TreeView1.Name = "TreeView1" Me.TreeView1.Name = "TreeView1"
Me.TreeView1.Size = New System.Drawing.Size(324, 285) Me.TreeView1.Size = New System.Drawing.Size(324, 273)
Me.TreeView1.TabIndex = 90 Me.TreeView1.TabIndex = 90
' '
'TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter 'TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter
@@ -455,7 +483,7 @@ Partial Class frmStructureNodeConfig
Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Name = "RibbonControl1"
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
Me.RibbonControl1.Size = New System.Drawing.Size(972, 158) Me.RibbonControl1.Size = New System.Drawing.Size(959, 158)
Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1 Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
' '
'BarButtonItem1 'BarButtonItem1
@@ -472,39 +500,6 @@ Partial Class frmStructureNodeConfig
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem2.Name = "BarButtonItem2" Me.BarButtonItem2.Name = "BarButtonItem2"
' '
'RibbonPage1
'
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2, Me.RibbonPageGroup1})
Me.RibbonPage1.Name = "RibbonPage1"
Me.RibbonPage1.Text = "Start"
'
'RibbonPageGroup1
'
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
Me.RibbonPageGroup1.Text = "Knoten-Definition"
'
'RibbonPageGroup2
'
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem3)
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem5)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
Me.RibbonPageGroup2.Text = "Ansicht"
'
'RibbonStatusBar1
'
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmSave)
Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 494)
Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
Me.RibbonStatusBar1.Size = New System.Drawing.Size(972, 22)
'
'RibbonPage2
'
Me.RibbonPage2.Name = "RibbonPage2"
Me.RibbonPage2.Text = "RibbonPage2"
'
'BarButtonItem3 'BarButtonItem3
' '
Me.BarButtonItem3.Caption = "Ausklappen" Me.BarButtonItem3.Caption = "Ausklappen"
@@ -528,12 +523,45 @@ Partial Class frmStructureNodeConfig
Me.bsitmSave.Name = "bsitmSave" Me.bsitmSave.Name = "bsitmSave"
Me.bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing Me.bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing
' '
'RibbonPage1
'
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2, Me.RibbonPageGroup1})
Me.RibbonPage1.Name = "RibbonPage1"
Me.RibbonPage1.Text = "Start"
'
'RibbonPageGroup2
'
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem3)
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem5)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
Me.RibbonPageGroup2.Text = "Ansicht"
'
'RibbonPageGroup1
'
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
Me.RibbonPageGroup1.Text = "Knoten-Definition"
'
'RibbonStatusBar1
'
Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmSave)
Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 772)
Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
Me.RibbonStatusBar1.Size = New System.Drawing.Size(959, 22)
'
'RibbonPage2
'
Me.RibbonPage2.Name = "RibbonPage2"
Me.RibbonPage2.Text = "RibbonPage2"
'
'Label3 'Label3
' '
Me.Label3.AutoSize = True Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(12, 161) Me.Label3.Location = New System.Drawing.Point(12, 161)
Me.Label3.Name = "Label3" Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(889, 26) Me.Label3.Size = New System.Drawing.Size(895, 26)
Me.Label3.TabIndex = 96 Me.Label3.TabIndex = 96
Me.Label3.Text = resources.GetString("Label3.Text") Me.Label3.Text = resources.GetString("Label3.Text")
' '
@@ -546,12 +574,229 @@ Partial Class frmStructureNodeConfig
Me.CheckEdit1.Size = New System.Drawing.Size(112, 18) Me.CheckEdit1.Size = New System.Drawing.Size(112, 18)
Me.CheckEdit1.TabIndex = 97 Me.CheckEdit1.TabIndex = 97
' '
'GridControl_Right_AddmanNode_User
'
Me.GridControl_Right_AddmanNode_User.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.GridControl_Right_AddmanNode_User.ContextMenuStrip = Me.ContextMenuStrip1
Me.GridControl_Right_AddmanNode_User.DataSource = Me.TBWH_Users1BindingSource
GridLevelNode1.RelationName = "Level1"
Me.GridControl_Right_AddmanNode_User.LevelTree.Nodes.AddRange(New DevExpress.XtraGrid.GridLevelNode() {GridLevelNode1})
Me.GridControl_Right_AddmanNode_User.Location = New System.Drawing.Point(15, 498)
Me.GridControl_Right_AddmanNode_User.MainView = Me.GridViewRight_AddmanNode_User
Me.GridControl_Right_AddmanNode_User.Name = "GridControl_Right_AddmanNode_User"
Me.GridControl_Right_AddmanNode_User.ShowOnlyPredefinedDetails = True
Me.GridControl_Right_AddmanNode_User.Size = New System.Drawing.Size(364, 268)
Me.GridControl_Right_AddmanNode_User.TabIndex = 101
Me.GridControl_Right_AddmanNode_User.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewRight_AddmanNode_User})
'
'TBWH_Users1BindingSource
'
Me.TBWH_Users1BindingSource.DataMember = "TBWH_Users1"
Me.TBWH_Users1BindingSource.DataSource = Me.DD_ECMAdmin
'
'GridViewRight_AddmanNode_User
'
Me.GridViewRight_AddmanNode_User.Appearance.EvenRow.BackColor = System.Drawing.Color.LightBlue
Me.GridViewRight_AddmanNode_User.Appearance.EvenRow.Options.UseBackColor = True
Me.GridViewRight_AddmanNode_User.Appearance.FocusedRow.BackColor = System.Drawing.Color.Fuchsia
Me.GridViewRight_AddmanNode_User.Appearance.FocusedRow.Options.UseBackColor = True
Me.GridViewRight_AddmanNode_User.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.colSurname1, Me.GridColumn7, Me.GridColumn8, Me.GridColumn9})
Me.GridViewRight_AddmanNode_User.GridControl = Me.GridControl_Right_AddmanNode_User
Me.GridViewRight_AddmanNode_User.Name = "GridViewRight_AddmanNode_User"
Me.GridViewRight_AddmanNode_User.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewRight_AddmanNode_User.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewRight_AddmanNode_User.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewRight_AddmanNode_User.OptionsSelection.EnableAppearanceFocusedCell = False
Me.GridViewRight_AddmanNode_User.OptionsView.ColumnAutoWidth = False
Me.GridViewRight_AddmanNode_User.OptionsView.EnableAppearanceEvenRow = True
Me.GridViewRight_AddmanNode_User.OptionsView.ShowAutoFilterRow = True
Me.GridViewRight_AddmanNode_User.OptionsView.ShowGroupPanel = False
'
'GridColumn3
'
Me.GridColumn3.Caption = "Selection"
Me.GridColumn3.FieldName = "Select"
Me.GridColumn3.Name = "GridColumn3"
Me.GridColumn3.Visible = True
Me.GridColumn3.VisibleIndex = 0
Me.GridColumn3.Width = 54
'
'colSurname1
'
Me.colSurname1.Caption = "Name"
Me.colSurname1.FieldName = "Surname"
Me.colSurname1.Name = "colSurname1"
Me.colSurname1.Visible = True
Me.colSurname1.VisibleIndex = 1
'
'GridColumn7
'
Me.GridColumn7.FieldName = "Username"
Me.GridColumn7.Name = "GridColumn7"
Me.GridColumn7.OptionsColumn.AllowEdit = False
Me.GridColumn7.Visible = True
Me.GridColumn7.VisibleIndex = 2
Me.GridColumn7.Width = 107
'
'GridColumn8
'
Me.GridColumn8.FieldName = "Email"
Me.GridColumn8.Name = "GridColumn8"
Me.GridColumn8.OptionsColumn.AllowEdit = False
Me.GridColumn8.Visible = True
Me.GridColumn8.VisibleIndex = 3
Me.GridColumn8.Width = 102
'
'GridColumn9
'
Me.GridColumn9.FieldName = "ID"
Me.GridColumn9.Name = "GridColumn9"
'
'Label5
'
Me.Label5.AutoSize = True
Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label5.Location = New System.Drawing.Point(12, 479)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(248, 13)
Me.Label5.TabIndex = 102
Me.Label5.Text = "User mit Rechten zum Hinzufügen von Knoten"
'
'btndeleteUser
'
Me.btndeleteUser.Image = CType(resources.GetObject("btndeleteUser.Image"), System.Drawing.Image)
Me.btndeleteUser.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.btndeleteUser.ImeMode = System.Windows.Forms.ImeMode.NoControl
Me.btndeleteUser.Location = New System.Drawing.Point(385, 530)
Me.btndeleteUser.Name = "btndeleteUser"
Me.btndeleteUser.Size = New System.Drawing.Size(124, 23)
Me.btndeleteUser.TabIndex = 104
Me.btndeleteUser.Text = "User entfernen"
Me.btndeleteUser.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.btndeleteUser.UseVisualStyleBackColor = True
'
'btnAddUser
'
Me.btnAddUser.Image = Global.DD_Record_Organizer.My.Resources.Resources.arrow_left
Me.btnAddUser.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.btnAddUser.ImeMode = System.Windows.Forms.ImeMode.NoControl
Me.btnAddUser.Location = New System.Drawing.Point(386, 501)
Me.btnAddUser.Name = "btnAddUser"
Me.btnAddUser.Size = New System.Drawing.Size(123, 23)
Me.btnAddUser.TabIndex = 103
Me.btnAddUser.Text = "User hinzufügen"
Me.btnAddUser.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.btnAddUser.UseVisualStyleBackColor = True
'
'TBAD_UsersBindingSource
'
Me.TBAD_UsersBindingSource.DataMember = "TBAD_Users"
Me.TBAD_UsersBindingSource.DataSource = Me.DD_ECMAdmin
'
'GridControlFreeUsers
'
Me.GridControlFreeUsers.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.GridControlFreeUsers.ContextMenuStrip = Me.ContextMenuStrip1
Me.GridControlFreeUsers.DataSource = Me.TBAD_UsersBindingSource
Me.GridControlFreeUsers.Location = New System.Drawing.Point(515, 498)
Me.GridControlFreeUsers.MainView = Me.GridViewFreeUsers
Me.GridControlFreeUsers.Name = "GridControlFreeUsers"
Me.GridControlFreeUsers.ShowOnlyPredefinedDetails = True
Me.GridControlFreeUsers.Size = New System.Drawing.Size(378, 268)
Me.GridControlFreeUsers.TabIndex = 105
Me.GridControlFreeUsers.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewFreeUsers})
'
'GridViewFreeUsers
'
Me.GridViewFreeUsers.Appearance.EvenRow.BackColor = System.Drawing.Color.LightBlue
Me.GridViewFreeUsers.Appearance.EvenRow.Options.UseBackColor = True
Me.GridViewFreeUsers.Appearance.FocusedRow.BackColor = System.Drawing.Color.Fuchsia
Me.GridViewFreeUsers.Appearance.FocusedRow.Options.UseBackColor = True
Me.GridViewFreeUsers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colSelect, Me.colSurname, Me.GridColumn1, Me.GridColumn2, Me.colID})
Me.GridViewFreeUsers.GridControl = Me.GridControlFreeUsers
Me.GridViewFreeUsers.Name = "GridViewFreeUsers"
Me.GridViewFreeUsers.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewFreeUsers.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewFreeUsers.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.[False]
Me.GridViewFreeUsers.OptionsSelection.EnableAppearanceFocusedCell = False
Me.GridViewFreeUsers.OptionsView.ColumnAutoWidth = False
Me.GridViewFreeUsers.OptionsView.EnableAppearanceEvenRow = True
Me.GridViewFreeUsers.OptionsView.ShowAutoFilterRow = True
Me.GridViewFreeUsers.OptionsView.ShowGroupPanel = False
'
'colSelect
'
Me.colSelect.Caption = "Selection"
Me.colSelect.FieldName = "Select"
Me.colSelect.Name = "colSelect"
Me.colSelect.Visible = True
Me.colSelect.VisibleIndex = 0
Me.colSelect.Width = 54
'
'colSurname
'
Me.colSurname.Caption = "Name"
Me.colSurname.FieldName = "Surname"
Me.colSurname.Name = "colSurname"
Me.colSurname.Visible = True
Me.colSurname.VisibleIndex = 1
Me.colSurname.Width = 89
'
'GridColumn1
'
Me.GridColumn1.FieldName = "Username"
Me.GridColumn1.Name = "GridColumn1"
Me.GridColumn1.OptionsColumn.AllowEdit = False
Me.GridColumn1.Visible = True
Me.GridColumn1.VisibleIndex = 2
Me.GridColumn1.Width = 98
'
'GridColumn2
'
Me.GridColumn2.FieldName = "Email"
Me.GridColumn2.Name = "GridColumn2"
Me.GridColumn2.OptionsColumn.AllowEdit = False
Me.GridColumn2.Visible = True
Me.GridColumn2.VisibleIndex = 3
Me.GridColumn2.Width = 102
'
'colID
'
Me.colID.FieldName = "ID"
Me.colID.Name = "colID"
'
'ContextMenuStrip1
'
Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AlleUserAuswählenToolStripMenuItem, Me.KeineAuswahlToolStripMenuItem})
Me.ContextMenuStrip1.Name = "ContextMenuStrip1"
Me.ContextMenuStrip1.Size = New System.Drawing.Size(181, 70)
'
'AlleUserAuswählenToolStripMenuItem
'
Me.AlleUserAuswählenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.checkbox_16xLG
Me.AlleUserAuswählenToolStripMenuItem.Name = "AlleUserAuswählenToolStripMenuItem"
Me.AlleUserAuswählenToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
Me.AlleUserAuswählenToolStripMenuItem.Text = "Alle User auswählen"
'
'KeineAuswahlToolStripMenuItem
'
Me.KeineAuswahlToolStripMenuItem.Name = "KeineAuswahlToolStripMenuItem"
Me.KeineAuswahlToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
Me.KeineAuswahlToolStripMenuItem.Text = "Keine Auswahl"
'
'frmStructureNodeConfig 'frmStructureNodeConfig
' '
Me.Appearance.Options.UseFont = True Me.Appearance.Options.UseFont = True
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(972, 516) Me.ClientSize = New System.Drawing.Size(959, 794)
Me.Controls.Add(Me.GridControlFreeUsers)
Me.Controls.Add(Me.btndeleteUser)
Me.Controls.Add(Me.btnAddUser)
Me.Controls.Add(Me.Label5)
Me.Controls.Add(Me.GridControl_Right_AddmanNode_User)
Me.Controls.Add(Me.CheckEdit1) Me.Controls.Add(Me.CheckEdit1)
Me.Controls.Add(Me.Label3) Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label2)
@@ -596,6 +841,13 @@ Partial Class frmStructureNodeConfig
CType(Me.DD_ECMAdmin, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.DD_ECMAdmin, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.CheckEdit1.Properties, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.CheckEdit1.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridControl_Right_AddmanNode_User, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TBWH_Users1BindingSource, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridViewRight_AddmanNode_User, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TBAD_UsersBindingSource, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridControlFreeUsers, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridViewFreeUsers, System.ComponentModel.ISupportInitialize).EndInit()
Me.ContextMenuStrip1.ResumeLayout(False)
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@@ -640,4 +892,26 @@ Partial Class frmStructureNodeConfig
Friend WithEvents bsitmSave As DevExpress.XtraBars.BarStaticItem Friend WithEvents bsitmSave As DevExpress.XtraBars.BarStaticItem
Friend WithEvents Label3 As Label Friend WithEvents Label3 As Label
Friend WithEvents CheckEdit1 As DevExpress.XtraEditors.CheckEdit Friend WithEvents CheckEdit1 As DevExpress.XtraEditors.CheckEdit
Friend WithEvents GridControl_Right_AddmanNode_User As DevExpress.XtraGrid.GridControl
Friend WithEvents GridViewRight_AddmanNode_User As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents GridColumn3 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents colSurname1 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents GridColumn7 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents GridColumn8 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents GridColumn9 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents Label5 As Label
Friend WithEvents btndeleteUser As Button
Friend WithEvents btnAddUser As Button
Friend WithEvents TBAD_UsersBindingSource As BindingSource
Friend WithEvents TBWH_Users1BindingSource As BindingSource
Friend WithEvents GridControlFreeUsers As DevExpress.XtraGrid.GridControl
Friend WithEvents GridViewFreeUsers As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents colSelect As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents colSurname As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents GridColumn1 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents GridColumn2 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents colID As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents ContextMenuStrip1 As ContextMenuStrip
Friend WithEvents AlleUserAuswählenToolStripMenuItem As ToolStripMenuItem
Friend WithEvents KeineAuswahlToolStripMenuItem As ToolStripMenuItem
End Class End Class

View File

@@ -150,14 +150,11 @@
<metadata name="DD_DMSDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="DD_DMSDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<metadata name="DD_DMSDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>422, 56</value> <value>1101, 17</value>
</metadata> </metadata>
<metadata name="TBWH_ENTITYBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TBWH_ENTITYBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>564, 56</value> <value>1242, 17</value>
</metadata> </metadata>
<metadata name="TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>548, 17</value> <value>548, 17</value>
@@ -166,22 +163,19 @@
<value>930, 17</value> <value>930, 17</value>
</metadata> </metadata>
<metadata name="TBWH_ENTITYTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TBWH_ENTITYTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>772, 56</value> <value>1451, 17</value>
</metadata> </metadata>
<metadata name="TBPMO_FORM_CONSTRUCTORBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TBPMO_FORM_CONSTRUCTORBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 95</value> <value>17, 54</value>
</metadata> </metadata>
<metadata name="DD_ECMAdmin.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="DD_ECMAdmin.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>974, 56</value> <value>1653, 17</value>
</metadata>
<metadata name="DD_ECMAdmin.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>974, 56</value>
</metadata> </metadata>
<metadata name="TBPMO_FORM_CONSTRUCTORTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TBPMO_FORM_CONSTRUCTORTableAdapter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>318, 95</value> <value>316, 54</value>
</metadata> </metadata>
<metadata name="TableAdapterManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="TableAdapterManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>614, 95</value> <value>607, 54</value>
</metadata> </metadata>
<assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <assembly alias="DevExpress.Data.v21.2" name="DevExpress.Data.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="BarButtonItem1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="BarButtonItem1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -265,10 +259,36 @@
<value>Ein hier definierter Knoten dient "lediglich" zur Layoutstruktur und stellt noch keinen Knoten in der Sichtnavigation dar. <value>Ein hier definierter Knoten dient "lediglich" zur Layoutstruktur und stellt noch keinen Knoten in der Sichtnavigation dar.
Knoten entstehen entweder durch eine hinterlegte Businesslogik oder durch manuelle Anlage durch den benutzer, wenn der Knoten ein manueller Knoten (Level = 1000) ist.</value> Knoten entstehen entweder durch eine hinterlegte Businesslogik oder durch manuelle Anlage durch den benutzer, wenn der Knoten ein manueller Knoten (Level = 1000) ist.</value>
</data> </data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="ContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>192</value> <value>1182, 54</value>
</metadata>
<metadata name="TBWH_Users1BindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>978, 54</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btndeleteUser.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJnSURBVDhPpZPtT1JRHMf9W/RFMzfXelpzzVZbzQQU
uUQg4NMlkys2WjNNx2Wm2VaMhjRfNLGUHrXyTaY5c6WWLbFHpuW1QolbuCL0XhBI923QglTqRZ3tc7Zz
dr6fs/M756QASPkf1k3MVVWlzVKVhndUBTOjIblpTSn3llQzk6TS4CyTp61dv2rg1lURHyiK/Wo1IzQy
hPBrB8Ljo+DvdGFOX46XRQT7TC0mkgqiYZeW4hdvdWFl5g0iA7cRsVsQsZ3F9xttWB4bgLdeD4dSyD+V
58QlsW5Wp0t1aSkPd82OFcaJyIXT8FuMWDDXIXTeiHALjZDpOEJ3r8N9hMTYwb2eR7LdqXGBS0vR840G
LDsnYjsuWWn4zlQj2KRbBXeCRKjnMl7kZ2NYmk3HBe+pw0yg5woi3Tb4TTX4UixNymINCd7cAK+xFg+I
LCYuYLSaYPheDyJWI/yn9PhT8ypE8FFFWLC1Yih/ezAumCaLg0vdHQg16xE8WbE2F29RwXy5CgttrRgU
b04IpspUjM/UgCULDe6YOrYwKcp8+BvrMVdfjQFBZuIIzhI5zcgECHZ3wq+RwVcuWRdm5UKwhRIE7Bcx
Kt6K/tyNiSK+KpamPi8lPO7KUgRudsQKNq8S/wwq8sDKhGBlYvCd7ZgskUbDnl5BeuIao0wUiohxxX7e
dUiFwNUOfGum4SWV+KRWwNdkAH+pHVPqAvTlZvC9gvTVD+kXT+T7iMcH9rAOyU58rquGr+VcjI+1R/FQ
tCUaZn8PrxNEGZHuShsWZxmGiB3M/YJt3KBgE9efl8n0CTMMvTkb/v6Z/oUfHdLOuUgtmkUAAAAASUVO
RK5CYII=
</value>
</data>
<metadata name="TBAD_UsersBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>784, 54</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>140</value>
</metadata>
<data name="frmStructureNodeConfig.IconOptions.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="frmStructureNodeConfig.IconOptions.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAgAEBAAAAEACABoBQAAhgAAABAQAAABACAAaAQAAO4FAAAYGAAAAQAIAMgGAABWCgAAGBgAAAEA AAABAAgAEBAAAAEACABoBQAAhgAAABAQAAABACAAaAQAAO4FAAAYGAAAAQAIAMgGAABWCgAAGBgAAAEA

View File

@@ -424,6 +424,21 @@
End If End If
End If End If
Me.bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Me.bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
If TYPE_NODENumericUpDown.Value = 1000 Then
GridControl_Right_AddmanNode_User.Enabled = True
GridControlFreeUsers.Enabled = True
btnAddUser.Enabled = True
btndeleteUser.Enabled = True
Load_Users_Right_Man_Add()
Else
GridControl_Right_AddmanNode_User.Enabled = False
GridControlFreeUsers.Enabled = False
btnAddUser.Enabled = False
btndeleteUser.Enabled = False
DD_ECMAdmin.TBAD_Users.Clear()
DD_ECMAdmin.TBWH_Users1.Clear()
End If
Catch ex As Exception Catch ex As Exception
MsgBox("Error in TreeView.AfterSelect:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in TreeView.AfterSelect:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try End Try
@@ -435,7 +450,8 @@
Private Sub LoadData() Private Sub LoadData()
If cmbEntity.SelectedIndex <> -1 Then If cmbEntity.SelectedIndex <> -1 Then
Load_Nodes_entity Load_nodes_Entity()
If DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION.Rows.Count > 0 Then If DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION.Rows.Count > 0 Then
Load_TreeView() Load_TreeView()
Else Else
@@ -505,8 +521,166 @@
Private Sub TYPE_NODENumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles TYPE_NODENumericUpDown.ValueChanged Private Sub TYPE_NODENumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles TYPE_NODENumericUpDown.ValueChanged
If TYPE_NODENumericUpDown.Value = 1000 Then If TYPE_NODENumericUpDown.Value = 1000 Then
CheckEdit1.Checked = True CheckEdit1.Checked = True
Else Else
CheckEdit1.Checked = False CheckEdit1.Checked = False
End If
End Sub
Private Sub Load_Users_Right_Man_Add()
If GUIDTextBox.Text = "" Then
Exit Sub
End If
Dim oSql = String.Format("SELECT T.* FROM TBDD_USER T WITH (NOLOCK) INNER JOIN TBDD_USER_MODULES T1 WITH (NOLOCK) ON T.GUID = T1.USER_ID
INNER JOIN TBDD_MODULES T2 WITH (NOLOCK) ON T1.MODULE_ID = T2.GUID
WHERE T2.SHORT_NAME = 'ADDI' AND T.GUID IN (SELECT FK_TBDDUSER_ID FROM TBOF_MAP_RIGHT_NODE_ADD_USER WHERE FK_TBPMO_SN_CONFIG_ID = {0} )
ORDER BY T.USERNAME", GUIDTextBox.Text)
Dim DT_USERS_CONFIGURED As DataTable = MYDB_ECM.GetDatatable(oSql)
oSql = String.Format("SELECT * FROM TBDD_USER WITH (NOLOCK) WHERE GUID NOT IN (SELECT FK_TBDDUSER_ID FROM TBOF_MAP_RIGHT_NODE_ADD_USER WITH (NOLOCK) WHERE FK_TBPMO_SN_CONFIG_ID = {0} )
ORDER BY USERNAME", GUIDTextBox.Text)
Dim DT_FREE_USER As DataTable = MYDB_ECM.GetDatatable(oSql)
Try
DD_ECMAdmin.TBAD_Users.Clear()
For Each row As DataRow In DT_FREE_USER.Rows
Dim newUserRow As DD_ECMAdmin.TBAD_UsersRow
newUserRow = DD_ECMAdmin.TBAD_Users.NewTBAD_UsersRow
newUserRow.Username = row.Item("USERNAME")
newUserRow.Surname = If(IsDBNull(row("NAME")), "", row("NAME").ToString())
newUserRow.Prename = If(IsDBNull(row("PRENAME")), "", row("PRENAME").ToString())
Try
newUserRow.Email = row.Item("EMAIL")
Catch ex As Exception
newUserRow.Email = ""
End Try
newUserRow.ID = row.Item("GUID")
DD_ECMAdmin.TBAD_Users.Rows.Add(newUserRow)
Next
Try
DD_ECMAdmin.TBWH_Users1.Clear()
For Each row As DataRow In DT_USERS_CONFIGURED.Rows
Dim newUserRow As DD_ECMAdmin.TBWH_Users1Row
newUserRow = DD_ECMAdmin.TBWH_Users1.NewTBWH_Users1Row
newUserRow.Surname = If(IsDBNull(row("NAME")), "", row("NAME").ToString())
newUserRow.Prename = If(IsDBNull(row("PRENAME")), "", row("PRENAME").ToString())
newUserRow.Username = row.Item("USERNAME")
Try
newUserRow.Email = row.Item("EMAIL")
Catch ex As Exception
newUserRow.Email = ""
End Try
newUserRow.ID = row.Item("GUID")
DD_ECMAdmin.TBWH_Users1.Rows.Add(newUserRow)
Next
Catch ex As Exception
MsgBox("Error loading Users for Global Search:" & vbNewLine & ex.Message)
End Try
Catch ex As Exception
MsgBox("Error in Load_Users_GS:" & vbNewLine & ex.Message)
End Try
End Sub
Private Sub btnAddUser2ConstructorREL_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
If GUIDTextBox.Text = "" Then
MsgBox("Please choose a node by clicking in the treeview!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Try
' Zuerst alle ausgewählten User-IDs sammeln
Dim selectedUserIDs As New List(Of Object)
For Each row As DataRow In DD_ECMAdmin.TBAD_Users.Rows
If row.Item(0) = CBool(True) Then
selectedUserIDs.Add(row.Item(5))
End If
Next
' Dann die INSERTs ausführen
For Each userID In selectedUserIDs
Dim insert As String = String.Format(
"INSERT INTO TBOF_MAP_RIGHT_NODE_ADD_USER (FK_TBPMO_SN_CONFIG_ID, FK_TBDDUSER_ID, ADDED_WHO) VALUES ({0}, {1}, '{2}')",
GUIDTextBox.Text, userID, USER_USERNAME)
If MYDB_ECM.ExecuteNonQuery(insert) = False Then
MsgBox("Could not insert the User-Definition....Check the logfile!", MsgBoxStyle.Exclamation)
End If
Next
For Each row As DataRow In DD_ECMAdmin.TBAD_Users.Rows
row.Item(0) = CBool(False)
Next
Load_Users_Right_Man_Add()
Catch ex As Exception
MsgBox("Error while adding user: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub btndeleteUserConstructorRel_Click(sender As Object, e As EventArgs) Handles btndeleteUser.Click
If GUIDTextBox.Text = "" Then
MsgBox("Please choose a node by clicking in the treeview!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Try
Dim refresh As Boolean = False
For Each row As DataRow In DD_ECMAdmin.TBWH_Users1.Rows
If row.Item(0) = CBool(True) Then
Dim oUserID = row.Item(5)
Dim delete = String.Format("DELETE FROM [TBOF_MAP_RIGHT_NODE_ADD_USER] WHERE [FK_TBDDUSER_ID] = {0} And [FK_TBPMO_SN_CONFIG_ID] = {1}", oUserID, GUIDTextBox.Text)
If MYDB_ECM.ExecuteNonQuery(delete) Then
refresh = True
End If
End If
Next
If refresh = True Then Load_Users_Right_Man_Add()
Catch ex As Exception
MsgBox("Error while deleting user: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub AlleUserAuswählenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AlleUserAuswählenToolStripMenuItem.Click
' Dynamisch ermitteln, welches GridControl das Menü geöffnet hat
Dim sourceControl = TryCast(ContextMenuStrip1.SourceControl, DevExpress.XtraGrid.GridControl)
If sourceControl Is Nothing Then Exit Sub
If sourceControl Is GridControlFreeUsers Then
' Select-Spalte (Index 0) in TBAD_Users setzen
For Each row As DataRow In DD_ECMAdmin.TBAD_Users.Rows
row.Item(0) = CBool(True)
Next
GridViewFreeUsers.SelectAll()
ElseIf sourceControl Is GridControl_Right_AddmanNode_User Then
' Select-Spalte (Index 0) in TBWH_Users1 setzen
For Each row As DataRow In DD_ECMAdmin.TBWH_Users1.Rows
row.Item(0) = CBool(True)
Next
GridViewRight_AddmanNode_User.SelectAll()
End If
End Sub
Private Sub KeineAuswahlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KeineAuswahlToolStripMenuItem.Click
' Dynamisch ermitteln, welches GridControl das Menü geöffnet hat
Dim sourceControl = TryCast(ContextMenuStrip1.SourceControl, DevExpress.XtraGrid.GridControl)
If sourceControl Is Nothing Then Exit Sub
If sourceControl Is GridControlFreeUsers Then
' Select-Spalte (Index 0) in TBAD_Users setzen
For Each row As DataRow In DD_ECMAdmin.TBAD_Users.Rows
row.Item(0) = CBool(False)
Next
GridViewFreeUsers.ClearSelection()
ElseIf sourceControl Is GridControl_Right_AddmanNode_User Then
' Select-Spalte (Index 0) in TBWH_Users1 setzen
For Each row As DataRow In DD_ECMAdmin.TBWH_Users1.Rows
row.Item(0) = CBool(False)
Next
GridViewRight_AddmanNode_User.ClearSelection()
End If End If
End Sub End Sub
End Class End Class

View File

@@ -126,10 +126,10 @@
</data> </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="OBJECT_TYPELabel.Location" type="System.Drawing.Point, System.Drawing"> <data name="OBJECT_TYPELabel.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 25</value> <value>7, 33</value>
</data> </data>
<data name="OBJECT_TYPELabel.Size" type="System.Drawing.Size, System.Drawing"> <data name="OBJECT_TYPELabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 15</value> <value>74, 20</value>
</data> </data>
<data name="OBJECT_TYPELabel.TabIndex" type="System.Int32, mscorlib"> <data name="OBJECT_TYPELabel.TabIndex" type="System.Int32, mscorlib">
<value>5</value> <value>5</value>
@@ -160,10 +160,10 @@
<value>True</value> <value>True</value>
</data> </data>
<data name="FW_DOCTYPE_IDLabel.Location" type="System.Drawing.Point, System.Drawing"> <data name="FW_DOCTYPE_IDLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>428, 25</value> <value>489, 33</value>
</data> </data>
<data name="FW_DOCTYPE_IDLabel.Size" type="System.Drawing.Size, System.Drawing"> <data name="FW_DOCTYPE_IDLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 15</value> <value>86, 20</value>
</data> </data>
<data name="FW_DOCTYPE_IDLabel.TabIndex" type="System.Int32, mscorlib"> <data name="FW_DOCTYPE_IDLabel.TabIndex" type="System.Int32, mscorlib">
<value>6</value> <value>6</value>
@@ -190,10 +190,10 @@
<value>True</value> <value>True</value>
</data> </data>
<data name="PATHLabel.Location" type="System.Drawing.Point, System.Drawing"> <data name="PATHLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 54</value> <value>7, 72</value>
</data> </data>
<data name="PATHLabel.Size" type="System.Drawing.Size, System.Drawing"> <data name="PATHLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 15</value> <value>84, 20</value>
</data> </data>
<data name="PATHLabel.TabIndex" type="System.Int32, mscorlib"> <data name="PATHLabel.TabIndex" type="System.Int32, mscorlib">
<value>8</value> <value>8</value>
@@ -217,10 +217,10 @@
<value>True</value> <value>True</value>
</data> </data>
<data name="Label1.Location" type="System.Drawing.Point, System.Drawing"> <data name="Label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 9</value> <value>14, 12</value>
</data> </data>
<data name="Label1.Size" type="System.Drawing.Size, System.Drawing"> <data name="Label1.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value> <value>79, 20</value>
</data> </data>
<data name="Label1.TabIndex" type="System.Int32, mscorlib"> <data name="Label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value> <value>0</value>
@@ -244,10 +244,13 @@
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
</data> </data>
<data name="txtFilepath.Location" type="System.Drawing.Point, System.Drawing"> <data name="txtFilepath.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 27</value> <value>17, 36</value>
</data>
<data name="txtFilepath.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="txtFilepath.Size" type="System.Drawing.Size, System.Drawing"> <data name="txtFilepath.Size" type="System.Drawing.Size, System.Drawing">
<value>574, 23</value> <value>655, 27</value>
</data> </data>
<data name="txtFilepath.TabIndex" type="System.Int32, mscorlib"> <data name="txtFilepath.TabIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
@@ -271,10 +274,10 @@
<value>Segoe UI Semibold, 9.75pt, style=Bold</value> <value>Segoe UI Semibold, 9.75pt, style=Bold</value>
</data> </data>
<data name="Label2.Location" type="System.Drawing.Point, System.Drawing"> <data name="Label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 58</value> <value>14, 77</value>
</data> </data>
<data name="Label2.Size" type="System.Drawing.Size, System.Drawing"> <data name="Label2.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 17</value> <value>238, 23</value>
</data> </data>
<data name="Label2.TabIndex" type="System.Int32, mscorlib"> <data name="Label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value> <value>2</value>
@@ -298,10 +301,13 @@
<value>Segoe UI Semibold, 9.75pt, style=Bold</value> <value>Segoe UI Semibold, 9.75pt, style=Bold</value>
</data> </data>
<data name="cmbDokumentart.Location" type="System.Drawing.Point, System.Drawing"> <data name="cmbDokumentart.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 78</value> <value>17, 104</value>
</data>
<data name="cmbDokumentart.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="cmbDokumentart.Size" type="System.Drawing.Size, System.Drawing"> <data name="cmbDokumentart.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 25</value> <value>231, 29</value>
</data> </data>
<data name="cmbDokumentart.TabIndex" type="System.Int32, mscorlib"> <data name="cmbDokumentart.TabIndex" type="System.Int32, mscorlib">
<value>3</value> <value>3</value>
@@ -340,10 +346,13 @@
<value>MiddleLeft</value> <value>MiddleLeft</value>
</data> </data>
<data name="btnindex.Location" type="System.Drawing.Point, System.Drawing"> <data name="btnindex.Location" type="System.Drawing.Point, System.Drawing">
<value>431, 444</value> <value>493, 592</value>
</data>
<data name="btnindex.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="btnindex.Size" type="System.Drawing.Size, System.Drawing"> <data name="btnindex.Size" type="System.Drawing.Size, System.Drawing">
<value>158, 28</value> <value>181, 37</value>
</data> </data>
<data name="btnindex.TabIndex" type="System.Int32, mscorlib"> <data name="btnindex.TabIndex" type="System.Int32, mscorlib">
<value>4</value> <value>4</value>
@@ -370,10 +379,13 @@
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
</data> </data>
<data name="OBJECT_TYPETextBox.Location" type="System.Drawing.Point, System.Drawing"> <data name="OBJECT_TYPETextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>85, 22</value> <value>97, 29</value>
</data>
<data name="OBJECT_TYPETextBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="OBJECT_TYPETextBox.Size" type="System.Drawing.Size, System.Drawing"> <data name="OBJECT_TYPETextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>281, 23</value> <value>321, 27</value>
</data> </data>
<data name="OBJECT_TYPETextBox.TabIndex" type="System.Int32, mscorlib"> <data name="OBJECT_TYPETextBox.TabIndex" type="System.Int32, mscorlib">
<value>6</value> <value>6</value>
@@ -394,10 +406,13 @@
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
</data> </data>
<data name="PATHTextBox.Location" type="System.Drawing.Point, System.Drawing"> <data name="PATHTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>85, 51</value> <value>97, 68</value>
</data>
<data name="PATHTextBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="PATHTextBox.Size" type="System.Drawing.Size, System.Drawing"> <data name="PATHTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>469, 23</value> <value>535, 27</value>
</data> </data>
<data name="PATHTextBox.TabIndex" type="System.Int32, mscorlib"> <data name="PATHTextBox.TabIndex" type="System.Int32, mscorlib">
<value>9</value> <value>9</value>
@@ -418,10 +433,13 @@
<value>Top, Right</value> <value>Top, Right</value>
</data> </data>
<data name="DOCTYPE_IDTextBox.Location" type="System.Drawing.Point, System.Drawing"> <data name="DOCTYPE_IDTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>504, 22</value> <value>576, 29</value>
</data>
<data name="DOCTYPE_IDTextBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="DOCTYPE_IDTextBox.Size" type="System.Drawing.Size, System.Drawing"> <data name="DOCTYPE_IDTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value> <value>57, 27</value>
</data> </data>
<data name="DOCTYPE_IDTextBox.TabIndex" type="System.Int32, mscorlib"> <data name="DOCTYPE_IDTextBox.TabIndex" type="System.Int32, mscorlib">
<value>7</value> <value>7</value>
@@ -442,10 +460,16 @@
<value>Segoe UI, 9pt, style=Italic</value> <value>Segoe UI, 9pt, style=Italic</value>
</data> </data>
<data name="GroupBox1.Location" type="System.Drawing.Point, System.Drawing"> <data name="GroupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 117</value> <value>17, 156</value>
</data>
<data name="GroupBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="GroupBox1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="GroupBox1.Size" type="System.Drawing.Size, System.Drawing"> <data name="GroupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>560, 80</value> <value>640, 107</value>
</data> </data>
<data name="GroupBox1.TabIndex" type="System.Int32, mscorlib"> <data name="GroupBox1.TabIndex" type="System.Int32, mscorlib">
<value>7</value> <value>7</value>
@@ -475,10 +499,13 @@
<value>Verdana, 9.75pt, style=Italic</value> <value>Verdana, 9.75pt, style=Italic</value>
</data> </data>
<data name="chkdelete_origin.Location" type="System.Drawing.Point, System.Drawing"> <data name="chkdelete_origin.Location" type="System.Drawing.Point, System.Drawing">
<value>24, 450</value> <value>27, 603</value>
</data>
<data name="chkdelete_origin.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="chkdelete_origin.Size" type="System.Drawing.Size, System.Drawing"> <data name="chkdelete_origin.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 20</value> <value>226, 24</value>
</data> </data>
<data name="chkdelete_origin.TabIndex" type="System.Int32, mscorlib"> <data name="chkdelete_origin.TabIndex" type="System.Int32, mscorlib">
<value>8</value> <value>8</value>
@@ -511,10 +538,13 @@
<value>Verdana, 9.75pt, style=Bold, Italic</value> <value>Verdana, 9.75pt, style=Bold, Italic</value>
</data> </data>
<data name="chkMultiIndexer.Location" type="System.Drawing.Point, System.Drawing"> <data name="chkMultiIndexer.Location" type="System.Drawing.Point, System.Drawing">
<value>24, 476</value> <value>27, 638</value>
</data>
<data name="chkMultiIndexer.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="chkMultiIndexer.Size" type="System.Drawing.Size, System.Drawing"> <data name="chkMultiIndexer.Size" type="System.Drawing.Size, System.Drawing">
<value>519, 20</value> <value>688, 24</value>
</data> </data>
<data name="chkMultiIndexer.TabIndex" type="System.Int32, mscorlib"> <data name="chkMultiIndexer.TabIndex" type="System.Int32, mscorlib">
<value>9</value> <value>9</value>
@@ -547,10 +577,16 @@
<value>Top, Bottom, Left, Right</value> <value>Top, Bottom, Left, Right</value>
</data> </data>
<data name="grbxControls.Location" type="System.Drawing.Point, System.Drawing"> <data name="grbxControls.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 203</value> <value>17, 271</value>
</data>
<data name="grbxControls.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="grbxControls.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="grbxControls.Size" type="System.Drawing.Size, System.Drawing"> <data name="grbxControls.Size" type="System.Drawing.Size, System.Drawing">
<value>574, 191</value> <value>656, 255</value>
</data> </data>
<data name="grbxControls.TabIndex" type="System.Int32, mscorlib"> <data name="grbxControls.TabIndex" type="System.Int32, mscorlib">
<value>10</value> <value>10</value>
@@ -583,10 +619,10 @@
<value>Segoe UI Semibold, 9pt, style=Bold, Italic</value> <value>Segoe UI Semibold, 9pt, style=Bold, Italic</value>
</data> </data>
<data name="lblSubfolder.Location" type="System.Drawing.Point, System.Drawing"> <data name="lblSubfolder.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 397</value> <value>24, 529</value>
</data> </data>
<data name="lblSubfolder.Size" type="System.Drawing.Size, System.Drawing"> <data name="lblSubfolder.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 15</value> <value>172, 20</value>
</data> </data>
<data name="lblSubfolder.TabIndex" type="System.Int32, mscorlib"> <data name="lblSubfolder.TabIndex" type="System.Int32, mscorlib">
<value>11</value> <value>11</value>
@@ -616,10 +652,13 @@
<value>Segoe UI Semibold, 9pt, style=Bold, Italic</value> <value>Segoe UI Semibold, 9pt, style=Bold, Italic</value>
</data> </data>
<data name="txtSubfolder.Location" type="System.Drawing.Point, System.Drawing"> <data name="txtSubfolder.Location" type="System.Drawing.Point, System.Drawing">
<value>24, 415</value> <value>27, 553</value>
</data>
<data name="txtSubfolder.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data> </data>
<data name="txtSubfolder.Size" type="System.Drawing.Size, System.Drawing"> <data name="txtSubfolder.Size" type="System.Drawing.Size, System.Drawing">
<value>551, 24</value> <value>629, 28</value>
</data> </data>
<data name="txtSubfolder.TabIndex" type="System.Int32, mscorlib"> <data name="txtSubfolder.TabIndex" type="System.Int32, mscorlib">
<value>12</value> <value>12</value>
@@ -643,10 +682,10 @@
<value>True</value> <value>True</value>
</metadata> </metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing"> <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 15</value> <value>8, 20</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>604, 513</value> <value>690, 684</value>
</data> </data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing"> <data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value> <value>Segoe UI, 9pt</value>
@@ -1100,6 +1139,9 @@
wAH//wAA///AAf//AAD//8AB//8AAP//wAH//wAA///AD///AAD///H///8AAP///////wAA wAH//wAA///AAf//AAD//8AB//8AAP//wAH//wAA///AD///AAD///H///8AAP///////wAA
</value> </value>
</data> </data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>Import nach windream:</value> <value>Import nach windream:</value>
</data> </data>

View File

@@ -34,14 +34,25 @@ Public Class frmWM_IndexFile
End Class End Class
Private _multiIndexDecisionMade As Boolean = False
Private _multiIndexOverwriteExisting As Boolean = False
Private _processedFileIds As New List(Of Integer)
Function WORK_FILE(ImportFilePath As String, VerzeichnisZiel As String, vDokart_ID As Integer, vDokart As String, multiindex As Boolean) Function WORK_FILE(ImportFilePath As String, VerzeichnisZiel As String, vDokart_ID As Integer, vDokart As String, multiindex As Boolean)
'Dim swWORK_FILE As New SW("WORK_FILE: " & DOCTYPE_IDTextBox.Text) 'Dim swWORK_FILE As New SW("WORK_FILE: " & DOCTYPE_IDTextBox.Text)
Try Try
LOGGER.Debug($" WORK_FILE aufgerufen: CURRENT_FILEID={CURRENT_FILEID}, Datei={Me.txtFilepath.Text}")
LOGGER.Debug($"=== WORK_FILE START: multiindex={multiindex} ===")
LOGGER.Debug($" Datei: {ImportFilePath}")
LOGGER.Debug($" Flags: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
CURRENT_DOC_ID = Nothing CURRENT_DOC_ID = Nothing
Dim odeleteRights As Boolean = True Dim odeleteRights As Boolean = True
Dim oSQL = $"SELECT GUID FROM TBPMO_FILES_USER WHERE FILENAME2WORK = '{ImportFilePath}' AND WORKED = 0 AND USER_WORK = '{Environment.UserName}'"
CURRENT_FILEID = MYDB_ECM.GetScalarValue(oSQL)
If CURRENT_FILEID = 0 OrElse CURRENT_FILEID = Nothing Then
LOGGER.Error("WORK_FILE: CURRENT_FILEID ist ungültig (0 oder Nothing)!")
Return False
End If
CURRENT_DOKARTSTRING = vDokart CURRENT_DOKARTSTRING = vDokart
Dim err As Boolean = False Dim err As Boolean = False
'################################################################# '#################################################################
@@ -54,30 +65,71 @@ Public Class frmWM_IndexFile
End If End If
sw.Done() sw.Done()
sw = New SW("CheckFileExists") sw = New SW("CheckFileExists")
Dim existsonlyasMaster = False
If WMMOD.TestFileExists(CURRENT_NEWFILENAME) = True Then If WMMOD.TestFileExists(CURRENT_NEWFILENAME) = True Then
Dim msg As String ' ── Multi-Index-Logik: Entscheidung nur einmal fragen ─────────
If USER_LANGUAGE <> "de-DE" Then Dim shouldOverwrite As Boolean
msg = "A file with the same name already exists!" & vbCrLf &
"YES → Replace the existing file (all former versions will be deleted)" & vbCrLf & If multiindex = True Then
"NO → Keep both files (your file will be versioned automatically)" If _multiIndexDecisionMade = False Then
LOGGER.Debug(" ZEIGE DIALOG für Multi-Index-Entscheidung")
' Erste Kollision → Benutzer fragen
Dim msg As String
If USER_LANGUAGE <> "de-DE" Then
msg = "A file with the same name already exists!" & vbCrLf &
"This decision will apply to ALL remaining files in Multi-Indexing." & vbCrLf & vbCrLf &
"YES → Replace existing files (all former versions will be deleted)" & vbCrLf &
"NO → Keep both files (files will be versioned automatically)"
Else
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf &
"Diese Entscheidung gilt für ALLE weiteren Dateien im Multi-Indexing." & vbCrLf & vbCrLf &
"JA → Bestehende Dateien ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf &
"NEIN → Dateien versionieren (beide Dateien werden behalten)"
End If
Dim result As MsgBoxResult = MessageBox.Show(msg, "File already exists (Multi-Indexing):",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
_multiIndexOverwriteExisting = (result = MsgBoxResult.Yes)
_multiIndexDecisionMade = True
LOGGER.Debug($" Benutzer-Entscheidung: {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
LOGGER.Debug($" Flags NACH Dialog: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Else
LOGGER.Debug($" Verwende GESPEICHERTE Entscheidung: {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
End If
shouldOverwrite = _multiIndexOverwriteExisting
Else Else
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf & ' Einzeldatei → wie bisher
"JA → Bestehende Datei ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf & LOGGER.Debug(" Einzeldatei: Zeige Dialog")
"NEIN → Beide Dateien behalten (Ihre Datei wird automatisch versioniert)" Dim msg As String
If USER_LANGUAGE <> "de-DE" Then
msg = "A file with the same name already exists!" & vbCrLf &
"YES → Replace the existing file (all former versions will be deleted)" & vbCrLf &
"NO → Keep both files (your file will be versioned automatically)"
Else
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf &
"JA → Bestehende Datei ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf &
"NEIN → Beide Dateien behalten (Ihre Datei wird automatisch versioniert)"
End If
Dim result As MsgBoxResult = MessageBox.Show(msg, "File already exists:",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
shouldOverwrite = (result = MsgBoxResult.Yes)
LOGGER.Debug($" Einzeldatei-Entscheidung: {If(shouldOverwrite, "OVERWRITE", "VERSION")}")
End If End If
Dim result As MsgBoxResult
result = MessageBox.Show(msg, "File already exists:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ' ── Entscheidung ausführen ────────────────────────────────────
If result = MsgBoxResult.Yes Then If shouldOverwrite Then
LOGGER.Debug(" Führe OVERWRITE aus")
If WMMOD.RemoveFile(CURRENT_NEWFILENAME) = False Then If WMMOD.RemoveFile(CURRENT_NEWFILENAME) = False Then
' Löschen fehlgeschlagen → Abbruch
Return False Return False
Else Else
Dim oNormPath = WMMOD.GetNormalizedPath(CURRENT_NEWFILENAME, 0) Dim oNormPath = WMMOD.GetNormalizedPath(CURRENT_NEWFILENAME, 0)
Dim oGetDoc = String.Format(
Dim oGetDoc = String.Format("select DOC_ID,RECORD_ID from TBPMO_DOC_RECORD_LINK RL INNER JOIN TBPMO_DOCRESULT_LIST DRL WITH (NOLOCK) ON RL.DOC_ID = DRL.DocID "SELECT DOC_ID,RECORD_ID FROM TBPMO_DOC_RECORD_LINK RL " &
WHERE FULL_FILENAME = '{0}'", oNormPath) "INNER JOIN TBPMO_DOCRESULT_LIST DRL WITH (NOLOCK) ON RL.DOC_ID = DRL.DocID " &
"WHERE FULL_FILENAME = '{0}'", oNormPath)
Dim oDT As DataTable = MYDB_ECM.GetDatatable(oGetDoc) Dim oDT As DataTable = MYDB_ECM.GetDatatable(oGetDoc)
For Each oRow As DataRow In oDT.Rows For Each oRow As DataRow In oDT.Rows
@@ -87,13 +139,14 @@ Public Class frmWM_IndexFile
} }
ClassFileResult.Delete_ResultFile(oDoc.DocId, oDoc.RecordId, 1) ClassFileResult.Delete_ResultFile(oDoc.DocId, oDoc.RecordId, 1)
Next Next
' Löschen erfolgreich → Import wird fortgesetzt
End If End If
Else Else
LOGGER.Debug(" Führe VERSIONIERUNG aus")
CURRENT_NEWFILENAME = ClassHelper.Versionierung_Datei(CURRENT_NEWFILENAME) CURRENT_NEWFILENAME = ClassHelper.Versionierung_Datei(CURRENT_NEWFILENAME)
LOGGER.Debug($" Neuer Dateiname: {CURRENT_NEWFILENAME}")
End If End If
Else
LOGGER.Debug(" Datei existiert NICHT, kein Konflikt")
End If End If
sw.Done() sw.Done()
'################################################################# '#################################################################
@@ -220,7 +273,7 @@ Public Class frmWM_IndexFile
err = True err = True
Exit For Exit For
End If End If
_processedFileIds.Add(CURRENT_FILEID)
Next Next
If err = True Then If err = True Then
'swWORK_FILE.Done() 'swWORK_FILE.Done()
@@ -256,15 +309,23 @@ Public Class frmWM_IndexFile
stg1 = "Success:" stg1 = "Success:"
End If End If
If multiindex = False Then CURRENT_NOTIFICATION_MSG = stg If multiindex = False Then CURRENT_NOTIFICATION_MSG = stg
MYDB_ECM.GetScalarValue("UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = " & CURRENT_FILEID)
For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows ' Neu - NUR wenn NICHT im Multi-Index-Modus:
If row.Item("GUID") = CURRENT_FILEID Then If multiindex = False Then
row.Item("WORKED") = 1 MYDB_ECM.ExecuteNonQuery("UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = " & CURRENT_FILEID)
If IsNothing(droptype) Then LOGGER.Debug($" Einzeldatei als WORKED markiert: GUID={CURRENT_FILEID}")
droptype = row.Item("HANDLE_TYPE")
End If ' ✅ DEBUG: Was steht JETZT in der DB?
End If Dim debugSQL = $"SELECT GUID, WORKED, FILENAME_ONLY FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' ORDER BY GUID DESC"
Next Dim debugDT = MYDB_ECM.GetDatatable(debugSQL)
LOGGER.Debug($" ═══ DEBUG NACH UPDATE ═══")
LOGGER.Debug($" Anzahl Dateien in DB: {debugDT.Rows.Count}")
For Each row As DataRow In debugDT.Rows
LOGGER.Debug($" - GUID={row("GUID")}, WORKED={row("WORKED")}, Datei={row("FILENAME_ONLY")}")
Next
LOGGER.Debug($" ═══════════════════════")
End If
If IsNothing(CURRENT_DOC_ID) Then If IsNothing(CURRENT_DOC_ID) Then
sw = New SW("GettingDocID") sw = New SW("GettingDocID")
sql = String.Format("SELECT DocID FROM VWPMO_DOC_SYNC WHERE FULL_FILENAME = '{0}' AND CONVERT(DATE,Change_DateTime) = CONVERT(DATE,GETDATE())", CURRENT_FILEIN_WD) sql = String.Format("SELECT DocID FROM VWPMO_DOC_SYNC WHERE FULL_FILENAME = '{0}' AND CONVERT(DATE,Change_DateTime) = CONVERT(DATE,GETDATE())", CURRENT_FILEIN_WD)
@@ -389,28 +450,71 @@ Public Class frmWM_IndexFile
Try Try
Me.Cursor = Cursors.WaitCursor Me.Cursor = Cursors.WaitCursor
SaveMySettingsValue("WD_IndexDeleteDocs", WD_IndexDeleteDocs, "ConfigMain") SaveMySettingsValue("WD_IndexDeleteDocs", WD_IndexDeleteDocs, "ConfigMain")
LOGGER.Debug("=== HANDLE_FILE START ===")
LOGGER.Debug($" Flags VOR Reset: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
_multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
LOGGER.Debug($" Flags NACH Reset: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
LOGGER.Debug($" chkMultiIndexer: Visible={chkMultiIndexer.Visible}, Checked={chkMultiIndexer.Checked}")
If chkMultiIndexer.Visible = True And chkMultiIndexer.Checked = True Then If chkMultiIndexer.Visible = True And chkMultiIndexer.Checked = True Then
' ── Erste Datei: FILE_HASH sicherstellen ─────────────────────── LOGGER.Debug("=== MULTI-INDEXING MODUS AKTIV ===")
' ── Erste Datei: FILE_HASH und CURRENT_FILEID sicherstellen ───
Dim firstFileId As Integer = CURRENT_FILEID
Dim firstFileName As String = CURRENT_FILENAME
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("GUID") = CURRENT_FILEID Then If oRow.Item("GUID") = CURRENT_FILEID Then
FILE_HASH = oRow.Item("FILE_HASH") FILE_HASH = oRow.Item("FILE_HASH")
firstFileName = oRow.Item("FILENAME2WORK")
Exit For Exit For
End If End If
Next Next
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then LOGGER.Debug($" Verarbeite erste Datei (CURRENT_FILEID={firstFileId}): {firstFileName}")
If WORK_FILE(firstFileName, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
LOGGER.Warn(" Erste Datei fehlgeschlagen!")
Return False Return False
End If End If
' ── Erste Datei erfolgreich: GUID merken, Folgedateien laden ── LOGGER.Debug(" Erste Datei erfolgreich verarbeitet")
Dim firstFileId = CURRENT_FILEID
Dim DTFiles2Work As DataTable = MYDB_ECM.GetDatatable(
"SELECT * FROM TBPMO_FILES_USER WHERE WORKED = 0 " &
"AND GUID <> " & firstFileId & " AND USER_WORK = '" & USER_USERNAME & "'")
If DTFiles2Work Is Nothing OrElse DTFiles2Work.Rows.Count = 0 Then ' ── WICHTIG: Erste Datei als WORKED markieren UND DataTable neu laden ──
' Keine weiteren Dateien trotzdem Erfolg LOGGER.Debug($" Markiere erste Datei als WORKED: GUID={firstFileId}")
MYDB_ECM.ExecuteNonQuery($"UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = {firstFileId}")
LOGGER.Debug(" Lade aktualisierte Dateiliste aus Datenbank...")
' ✅ SCHRITT 1: Prüfe mit COUNT(*), wie viele Dateien in der DB sind
Dim countSQL = $"SELECT COUNT(*) FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
Dim remainingCount = CInt(MYDB_ECM.GetScalarValue(countSQL))
LOGGER.Debug($" SQL COUNT ergab: {remainingCount} verbleibende Dateien")
' ✅ SCHRITT 2: Nur wenn COUNT > 0, dann DataTable laden
If remainingCount > 0 Then
CURRENT_TBPMO_FILES_USER = MYDB_ECM.GetDatatable("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER " &
"WHERE USER_WORK = '" & USER_USERNAME & "' AND WORKED = 0")
If CURRENT_TBPMO_FILES_USER Is Nothing Then
LOGGER.Error(" WARNUNG: GetDatatable gab Nothing zurück, obwohl COUNT > 0!")
CURRENT_TBPMO_FILES_USER = New DataTable()
Else
LOGGER.Debug($" DataTable geladen: {CURRENT_TBPMO_FILES_USER.Rows.Count} Zeilen")
End If
Else
LOGGER.Info(" SQL COUNT ergab 0 Dateien")
CURRENT_TBPMO_FILES_USER = New DataTable()
End If
' ── Folgedateien aus aktualierter DataTable verarbeiten ──
If CURRENT_TBPMO_FILES_USER Is Nothing OrElse CURRENT_TBPMO_FILES_USER.Rows.Count = 0 Then
LOGGER.Info(" Keine weiteren Dateien vorhanden")
NEW_FILES_ADDED = True NEW_FILES_ADDED = True
FILE_WORKED = True FILE_WORKED = True
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
@@ -418,12 +522,24 @@ Public Class frmWM_IndexFile
Return True Return True
End If End If
LOGGER.Debug($" Weitere Dateien gefunden: {CURRENT_TBPMO_FILES_USER.Rows.Count}")
LOGGER.Debug($" Flags VOR Schleife: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Dim err As Boolean = False Dim err As Boolean = False
For Each filerow As DataRow In DTFiles2Work.Rows Dim fileCount As Integer = 0
CURRENT_FILEID = filerow.Item("GUID") For Each filerow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
CURRENT_FILENAME = filerow.Item("FILENAME2WORK") fileCount += 1
FILE_HASH = filerow.Item("FILE_HASH") Dim currentFileId As Integer = filerow.Item("GUID")
aktFiledropped = CURRENT_FILENAME Dim currentFileName As String = filerow.Item("FILENAME2WORK")
Dim currentFileHash As String = filerow.Item("FILE_HASH")
CURRENT_FILEID = currentFileId
CURRENT_FILENAME = currentFileName
FILE_HASH = currentFileHash
aktFiledropped = currentFileName
LOGGER.Debug($" [{fileCount}/{CURRENT_TBPMO_FILES_USER.Rows.Count}] Verarbeite Datei: {currentFileName}, FILEID={currentFileId}")
LOGGER.Debug($" Flags: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Dim handleType As String = filerow.Item("HANDLE_TYPE") Dim handleType As String = filerow.Item("HANDLE_TYPE")
Select Case handleType Select Case handleType
@@ -437,10 +553,15 @@ Public Class frmWM_IndexFile
droptype = handleType droptype = handleType
End Select End Select
If WORK_FILE(CURRENT_FILENAME, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then If WORK_FILE(currentFileName, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
err = True err = True
LOGGER.Warn($" Datei fehlgeschlagen!")
Exit For Exit For
End If End If
LOGGER.Debug($" Datei erfolgreich verarbeitet")
LOGGER.Debug($" Markiere Datei als WORKED: GUID={currentFileId}")
MYDB_ECM.ExecuteNonQuery($"UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = {currentFileId}")
Next Next
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
@@ -454,6 +575,7 @@ Public Class frmWM_IndexFile
stg = "All files were transferred via Multiindexing to windream" stg = "All files were transferred via Multiindexing to windream"
stg1 = "Success:" stg1 = "Success:"
End If End If
LOGGER.Info("=== MULTI-INDEXING ERFOLGREICH ABGESCHLOSSEN ===")
MsgBox(stg, MsgBoxStyle.Information, stg1) MsgBox(stg, MsgBoxStyle.Information, stg1)
Me.Close() Me.Close()
Return True Return True
@@ -462,25 +584,124 @@ Public Class frmWM_IndexFile
Return False Return False
Else Else
' ── Einzeldatei ─────────────────────────────────────────────── ' ✅ EINZELDATEI MODUS
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, False) = True Then LOGGER.Debug("=== EINZELDATEI MODUS ===")
NEW_FILES_ADDED = True
FILE_WORKED = True ' ✅ WICHTIG: CURRENT_FILEID VOR WORK_FILE setzen!
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("FILENAME2WORK") = Me.txtFilepath.Text Then
CURRENT_FILEID = CInt(oRow("GUID"))
FILE_HASH = oRow("FILE_HASH").ToString()
LOGGER.Debug($" Datei gefunden in CURRENT_TBPMO_FILES_USER: FILEID={CURRENT_FILEID}")
Exit For
End If
Next
' ✅ Validierung NACH Schleife
If CURRENT_FILEID = 0 Then
LOGGER.Error($" Datei nicht gefunden in CURRENT_TBPMO_FILES_USER: {Me.txtFilepath.Text}")
Me.Cursor = Cursors.Default
MessageBox.Show("Die Datei konnte nicht in der Verarbeitungsliste gefunden werden!",
"Fehler:", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, False) = False Then
Me.Cursor = Cursors.Default
MessageBox.Show("Import to windream was not successful." & vbCrLf &
"Check the log for further information!",
"Unexpected Error in windream-Stream:",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
' ── Datei erfolgreich verarbeitet ──
NEW_FILES_ADDED = True
FILE_WORKED = True
LOGGER.Debug(" Einzeldatei erfolgreich verarbeitet")
' ✅ Prüfen, ob weitere Dateien vorhanden sind
LOGGER.Debug(" Lade aktualisierte Dateiliste für Einzeldatei-Check...")
' ✅ SCHRITT 1: Prüfe mit COUNT(*), wie viele Dateien in der DB sind
Dim countSQL = $"SELECT COUNT(*) FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
Dim remainingCount = CInt(MYDB_ECM.GetScalarValue(countSQL))
LOGGER.Debug($" ═══ SQL COUNT NACH WORK_FILE ═══")
LOGGER.Debug($" COUNT(*) ergab: {remainingCount} verbleibende Dateien")
' ✅ SCHRITT 2: Dateiliste laden UND vergleichen
ClassHelper.Create_USER_FILE_TABLE()
If CURRENT_TBPMO_FILES_USER Is Nothing Then
LOGGER.Error($" ❌ KRITISCHER FEHLER: Create_USER_FILE_TABLE gab Nothing zurück!")
ElseIf CURRENT_TBPMO_FILES_USER.Rows.Count <> remainingCount Then
LOGGER.Error($" ❌ KRITISCHER FEHLER: COUNT ergab {remainingCount}, aber DataTable hat {CURRENT_TBPMO_FILES_USER.Rows.Count} Zeilen!")
LOGGER.Error($" ❌ VERDACHT: Race-Condition oder Transaction-Problem!")
Else
LOGGER.Debug($" ✅ OK: COUNT und DataTable stimmen überein ({remainingCount} Dateien)")
End If
LOGGER.Debug($" ═══════════════════════════════")
If CURRENT_TBPMO_FILES_USER IsNot Nothing AndAlso CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then
LOGGER.Info($" Einzeldatei-Modus: Weitere {CURRENT_TBPMO_FILES_USER.Rows.Count} Dateien vorhanden - aktualisiere Formular")
' ── Lade ERSTE Datei aus der NEUEN Liste ──
Dim nextFile = CURRENT_TBPMO_FILES_USER.Rows(0)
CURRENT_FILEID = CInt(nextFile("GUID"))
CURRENT_FILENAME = nextFile("FILENAME2WORK").ToString()
FILE_HASH = nextFile("FILE_HASH").ToString()
aktFiledropped = CURRENT_FILENAME
txtFilepath.Text = CURRENT_FILENAME
LOGGER.Debug($" Nächste Datei geladen: FILEID={CURRENT_FILEID}, Datei={CURRENT_FILENAME}")
' ── Update MULTIFILES-Anzeige ──
MULTIFILES = CURRENT_TBPMO_FILES_USER.Rows.Count - 1
If MULTIFILES > 0 Then
chkMultiIndexer.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren"
chkMultiIndexer.Visible = True
chkMultiIndexer.Checked = False
Else
chkMultiIndexer.Visible = False
End If
' ── Handle-Type setzen ──
Dim handleType As String = nextFile("HANDLE_TYPE").ToString()
Select Case handleType
Case "@DROPFROMFSYSTEM@"
droptype = "dragdrop file"
chkdelete_origin.Visible = True
Case "@OUTLOOK_ATTMNT@"
droptype = "dragdrop attachment"
chkdelete_origin.Visible = True
Case "@OUTLOOKMESSAGE@"
droptype = "dragdrop message"
chkdelete_origin.Visible = True
Case "SCAN"
droptype = "scan"
chkdelete_origin.Visible = False
Case Else
droptype = handleType
chkdelete_origin.Visible = False
End Select
Me.Cursor = Cursors.Default
LOGGER.Debug(" Formular bleibt offen für nächste Datei")
Return True ' ← Formular bleibt offen!
Else
' ✅ Keine weiteren Dateien → Formular schließen
LOGGER.Info(" Einzeldatei-Modus: Keine weiteren Dateien - schließe Formular")
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
Me.Close() Me.Close()
Return True Return True
Else
Me.Cursor = Cursors.Default
MessageBox.Show("Import to windream was not successful." & vbCrLf &
"Check the log for further information!",
"Unexpected Error in windream-Stream:",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If End If
End If End If
Me.Cursor = Cursors.Default
Catch ex As Exception Catch ex As Exception
MsgBox("Error in Indexing_File:" & vbCrLf & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in Indexing_File:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
LOGGER.Error($"Handle_File Exception: {ex.Message}{vbCrLf}{ex.StackTrace}")
Return False
Finally Finally
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
End Try End Try
@@ -1073,37 +1294,63 @@ Public Class frmWM_IndexFile
CURRENT_FILENAME = "" CURRENT_FILENAME = ""
Me.VWDDINDEX_AUTOMTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Me.VWDDINDEX_AUTOMTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString
chkMultiIndexer.Checked = False chkMultiIndexer.Checked = False
' ── Multi-Indexing-Flags beim Formular-Load zurücksetzen ──
LOGGER.Debug("=== FORM LOAD: Flags zurücksetzen ===")
LOGGER.Debug($" VOR Reset: _multiIndexDecisionMade = {_multiIndexDecisionMade}, _multiIndexOverwriteExisting = {_multiIndexOverwriteExisting}")
_multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
_processedFileIds.Clear()
LOGGER.Debug($" NACH Reset: _multiIndexDecisionMade = {_multiIndexDecisionMade}, _multiIndexOverwriteExisting = {_multiIndexOverwriteExisting}")
LOGGER.Debug($" ProcessedFileIds Count: {_processedFileIds.Count}")
LOGGER.Debug("frmWD_Index_Dokart_Load") LOGGER.Debug("frmWD_Index_Dokart_Load")
chkdelete_origin.Checked = False chkdelete_origin.Checked = False
chkdelete_origin.Visible = False chkdelete_origin.Visible = False
Dim oReconnect = WMMOD.SessionReconnect Dim oReconnect = WMMOD.SessionReconnect
'= New Windream(LOGCONFIG, False, WMDriveLetter, WMPATH_PREFIX, True, WM_SERVER, WM_USER, WM_USER_PW, WM_DOMAIN)
' ── WICHTIG: Prüfen, ob überhaupt Dateien vorhanden sind ──
If CURRENT_TBPMO_FILES_USER Is Nothing OrElse CURRENT_TBPMO_FILES_USER.Rows.Count = 0 Then
LOGGER.Info("frmWD_Index_Dokart_Load: Keine Dateien vorhanden - Formular wird geschlossen")
Me.Close()
Exit Sub
End If
Dim oHandleType As String Dim oHandleType As String
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("GUID") = CURRENT_FILEID Then If oRow.Item("GUID") = CURRENT_FILEID Then
CURRENT_FILENAME = oRow.Item("FILENAME2WORK") CURRENT_FILENAME = oRow.Item("FILENAME2WORK")
oHandleType = oRow.Item("HANDLE_TYPE") oHandleType = oRow.Item("HANDLE_TYPE")
FILE_HASH = oRow.Item("FILE_HASH") FILE_HASH = oRow.Item("FILE_HASH")
Exit For ' ← Hinzugefügt: Schleife verlassen, wenn gefunden
End If End If
Next Next
If CURRENT_FILENAME = "" Then If CURRENT_FILENAME = "" Then
MsgBox("Chekc the Temp Files Table, as it seems to be empty!", MsgBoxStyle.Exclamation) LOGGER.Warn("Check the Temp Files Table, as it seems to be empty or CURRENT_FILEID not found!")
MsgBox("Check the Temp Files Table, as it seems to be empty!", MsgBoxStyle.Exclamation)
Me.Close() ' ← Formular schließen statt Exit Sub
Exit Sub Exit Sub
End If End If
MULTIFILES = 0
For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows ' ── KORREKTUR: Zähle alle Dateien außer der aktuellen ──
If row.Item("GUID") <> CURRENT_FILEID Then MULTIFILES = CURRENT_TBPMO_FILES_USER.Rows.Count - 1
MULTIFILES += 1 LOGGER.Debug($" MULTIFILES berechnet: Gesamt={CURRENT_TBPMO_FILES_USER.Rows.Count}, MULTIFILES={MULTIFILES}")
End If
Next
If MULTIFILES > 0 Then If MULTIFILES > 0 Then
chkMultiIndexer.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren" chkMultiIndexer.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren"
chkMultiIndexer.Visible = True chkMultiIndexer.Visible = True
LOGGER.Debug($" chkMultiIndexer: Visible=True, Text={chkMultiIndexer.Text}")
Else Else
chkMultiIndexer.Visible = False chkMultiIndexer.Visible = False
LOGGER.Debug(" chkMultiIndexer: Visible=False (keine weiteren Dateien)")
End If End If
aktFiledropped = CURRENT_FILENAME aktFiledropped = CURRENT_FILENAME
txtFilepath.Text = aktFiledropped txtFilepath.Text = aktFiledropped
If oHandleType = "@DROPFROMFSYSTEM@" Then If oHandleType = "@DROPFROMFSYSTEM@" Then
droptype = "dragdrop file" droptype = "dragdrop file"
chkdelete_origin.Visible = True chkdelete_origin.Visible = True
@@ -1119,21 +1366,19 @@ Public Class frmWM_IndexFile
ElseIf oHandleType = "SCAM" Then ElseIf oHandleType = "SCAM" Then
droptype = "scan" droptype = "scan"
End If End If
Dim sql = String.Format("SELECT FORMVIEW_ID, FORM_ID, FORM_TITLE, DOKUMENTTYPE_ID, DOKUMENTTYPE, PATH, SHORTNAME, OBJECT_TYPE, FW_DOCTYPE_ID FROM VWPMO_DOKUMENTTYPES WHERE (FORMVIEW_ID = {0}) " &
"ORDER BY SEQUENCE, DOKUMENTTYPE", CURRENT_FORMVIEW_ID)
DTVWPMO_DOKUMENTTYPES = MYDB_ECM.GetDatatable(sql)
'VWPMO_DOKUMENTTYPESTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Dim sql = String.Format("SELECT FORMVIEW_ID, FORM_ID, FORM_TITLE, DOKUMENTTYPE_ID, DOKUMENTTYPE, PATH, SHORTNAME, OBJECT_TYPE, FW_DOCTYPE_ID FROM VWPMO_DOKUMENTTYPES WHERE (FORMVIEW_ID = {0}) " &
'Me.VWPMO_DOKUMENTTYPESTableAdapter.Fill(Me.DD_DMSDataSet.VWPMO_DOKUMENTTYPES, CURRENT_FORMVIEW_ID) "ORDER BY SEQUENCE, DOKUMENTTYPE", CURRENT_FORMVIEW_ID)
DTVWPMO_DOKUMENTTYPES = MYDB_ECM.GetDatatable(sql)
CURRENT_REDUNDANT_FORM_ID = 0 CURRENT_REDUNDANT_FORM_ID = 0
CURRENT_REDUNDANT_FORMVIEW_ID = 0 CURRENT_REDUNDANT_FORMVIEW_ID = 0
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then ' DD_DMSDataSet.VWPMO_DOKUMENTTYPES.Rows.Count = 0 Then If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
If CURRENT_ENTITY_REDUNDANT_ID <> 0 Then If CURRENT_ENTITY_REDUNDANT_ID <> 0 Then
Dim FVID = MYDB_ECM.GetScalarValue(String.Format("SELECT GUID FROM TBPMO_FORM_VIEW WHERE FORM_ID = {0} and SCREEN_ID = 1", CURRENT_ENTITY_REDUNDANT_ID), True) Dim FVID = MYDB_ECM.GetScalarValue(String.Format("SELECT GUID FROM TBPMO_FORM_VIEW WHERE FORM_ID = {0} and SCREEN_ID = 1", CURRENT_ENTITY_REDUNDANT_ID), True)
'Me.VWPMO_DOKUMENTTYPESTableAdapter.Fill(Me.DD_DMSDataSet.VWPMO_DOKUMENTTYPES, FVID) If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then 'DD_DMSDataSet.VWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
MsgBox("No documenttypes for the redundant entity configured either! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation) MsgBox("No documenttypes for the redundant entity configured either! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation)
Me.Close()
Exit Sub Exit Sub
Else Else
LOGGER.Debug("Redundant EntityID: " & CURRENT_ENTITY_REDUNDANT_ID) LOGGER.Debug("Redundant EntityID: " & CURRENT_ENTITY_REDUNDANT_ID)
@@ -1144,12 +1389,15 @@ Public Class frmWM_IndexFile
End If End If
Else Else
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation) MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation)
Me.Close()
Exit Sub Exit Sub
End If End If
End If End If
Catch ex As Exception Catch ex As Exception
LOGGER.Error($"Error in frmWD_Index_Dokart_Load: {ex.Message}")
MsgBox("Error in frmWD_Index_Dokart_Load:" & vbCrLf & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in frmWD_Index_Dokart_Load:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
Me.Close()
End Try End Try
End Sub End Sub
@@ -1202,29 +1450,63 @@ Public Class frmWM_IndexFile
Private Sub frmWM_IndexFile_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing Private Sub frmWM_IndexFile_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
Try Try
If IsNothing(CURRENT_FILEID) OrElse CURRENT_FILEID.ToString = "" Then ' ── Multi-Indexing-Flags zurücksetzen ──
Exit Sub _multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
' ✅ WICHTIG: Liste NEU LADEN, bevor wir zählen!
LOGGER.Debug("=== CLOSING: Lade aktuelle Dateiliste ===")
ClassHelper.Create_USER_FILE_TABLE() ' ← Lädt CURRENT_TBPMO_FILES_USER NEU!
' ── Prüfen, ob noch Dateien zu verarbeiten sind ──
If CURRENT_TBPMO_FILES_USER IsNot Nothing AndAlso CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then
' Es gibt noch nicht verarbeitete Dateien → Benutzer fragen
LOGGER.Debug($"TBPMO_FILES_USER: Formular wird geschlossen, aber {CURRENT_TBPMO_FILES_USER.Rows.Count} Dateien sind noch vorhanden.")
Dim msg As String
Dim title As String
If USER_LANGUAGE <> "de-DE" Then
msg = $"There are still {CURRENT_TBPMO_FILES_USER.Rows.Count} unprocessed file(s)!" & vbCrLf & vbCrLf &
"Do you really want to cancel the import?" & vbCrLf & vbCrLf &
"YES → Cancel import and delete all pending files" & vbCrLf &
"NO → Continue indexing"
title = "Cancel Import?"
Else
msg = $"Es sind noch {CURRENT_TBPMO_FILES_USER.Rows.Count} nicht verarbeitete Datei(en) vorhanden!" & vbCrLf & vbCrLf &
"Möchten Sie den Import wirklich abbrechen?" & vbCrLf & vbCrLf &
"JA → Import abbrechen und alle ausstehenden Dateien löschen" & vbCrLf &
"NEIN → Indexierung fortsetzen"
title = "Import abbrechen?"
End If
Dim result As MsgBoxResult = MessageBox.Show(msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
If result = MsgBoxResult.No Then
' Benutzer will NICHT abbrechen → Formular-Schließen verhindern
LOGGER.Info("Benutzer hat Abbruch verhindert - Formular bleibt offen")
e.Cancel = True
Exit Sub
Else
' Benutzer will abbrechen → Alle Dateien löschen
LOGGER.Info("Benutzer hat Abbruch bestätigt - Lösche alle ausstehenden Dateien")
Dim oDelete = $"DELETE FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
MYDB_ECM.ExecuteNonQuery(oDelete)
LOGGER.Info($"TBPMO_FILES_USER: {CURRENT_TBPMO_FILES_USER.Rows.Count} nicht-verarbeitete Einträge wurden gelöscht (User: {USER_USERNAME})")
' ── WICHTIG: DataTable leeren, damit Load-Event korrekt reagiert ──
CURRENT_TBPMO_FILES_USER.Clear()
LOGGER.Debug("CURRENT_TBPMO_FILES_USER wurde geleert")
End If
Else
' Keine Dateien mehr vorhanden → Normal schließen, aufräumen
LOGGER.Debug("Keine ausstehenden Dateien mehr vorhanden ")
End If End If
' Direkt in der DB prüfen nicht auf das Flag FILE_WORKED verlassen
Dim checkSql = $"SELECT WORKED FROM TBPMO_FILES_USER WHERE GUID = {CURRENT_FILEID}"
Dim workedValue = MYDB_ECM.GetScalarValue(checkSql)
If IsNothing(workedValue) OrElse IsDBNull(workedValue) Then
' Datensatz existiert nicht mehr kein Löschen notwendig
Exit Sub
End If
If CBool(workedValue) = False Then
Dim oDelete = $"DELETE FROM TBPMO_FILES_USER WHERE GUID = {CURRENT_FILEID} AND WORKED = 0"
MYDB_ECM.ExecuteNonQuery(oDelete)
LOGGER.Info($"TBPMO_FILES_USER: Eintrag GUID={CURRENT_FILEID} gelöscht (nicht verarbeitet).")
End If
Catch ex As Exception Catch ex As Exception
LOGGER.Warn($"Fehler beim Bereinigen von TBPMO_FILES_USER (Closing): {ex.Message}") LOGGER.Warn($"Fehler beim Bereinigen von TBPMO_FILES_USER (Closing): {ex.Message}")
End Try End Try
End Sub End Sub
Private Sub frmWM_IndexFile_Closed(sender As Object, e As EventArgs) Handles Me.Closed Private Sub frmWM_IndexFile_Closed(sender As Object, e As EventArgs) Handles Me.Closed
Try Try
Cursor = Cursors.Default Cursor = Cursors.Default
@@ -1232,4 +1514,8 @@ Public Class frmWM_IndexFile
End Try End Try
End Sub End Sub
Private Sub chkMultiIndexer_CheckedChanged(sender As Object, e As EventArgs) Handles chkMultiIndexer.CheckedChanged
LOGGER.Debug($"chkMultiIndexer.CheckedChanged: {chkMultiIndexer.Checked}")
End Sub
End Class End Class

View File

@@ -9,6 +9,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RecordOrganizer_RightManage
EndProject EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup_NoUpdaterVS19", "Setup_NoUpdaterVS19\Setup_NoUpdaterVS19.wixproj", "{A7F7585A-C46A-4436-9F6E-17629325CE58}" Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup_NoUpdaterVS19", "Setup_NoUpdaterVS19\Setup_NoUpdaterVS19.wixproj", "{A7F7585A-C46A-4436-9F6E-17629325CE58}"
EndProject EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Windream", "..\..\..\2_DLL Projekte\DDModules\Windream\Windream.vbproj", "{C602BA85-5E75-6E19-C485-79D912038170}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
CD_ROM|Any CPU = CD_ROM|Any CPU CD_ROM|Any CPU = CD_ROM|Any CPU
@@ -141,6 +143,46 @@ Global
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x64.Build.0 = 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.ActiveCfg = Release|x86
{A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x86.Build.0 = Release|x86 {A7F7585A-C46A-4436-9F6E-17629325CE58}.SingleImage|x86.Build.0 = Release|x86
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|x64.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.CD_ROM|x86.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|x64.ActiveCfg = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|x64.Build.0 = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|x86.ActiveCfg = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Debug|x86.Build.0 = Debug|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|Any CPU.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|Any CPU.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|Mixed Platforms.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|Mixed Platforms.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|x64.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|x64.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|x86.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.DVD-5|x86.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|Any CPU.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|x64.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|x64.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|x86.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.Release|x86.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|x64.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|x64.Build.0 = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|x86.ActiveCfg = Release|Any CPU
{C602BA85-5E75-6E19-C485-79D912038170}.SingleImage|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE