Versionierung windream, DocRecordLink, Overlay in NodeNavigation

This commit is contained in:
Developer01
2026-03-27 14:08:05 +01:00
parent e9cb352674
commit 0125d9b047
12 changed files with 421 additions and 336 deletions

View File

@@ -117,6 +117,10 @@
</setting>
</DevExpress.LookAndFeel.Design.AppSettings>
</applicationSettings>
<appSettings>
<!-- Verbose Grid Logging: nur für Diagnose auf True setzen! NIEMALS im Produktivbetrieb! -->
<add key="DocSearch_VerboseLogging" value="false" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>

View File

@@ -6,6 +6,19 @@ Public Class ClassDOC_SEARCH
Private Shared ENTITY_ID As Integer
Private Shared RECORD_ID As Integer
Private Shared AsyncRunning As Boolean = False
Private Shared EnableVerboseGridLogging As Boolean = ReadVerboseLoggingSetting()
Private Shared Function ReadVerboseLoggingSetting() As Boolean
Try
Dim oValue = System.Configuration.ConfigurationManager.AppSettings("DocSearch_VerboseLogging")
If Not String.IsNullOrWhiteSpace(oValue) Then
LOGGER.Info("DocSearch_VerboseLogging setting found: " & oValue)
Return Boolean.Parse(oValue)
End If
Catch ex As Exception
' Fehler beim Lesen → sicher auf False
End Try
Return False
End Function
Private Shared Function GET_DOCSEARCH_DATATABLE(Optional BG As Boolean = False)
Try
Dim OPTION1
@@ -188,16 +201,16 @@ Public Class ClassDOC_SEARCH
"VWPMO_DOC_SEARCH T " & vbCrLf &
"INNER JOIN TBPMO_DOC_RECORD_LINK TRL ON T.DocID = TRL.DOC_ID" & vbCrLf &
"INNER JOIN TBPMO_RECORD TR ON TRL.RECORD_ID = TR.GUID" & vbCrLf &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP ON TR.GUID = TTEMP.RECORD_ID" & vbCrLf &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP WITH (NOLOCK) ON TR.GUID = TTEMP.RECORD_ID" & vbCrLf &
"INNER JOIN VWPMO_WD_OBJECT_RIGHTS TRIGHTS ON T.DocID = TRIGHTS.dwObjectID" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC ON TR.FORM_ID = TRC.ENTITY_ID AND TRC.LANGUAGE = '{7}' AND TRC.GUID = {8}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC1 ON TR.FORM_ID = TRC1.ENTITY_ID AND TRC1.LANGUAGE = '{7}' AND TRC1.GUID = {9}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC2 ON TR.FORM_ID = TRC2.ENTITY_ID AND TRC2.LANGUAGE = '{7}' AND TRC2.GUID = {10}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC3 ON TR.FORM_ID = TRC3.ENTITY_ID AND TRC3.LANGUAGE = '{7}' AND TRC3.GUID = {11}" & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T1 ON TRL.RECORD_ID = T1.RECORD_ID AND T1.CONTROL_ID = {2} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T2 ON TRL.RECORD_ID = T2.RECORD_ID AND T2.CONTROL_ID = {3} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T3 ON TRL.RECORD_ID = T3.RECORD_ID AND T3.CONTROL_ID = {4} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T4 ON TRL.RECORD_ID = T4.RECORD_ID AND T4.CONTROL_ID = {5} " & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC WITH (NOLOCK) ON TR.FORM_ID = TRC.ENTITY_ID AND TRC.LANGUAGE = '{7}' AND TRC.GUID = {8}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC1 WITH (NOLOCK) ON TR.FORM_ID = TRC1.ENTITY_ID AND TRC1.LANGUAGE = '{7}' AND TRC1.GUID = {9}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC2 WITH (NOLOCK) ON TR.FORM_ID = TRC2.ENTITY_ID AND TRC2.LANGUAGE = '{7}' AND TRC2.GUID = {10}" & vbCrLf &
"LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC3 WITH (NOLOCK) ON TR.FORM_ID = TRC3.ENTITY_ID AND TRC3.LANGUAGE = '{7}' AND TRC3.GUID = {11}" & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T1 WITH (NOLOCK) ON TRL.RECORD_ID = T1.RECORD_ID AND T1.CONTROL_ID = {2} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T2 WITH (NOLOCK) ON TRL.RECORD_ID = T2.RECORD_ID AND T2.CONTROL_ID = {3} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T3 WITH (NOLOCK) ON TRL.RECORD_ID = T3.RECORD_ID AND T3.CONTROL_ID = {4} " & vbCrLf &
"LEFT JOIN TBPMO_CONTROL_VALUE T4 WITH (NOLOCK) ON TRL.RECORD_ID = T4.RECORD_ID AND T4.CONTROL_ID = {5} " & vbCrLf &
"WHERE TR.FORM_ID = {1} AND TTEMP.USER_ID = {0} AND TRIGHTS.dwUserOrGroupID = {6}", USER_GUID, ENTITY_ID, OPTION1, OPTION2, OPTION3, OPTION4, USERID_FK_INT_ECM, USER_LANGUAGE, VALUE_CONF1, VALUE_CONF2, VALUE_CONF3, VALUE_CONF4)
ElseIf CURRENT_SEARCH_TYPE = "FULLTEXT_SUBNODES" Then
Dim sqlft = SQL_FULLTEXT
@@ -215,10 +228,10 @@ Public Class ClassDOC_SEARCH
"[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,{1},'DROPDOWN4','{0}',TRL.RECORD_ID) AS DROPDOWN4" & vbCrLf &
"FROM " & vbCrLf &
"VWPMO_DOC_SEARCH T" & vbCrLf &
"INNER JOIN TBPMO_DOC_RECORD_LINK TRL ON T.DocID = TRL.DOC_ID" & vbCrLf &
"INNER JOIN TBPMO_RECORD TR ON TRL.RECORD_ID = TR.GUID" & vbCrLf &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP ON TR.GUID = TTEMP.RECORD_ID" & vbCrLf &
"INNER JOIN VWPMO_WD_OBJECT_RIGHTS TRIGHTS ON T.DocID = TRIGHTS.dwObjectID" & vbCrLf &
"INNER JOIN TBPMO_DOC_RECORD_LINK TRL WITH (NOLOCK) ON T.DocID = TRL.DOC_ID" & vbCrLf &
"INNER JOIN TBPMO_RECORD TR WITH (NOLOCK) ON TRL.RECORD_ID = TR.GUID" & vbCrLf &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP WITH (NOLOCK) ON TR.GUID = TTEMP.RECORD_ID" & vbCrLf &
"INNER JOIN VWPMO_WD_OBJECT_RIGHTS TRIGHTS WITH (NOLOCK) ON T.DocID = TRIGHTS.dwObjectID" & vbCrLf &
"WHERE TR.FORM_ID = {1} AND TTEMP.USER_ID = {2} AND TRIGHTS.dwUserOrGroupID = {3}" & vbCrLf &
"AND T.DocID IN ({6})", USER_LANGUAGE, ENTITY_ID, USER_GUID, USERID_FK_INT_ECM, OPTION1, OPTION2, sqlft)
End If
@@ -392,7 +405,9 @@ Public Class ClassDOC_SEARCH
Dim fullpath = FILE_ROW.Item("FULL_FILENAME")
Dim objecttype = FILE_ROW.Item("OBJECTTYPE")
Dim DocID = FILE_ROW.Item("DocID")
LOGGER.Debug($"Creating Row for DocID [{DocID}]")
If EnableVerboseGridLogging Then
LOGGER.Debug($"Creating Row for DocID [{DocID}]")
End If
'Dim Folderpath = Path.GetDirectoryName(fullpath)
Dim filename = Path.GetFileName(fullpath)
Dim extension = Path.GetExtension(fullpath)
@@ -446,7 +461,10 @@ Public Class ClassDOC_SEARCH
rowvalue = ""
End If
_step = "9.1 rowvalue for Colname [" & Colname & "]: [" & rowvalue.ToString & "]"
LOGGER.Debug("rowvalue for Colname [" & Colname & "]: [" & rowvalue.ToString & "]")
If EnableVerboseGridLogging Then
LOGGER.Debug("rowvalue for Colname [" & Colname & "]: [" & rowvalue.ToString & "]")
End If
Catch ex As Exception
If CURRENT_SEARCH_TYPE = "RECORD" Then
LOGGER.Warn("Unexpected Error in GetVariableValue for Column [" & Colname & "] - Error: " & ex.Message)

View File

@@ -343,9 +343,9 @@ Public Class ClassDocGrid
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 " &
"FROM TBPMO_DOC_VALUES T WITH (NOLOCK) " &
"INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP WITH (NOLOCK) ON T.RECORD_ID = TTEMP.RECORD_ID " &
"RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WITH (NOLOCK) 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)
@@ -358,8 +358,8 @@ Public Class ClassDocGrid
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 " &
"FROM TBPMO_DOC_VALUES T WITH (NOLOCK) " &
"RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WITH (NOLOCK) 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)
@@ -434,6 +434,7 @@ Public Class ClassDocGrid
' ── 3. KRITISCH: Performance-optimiertes DataSource-Setzen ───────────
_isGridRefreshing = True ' Flag setzen VOR DataSource-Änderung
IsBulkSelectionActive = True '
Try
pDocGridView.BeginDataUpdate() ' Events unterdrücken
pDocGridView.BeginUpdate() ' UI-Updates unterdrücken
@@ -527,6 +528,7 @@ Public Class ClassDocGrid
' ── 6. KRITISCH: Flag ERST JETZT zurücksetzen! ────────────────────────────
_isGridRefreshing = False
IsBulkSelectionActive = False ' ← NEU: erst hier, NACH BestFitColumns
' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt
For Each column As GridColumn In pDocGridView.Columns

Binary file not shown.

View File

@@ -0,0 +1,162 @@
10:26:37.5843|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> FocusedNodeChanged: NodeID=1889, NodeCaption='52 Kreispläne', NodeConfigID=23, RecordID=660188
10:26:37.5843|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.5843|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.5843|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBOF_MAP_RIGHT_NODE_ADD_USER WITH (NOLOCK) WHERE FK_TBPMO_SN_CONFIG_ID = 23 AND FK_TBDDUSER_ID = 0] and Parameters []
10:26:37.5843|frmNodeNavigation_Entity6|INFO >> MoveNext -> Node changed: NodeID=23, NodeGUID=835919, ConfigNodesFound=0, ButtonVisible=Never, HasAddRightForConfigNode=False, ConfigTableRows=0
10:26:37.5843|frmNodeNavigation_Entity6|DEBUG >> UpdateCreateNodeButtonState -> UpdateCreateNodeButtonState called - Visibility=Never, CurrentEnabled=False, AvailableNodes=0, ConfigTableExists=True, HasAddRightForConfigNode=False, RIGHT_RECORD_AND_FILE_READ_ONLY=False, USER_IS_ADMIN=True
10:26:37.5843|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.5843|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.5843|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBPMO_DOC_RECORD_LINK WHERE RECORD_ID = 660188] and Parameters []
10:26:37.5993|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.5993|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.5993|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT IN_WORK, IN_WORK_WHO FROM TBPMO_RECORD WHERE GUID = 660188] and Parameters []
10:26:37.5993|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.5993|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.5993|MSSQLServer|DEBUG >> ExecuteNonQueryWithConnectionObject -> ExecuteNonQueryWithConnectionObject: Running Command [EXEC PRPMO_RECORD_CHECK_INTEGRITY 660188,'digitaldata',False] and Parameters []
10:26:37.6713|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [OVERLAY] ShowOverlayForm called at 10:26:37.671
10:26:37.6713|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> Show_Selected_Record_Data_NonBlocking: RecordID=660188, LoadData=True
10:26:37.6713|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> RECORD ID: 660188
10:26:37.6713|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.6713|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.6713|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM VWPMO_VALUES WHERE RECORD_ID = 660188] and Parameters []
10:26:37.6753|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.6753|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.6753|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM VWPMO_CONTROL_HINT WHERE FORM_ID = 6] and Parameters []
10:26:37.6753|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.6753|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.6753|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT
ADDED_WHO,
CONVERT(VARCHAR(16),ADDED_WHEN,20) AS ADDED_WHEN,
COALESCE(CHANGED_WHO,'') AS CHANGED_WHO,
COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') AS CHANGED_WHEN
FROM TBPMO_RECORD WITH (NOLOCK) WHERE GUID = 660188] and Parameters []
10:26:37.6753|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [OVERLAY] CloseOverlayForm (after ControlLoading) called at 10:26:37.683
10:26:37.6753|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] RUN_DOCSEARCH START at 10:26:37.687
10:26:37.6753|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] Get_DOC_RESULTTABLE START at 10:26:37.688
10:26:37.6753|ClassInit|DEBUG >> GET_DOCSEARCH_DATATABLE -> SQL_DOC_SEARCH: SELECT
CONVERT(BIGINT,T.DocID) DocID
,T.dwVersionID
,T.FULL_FILENAME
,T.[Filename]
,T.Doctype
,T.[Version]
,T.Creation_DateTime
,T.Change_DateTime
,T.OBJECTTYPE
,T.DISPLAY_NAME
,T.IN_WORK
,T.IN_WORK_USER
,T.IN_WORK_COMMENT,
ISNULL(T1.VALUE,'') AS OPTION1,
ISNULL(T2.VALUE,'') AS OPTION2,
ISNULL(T3.VALUE,'') AS OPTION3,
ISNULL(T4.VALUE,'') AS OPTION4,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX1') AS DOCIDX1,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX2') AS DOCIDX2,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX3') AS DOCIDX3,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX4') AS DOCIDX4,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN1','7',TRL.RECORD_ID) AS DROPDOWN1,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN2','7',TRL.RECORD_ID) AS DROPDOWN2,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN3','7',TRL.RECORD_ID) AS DROPDOWN3,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN4','7',TRL.RECORD_ID) AS DROPDOWN4,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC.GUID),'') AS VALUE1,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC1.GUID),'') AS VALUE2,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC2.GUID),'') AS VALUE3,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC3.GUID),'') AS VALUE4,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC4.GUID),'') AS VALUE5,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC5.GUID),'') AS VALUE6,
dwAccessRight AS ACCESS_RIGHT
FROM
VWPMO_DOC_SEARCH T
INNER JOIN TBPMO_DOC_RECORD_LINK TRL ON T.DocID = TRL.DOC_ID
INNER JOIN TBPMO_RECORD TR ON TRL.RECORD_ID = TR.GUID
INNER JOIN VWPMO_WD_OBJECT_RIGHTS TRIGHTS ON T.DocID = TRIGHTS.dwObjectID
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC ON TR.FORM_ID = TRC.ENTITY_ID AND TRC.LANGUAGE = 'de-DE' AND TRC.GUID = 106
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC1 ON TR.FORM_ID = TRC1.ENTITY_ID AND TRC1.LANGUAGE = 'de-DE' AND TRC1.GUID = 107
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC2 ON TR.FORM_ID = TRC2.ENTITY_ID AND TRC2.LANGUAGE = 'de-DE' AND TRC2.GUID = 109
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC3 ON TR.FORM_ID = TRC3.ENTITY_ID AND TRC3.LANGUAGE = 'de-DE' AND TRC3.GUID = 0
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC4 ON TR.FORM_ID = TRC4.ENTITY_ID AND TRC4.LANGUAGE = 'de-DE' AND TRC4.GUID = 0
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC5 ON TR.FORM_ID = TRC5.ENTITY_ID AND TRC5.LANGUAGE = 'de-DE' AND TRC5.GUID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T1 ON TRL.RECORD_ID = T1.RECORD_ID AND T1.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T2 ON TRL.RECORD_ID = T2.RECORD_ID AND T2.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T3 ON TRL.RECORD_ID = T3.RECORD_ID AND T3.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T4 ON TRL.RECORD_ID = T4.RECORD_ID AND T4.CONTROL_ID = 0
WHERE
TRL.RECORD_ID = 660188 AND TR.FORM_ID = 6 AND TRIGHTS.dwUserOrGroupID = 1001479
10:26:37.6753|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:37.6753|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:37.6753|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT
CONVERT(BIGINT,T.DocID) DocID
,T.dwVersionID
,T.FULL_FILENAME
,T.[Filename]
,T.Doctype
,T.[Version]
,T.Creation_DateTime
,T.Change_DateTime
,T.OBJECTTYPE
,T.DISPLAY_NAME
,T.IN_WORK
,T.IN_WORK_USER
,T.IN_WORK_COMMENT,
ISNULL(T1.VALUE,'') AS OPTION1,
ISNULL(T2.VALUE,'') AS OPTION2,
ISNULL(T3.VALUE,'') AS OPTION3,
ISNULL(T4.VALUE,'') AS OPTION4,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX1') AS DOCIDX1,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX2') AS DOCIDX2,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX3') AS DOCIDX3,
[dbo].[FNPMO_DOC_GET_IDX] (T.DocID,6,'DOCIDX4') AS DOCIDX4,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN1','7',TRL.RECORD_ID) AS DROPDOWN1,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN2','7',TRL.RECORD_ID) AS DROPDOWN2,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN3','7',TRL.RECORD_ID) AS DROPDOWN3,
[dbo].[FNPMO_DOC_GET_DROPDOWN_VALUE] (T.DocID,6,'DROPDOWN4','7',TRL.RECORD_ID) AS DROPDOWN4,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC.GUID),'') AS VALUE1,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC1.GUID),'') AS VALUE2,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC2.GUID),'') AS VALUE3,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC3.GUID),'') AS VALUE4,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC4.GUID),'') AS VALUE5,
COALESCE([dbo].[FNPMO_DOC_GET_DOC_VALUE] (T.DocID,TRL.RECORD_ID,TRC5.GUID),'') AS VALUE6,
dwAccessRight AS ACCESS_RIGHT
FROM
VWPMO_DOC_SEARCH T
INNER JOIN TBPMO_DOC_RECORD_LINK TRL ON T.DocID = TRL.DOC_ID
INNER JOIN TBPMO_RECORD TR ON TRL.RECORD_ID = TR.GUID
INNER JOIN VWPMO_WD_OBJECT_RIGHTS TRIGHTS ON T.DocID = TRIGHTS.dwObjectID
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC ON TR.FORM_ID = TRC.ENTITY_ID AND TRC.LANGUAGE = 'de-DE' AND TRC.GUID = 106
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC1 ON TR.FORM_ID = TRC1.ENTITY_ID AND TRC1.LANGUAGE = 'de-DE' AND TRC1.GUID = 107
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC2 ON TR.FORM_ID = TRC2.ENTITY_ID AND TRC2.LANGUAGE = 'de-DE' AND TRC2.GUID = 109
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC3 ON TR.FORM_ID = TRC3.ENTITY_ID AND TRC3.LANGUAGE = 'de-DE' AND TRC3.GUID = 0
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC4 ON TR.FORM_ID = TRC4.ENTITY_ID AND TRC4.LANGUAGE = 'de-DE' AND TRC4.GUID = 0
LEFT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG TRC5 ON TR.FORM_ID = TRC5.ENTITY_ID AND TRC5.LANGUAGE = 'de-DE' AND TRC5.GUID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T1 ON TRL.RECORD_ID = T1.RECORD_ID AND T1.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T2 ON TRL.RECORD_ID = T2.RECORD_ID AND T2.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T3 ON TRL.RECORD_ID = T3.RECORD_ID AND T3.CONTROL_ID = 0
LEFT JOIN TBPMO_CONTROL_VALUE T4 ON TRL.RECORD_ID = T4.RECORD_ID AND T4.CONTROL_ID = 0
WHERE
TRL.RECORD_ID = 660188 AND TR.FORM_ID = 6 AND TRIGHTS.dwUserOrGroupID = 1001479] and Parameters []
10:26:40.2543|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] Get_DOC_RESULTTABLE END at 10:26:40.254 - Rows=1236
10:26:40.2543|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] FillColumns START at 10:26:40.254
10:26:40.2543|ClassInit|DEBUG >> GetOrLoad -> Cache MISS: DocDetailValues_E6_R660188_Lde-DE - Loading from DB...
10:26:40.2543|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=ARNSR033;Database=DD_ECM;User Id=XXXXX;Password=XXXXX;
10:26:40.2543|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
10:26:40.2543|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [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 WITH (NOLOCK) RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WITH (NOLOCK) ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = 6 AND LANGUAGE = 'de-DE' AND T1.CONFIG_COLUMNS = 1 AND T.RECORD_ID = 660188] and Parameters []
10:26:40.4074|ClassInit|DEBUG >> FillColumns -> Values loaded...
10:26:40.4074|ClassInit|DEBUG >> FillColumns -> tables added to ds.Tables...
10:26:40.4074|ClassInit|DEBUG >> FillColumns -> tables added to ds.Tables...
10:26:40.4074|ClassInit|DEBUG >> FillColumns -> parentColumn.DataType: System.Int32
10:26:40.4074|ClassInit|DEBUG >> FillColumns -> childColumn.DataType: System.Int32
10:26:40.4104|ClassInit|DEBUG >> FillColumns -> relationdocIdDetails created...
10:26:40.4564|ClassInit|DEBUG >> FillColumns -> Adapting DisplayFormat (DATETIME for Column Revisions-Datum
10:26:40.4813|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] FillColumns END at 10:26:40.481
10:26:40.4813|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> [DOCSEARCH] RUN_DOCSEARCH END at 10:26:40.482 - 1236 documents found
10:26:40.4813|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> Node_AfterSelect=True - DocView collapsed
10:26:40.4813|frmNodeNavigation_Entity6|DEBUG >> MoveNext -> Show_Selected_Record_Data_NonBlocking completed
10:26:40.4813|ClassInit|INFO >> Check_Set_Rights -> ClassRightManagement...NO DEFINTION FOR GROUP- OR USER-RIGHT!
10:26:40.4813|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_EDIT_R: False
10:26:40.4813|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_ADD_R: False
10:26:40.4874|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_DELETE_R: False
10:26:40.4874|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_ADD_DOC: False
10:26:40.4874|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_VIEW_DOC: True
10:26:40.4874|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_DELETE_DOC: False
10:26:40.4874|ClassInit|DEBUG >> Check_Set_Rights -> ClassRightManagement-RIGHT_READ_ONLY_DOC: False

View File

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

View File

@@ -1726,7 +1726,7 @@
<None Include="MailLicense.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<Content Include="Log_ewa.txt" />
<Content Include="Log_orgFLOW.txt" />
<Content Include="ORGFLOW_Icon_16x16.ico" />
<Content Include="ORGFLOW_Icon_256x256.ico" />
<Content Include="Resources\cube.ico" />

View File

@@ -1,182 +1,127 @@
Imports System.IO
Imports DevExpress.XtraGrid.Columns
Public Class frmDocRecordLink
Public Property myDocuments As New List(Of ClassDocGrid.clsWMDoc)
Private CURRENT_LINK_ENTITY_ID As Integer = 0
Private ENTITY_LOAD_ACTIVE As Boolean = False
Private DT_ENTITYDATA As DataTable
Private Class ClassEntity
Public title As String
Public id As Integer
Public Overrides Function ToString() As String
Return Me.title
End Function
End Class
Private Function GET_CURRENT_ENTITY_DATA()
If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then
Return Nothing
End If
Dim oDatatable As DataTable = CURRENT_DT_ENTITY_RECORDS.Copy
Return oDatatable
End Function
Sub Refresh_Grid_Data(current As Boolean, ENTITY_DATATABLE As DataTable)
Dim DT_RECORDS As DataTable
If current = True Then
DT_RECORDS = GET_CURRENT_ENTITY_DATA()
Else
DT_RECORDS = ENTITY_DATATABLE
End If
Private Function GET_CURRENT_ENTITY_DATA() As DataTable
If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then Return Nothing
Return CURRENT_DT_ENTITY_RECORDS.Copy()
End Function
''' <summary>
''' Lädt das Grid neu.
''' Wenn current=True wird versucht, die zuletzt gewählte Entity korrekt zu laden.
''' </summary>
Sub Refresh_Grid_Data(current As Boolean, ENTITY_DATATABLE As DataTable)
If CURRENT_LINK_ENTITY_ID = 0 Then
CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID
End If
Dim DT_RECORDS As DataTable
If current = True Then
If CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID Then
DT_RECORDS = GET_CURRENT_ENTITY_DATA()
Else
DT_RECORDS = ReturnDataforEntity(CURRENT_LINK_ENTITY_ID)
DT_ENTITYDATA = DT_RECORDS
End If
Else
DT_RECORDS = ENTITY_DATATABLE
End If
Try
grvwGrid.Columns.Clear()
dgEntityRecords.DataSource = DT_RECORDS
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in format grid", ex.Message, ex.StackTrace)
End Try
End Sub
Private Sub frmDocRecordLink_Load(sender As Object, e As EventArgs) Handles Me.Load
' OLD WAY
If myDocuments.Count = 0 Then
ENTITY_LOAD_ACTIVE = True
If ClassDocGrid.DT_RESULTFILES.Rows.Count = 1 Then
txtFileInfo.Text = ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DOC_PATH")
Else
txtFileInfo.Text = String.Format("{0} files selected for linking to record", ClassDocGrid.DT_RESULTFILES.Rows.Count)
End If
Try
If CURRENT_LINK_ENTITY_ID = 0 Then
Refresh_Grid_Data(True, Nothing)
CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID
Else
Dim DT_RESULT As DataTable
If CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID Then
DT_RESULT = CURRENT_DT_ENTITY_RECORDS
Else
DT_RESULT = ReturnDataforEntity(CURRENT_LINK_ENTITY_ID)
End If
If Not IsNothing(DT_RESULT) Then
Refresh_Grid_Data(False, DT_RESULT)
End If
End If
Dim DT_ENTITIES As DataTable = GetENTITIES()
Dim oSelectedIndex As Integer = 0
If DT_ENTITIES.Rows.Count = 0 Then
Exit Sub
End If
Dim oCount = 0
For Each row As DataRow In DT_ENTITIES.Rows
Dim entity As New ClassEntity
entity.title = row.Item("FORM_TITLE")
entity.id = row.Item("FORM_ID")
cmbConstructorForms.Items.Add(entity)
If CURRENT_LINK_ENTITY_ID = entity.id Then
txtcurrSichtData.Text = entity.title
oSelectedIndex = oCount
End If
oCount += 1
Next
If USER_LANGUAGE = "de-DE" Then
Me.Text = CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " Datei(en) mit Datensatz verknüpfen:"
Else
Me.Text = "Link " & CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " files with record:"
End If
' Den index der aktuell geöffneten ConstructorForm setzen
cmbConstructorForms.SelectedIndex = oSelectedIndex
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in frmDocRecordLink_Load", ex.Message, ex.StackTrace)
End Try
Load_DocGrid_Layout()
bsiInfo.Caption = "Waiting for record-Selection....."
End If
ENTITY_LOAD_ACTIVE = True
' Dateiinfo-Text setzen
If myDocuments.Count > 0 Then
ENTITY_LOAD_ACTIVE = True
If myDocuments.Count = 1 Then
txtFileInfo.Text = myDocuments.First.DocPath
Else
txtFileInfo.Text = String.Format("{0} files selected for linking to record", myDocuments.Count)
End If
Try
If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then
Me.Close()
End If
If CURRENT_LINK_ENTITY_ID = 0 Then
Refresh_Grid_Data(True, Nothing)
CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID
Else
Dim DT_RESULT As DataTable
If CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID Then
DT_RESULT = CURRENT_DT_ENTITY_RECORDS
Else
DT_RESULT = ReturnDataforEntity(CURRENT_LINK_ENTITY_ID)
End If
If Not IsNothing(DT_RESULT) Then
Refresh_Grid_Data(False, DT_RESULT)
End If
End If
Dim DT_ENTITIES As DataTable = GetENTITIES()
Dim oSelectedIndex As Integer = 0
If DT_ENTITIES.Rows.Count = 0 Then
Exit Sub
End If
Dim oCount = 0
For Each row As DataRow In DT_ENTITIES.Rows
Dim entity As New ClassEntity
entity.title = row.Item("FORM_TITLE")
entity.id = row.Item("FORM_ID")
cmbConstructorForms.Items.Add(entity)
If CURRENT_LINK_ENTITY_ID = entity.id Then
txtcurrSichtData.Text = entity.title
oSelectedIndex = oCount
End If
oCount += 1
Next
If USER_LANGUAGE = "de-DE" Then
Me.Text = CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " Datei(en) mit Datensatz verknüpfen:"
Else
Me.Text = "Link " & CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " files with record:"
End If
' Den index der aktuell geöffneten ConstructorForm setzen
cmbConstructorForms.SelectedIndex = oSelectedIndex
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in frmDocRecordLink_Load", ex.Message, ex.StackTrace)
End Try
Load_DocGrid_Layout()
bsiInfo.Caption = "Waiting for record-Selection....."
txtFileInfo.Text = If(myDocuments.Count = 1,
myDocuments.First.DocPath,
String.Format("{0} files selected for linking to record", myDocuments.Count))
Else
txtFileInfo.Text = If(ClassDocGrid.DT_RESULTFILES.Rows.Count = 1,
ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DOC_PATH").ToString(),
String.Format("{0} files selected for linking to record", ClassDocGrid.DT_RESULTFILES.Rows.Count))
End If
Try
If myDocuments.Count > 0 AndAlso IsNothing(CURRENT_DT_ENTITY_RECORDS) Then
Me.Close()
Return
End If
If CURRENT_LINK_ENTITY_ID = 0 Then
Refresh_Grid_Data(True, Nothing)
CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID
DT_ENTITYDATA = GET_CURRENT_ENTITY_DATA()
Else
Dim DT_RESULT As DataTable
If CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID Then
DT_RESULT = CURRENT_DT_ENTITY_RECORDS
Else
DT_RESULT = ReturnDataforEntity(CURRENT_LINK_ENTITY_ID)
End If
If Not IsNothing(DT_RESULT) Then
DT_ENTITYDATA = DT_RESULT
Refresh_Grid_Data(False, DT_RESULT)
End If
End If
Dim DT_ENTITIES As DataTable = GetENTITIES()
If IsNothing(DT_ENTITIES) OrElse DT_ENTITIES.Rows.Count = 0 Then Exit Sub
Dim oSelectedIndex As Integer = 0
Dim oCount As Integer = 0
For Each row As DataRow In DT_ENTITIES.Rows
Dim entity As New ClassEntity
entity.title = row.Item("FORM_TITLE")
entity.id = row.Item("FORM_ID")
cmbConstructorForms.Items.Add(entity)
If CURRENT_LINK_ENTITY_ID = entity.id Then
txtcurrSichtData.Text = entity.title
oSelectedIndex = oCount
End If
oCount += 1
Next
Me.Text = If(USER_LANGUAGE = "de-DE",
CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " Datei(en) mit Datensatz verknüpfen:",
"Link " & CURRENT_DT_SELECTED_FILES.Rows.Count.ToString & " files with record:")
cmbConstructorForms.SelectedIndex = oSelectedIndex
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in frmDocRecordLink_Load", ex.Message, ex.StackTrace)
End Try
Load_DocGrid_Layout()
bsiInfo.Caption = "Waiting for record-Selection....."
End Sub
Private Function GetENTITIES() As DataTable
Try
Dim SQL As String = String.Format("SELECT DISTINCT FORM_ID,FORM_TITLE,SEQUENCE FROM VWPMO_CONSTRUCTOR_FORMS where CONSTRUCT_ID in " &
"(SELECT CONSTRUCT_ID FROM TBPMO_CONSTRUCTOR_USER WHERE USER_ID = {0}) ORDER BY SEQUENCE", USER_GUID)
Dim dt As DataTable = MYDB_ECM.GetDatatable(SQL)
Return dt
Dim SQL As String = String.Format("SELECT DISTINCT FORM_ID,FORM_TITLE,SEQUENCE FROM VWPMO_CONSTRUCTOR_FORMS " &
"where CONSTRUCT_ID in (SELECT CONSTRUCT_ID FROM TBPMO_CONSTRUCTOR_USER WHERE USER_ID = {0}) ORDER BY SEQUENCE", USER_GUID)
Return MYDB_ECM.GetDatatable(SQL)
Catch ex As Exception
MsgBox("Entities could not be loaded in LinkToRecord: " & vbNewLine & ex.Message)
Return Nothing
@@ -187,25 +132,23 @@ Public Class frmDocRecordLink
Try
If Not IsNothing(dgEntityRecords.DataSource) Then
Dim RecordId As Integer = grvwGrid.GetFocusedRowCellValue(grvwGrid.Columns("Record-ID"))
bsiInfo.Caption = "Record (" & RecordId.ToString & ") selected!"
End If
Catch ex As Exception
MsgBox("Could not get the RecordID: " & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Sub Save_DocGrid_Layout()
Try
Dim XMLPath = Get_DocGrid_Layout_Filename()
grvwGrid.SaveLayoutToXml(XMLPath)
bsiInfo.Caption = "Grid-Layout saved - " + Now.ToLongTimeString
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Save_DocGrid_Layout", ex.Message, ex.StackTrace)
End Try
End Sub
Sub Load_DocGrid_Layout()
Try
Dim XMLPath = Get_DocGrid_Layout_Filename()
@@ -213,16 +156,17 @@ Public Class frmDocRecordLink
grvwGrid.RestoreLayoutFromXml(XMLPath)
grvwGrid.GuessAutoFilterRowValuesFromFilter()
bsiInfo.Caption = "Grid-Layout loaded - " + Now.ToLongTimeString
End If
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Load_DocGrid_Layout", ex.Message, ex.StackTrace)
End Try
End Sub
Private Function Get_DocGrid_Layout_Filename()
Private Function Get_DocGrid_Layout_Filename() As String
Dim Filename As String = String.Format("GridViewDocRecordLink-{0}-UserLayout.xml", CURRENT_LINK_ENTITY_ID)
Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
End Function
Private Sub frmDocRecordLink_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If ENTITY_LOAD_ACTIVE = False Then Save_DocGrid_Layout()
End Sub
@@ -231,6 +175,7 @@ Public Class frmDocRecordLink
Me.Cursor = Cursors.WaitCursor
If cmbConstructorForms.SelectedIndex <> -1 Then
Dim entity As ClassEntity = DirectCast(cmbConstructorForms.SelectedItem, ClassEntity)
LOGGER.Debug("Selected Entity: {0} (ID: {1})", entity.title, entity.id)
ENTITY_LOAD_ACTIVE = True
dgEntityRecords.DataSource = Nothing
grvwGrid.Columns.Clear()
@@ -240,23 +185,26 @@ Public Class frmDocRecordLink
CURRENT_LINK_ENTITY_ID = entity.id
txtcurrSichtData.Text = entity.title
DT_ENTITYDATA = DT_RESULT
LOGGER.Debug("Data for Entity {0} loaded with {1} records", entity.title, DT_RESULT.Rows.Count)
Refresh_Grid_Data(False, DT_RESULT)
End If
Load_DocGrid_Layout()
Else
bsiInfo.Caption = "Bitte wöhlen Sie eine Sicht aus! " + Now.ToShortTimeString
bsiInfo.Caption = "Bitte wählen Sie eine Sicht aus! " + Now.ToShortTimeString
End If
' FIX Problem A: ENTITY_LOAD_ACTIVE nach abgeschlossenem Ladevorgang zurücksetzen
ENTITY_LOAD_ACTIVE = False
Me.Cursor = Cursors.Default
End Sub
Private Function ReturnDataforEntity(oEntityID As Integer) As DataTable
Dim ResultSQL, ResultViewName As String
LOGGER.Debug("GridType = Grid")
ResultViewName = $"VWPMO_ENTITY_TABLE{oEntityID}"
bsitmSource.Caption = $"Source: " + ResultViewName
ResultSQL = $"SELECT T.* FROM {ResultViewName} T"
LOGGER.Debug("ResultSQL: " & ResultSQL)
LOGGER.Debug("Executing SQL to load entity data: " & ResultSQL)
Return MYDB_ECM.GetDatatable(ResultSQL)
End Function
@@ -269,15 +217,13 @@ Public Class frmDocRecordLink
Dim selectedRows As Integer() = grvwGrid.GetSelectedRows()
Dim oLinkCount As Integer = 0
LOGGER.Info("Start der Verknüpfung - Es wurden [{0}] Datensätze ausgewählt!", selectedRows.Count)
For Each rowhandle As Integer In selectedRows
Dim oSelectedRecordID = grvwGrid.GetRowCellValue(rowhandle, "Record-ID")
If IsNothing(oSelectedRecordID) Then
Continue For
End If
If IsNothing(oSelectedRecordID) Then Continue For
Try
For Each oRow As DataRow In CURRENT_DT_SELECTED_FILES.Rows
Dim oDocID As Integer
oDocID = oRow.Item("DOC_ID")
Dim oDocID As Integer = oRow.Item("DOC_ID")
LOGGER.Info("DocID {0} will be linked with Record {1} ", oDocID.ToString, oSelectedRecordID.ToString)
Dim DOC_PATH = oRow.Item("FILEPATH")
Dim _objecttype = oRow.Item("OBJECTTYPE")
@@ -307,12 +253,13 @@ Public Class frmDocRecordLink
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Linking Record to file", ex.Message, ex.StackTrace)
End Try
Next
Dim omsg = $"[{oLinkCount}] Datensätze erfolgreich verknüpft! - {Now.ToShortTimeString}"
If USER_LANGUAGE <> "de-DE" Then
omsg = $"[{oLinkCount}] records successfully linked - {Now.ToShortTimeString}"
End If
Dim omsg = If(USER_LANGUAGE = "de-DE",
$"[{oLinkCount}] Datensätze erfolgreich verknüpft! - {Now.ToShortTimeString}",
$"[{oLinkCount}] records successfully linked - {Now.ToShortTimeString}")
MsgBox(omsg, MsgBoxStyle.Information, "orgFLOW")
DT_ENTITYDATA = ReturnDataforEntity(CURRENT_LINK_ENTITY_ID)
Refresh_Grid_Data(False, DT_ENTITYDATA)
Load_DocGrid_Layout()
grvwGrid.ClearSelection()
@@ -325,14 +272,14 @@ Public Class frmDocRecordLink
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmresetlayout.ItemClick
Reset_View_layout()
End Sub
Sub Reset_View_layout()
Me.Cursor = Cursors.WaitCursor
Try
Dim XMLPath = Get_DocGrid_Layout_Filename()
If File.Exists(XMLPath) Then
File.Delete(XMLPath)
Refresh_Grid_Data(True, Nothing)
Refresh_Grid_Data(False, DT_ENTITYDATA)
Else
MsgBox("Resetting the layout was not successful - File not existing!", MsgBoxStyle.Information)
End If

View File

@@ -1,4 +1,5 @@
Imports System.Globalization
Imports System.ComponentModel
Imports System.Globalization
Imports System.Net
Imports System.Threading
'Imports DD_LIB_Standards'
@@ -985,14 +986,14 @@ Public Class frmMain
'ClassProxy.MyPROXYConnectionString = oSqlcon_Proxy
End If
Dim sql = String.Format("UPDATE TBPMO_CLIENT_CONN_SWITCH_USER SET ACTIVE = 1 WHERE GUID = {0}", oINACTIVE_GUID)
MYDB_ECM.GetScalarValue(SQL)
MYDB_ECM.GetScalarValue(sql)
If ClassInit.InitDatabase = True Then
ClassInit.InitUserLogin()
Load_Connection_Dep_Data()
sql = String.Format("UPDATE TBPMO_CLIENT_CONN_SWITCH_USER SET ACTIVE = 1 WHERE UPPER(CONN_NAME) = UPPER('{0}') AND USER_ID = {1}", oSQLDescription, USER_GUID)
Dim oSuccess As Boolean = False
If MYDB_ECM.ExecuteNonQuery(Sql) = True Then
If MYDB_ECM.ExecuteNonQuery(sql) = True Then
oSuccess = True
End If
If oSuccess = True Then
@@ -1029,4 +1030,19 @@ Public Class frmMain
Private Sub ADDIBeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ADDIBeendenToolStripMenuItem.Click
Me.Close()
End Sub
Private Sub frmMain_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
If Not IsNothing(WMMOD) Then
LOGGER.Debug("Closing frmMain - Now logging out...")
Try
WMMOD.Session.Logout()
LOGGER.Debug("WINDREAM_MOD Session logg ed out successfully.")
Catch ex As Exception
LOGGER.Warn("Error while logging out WINDREAM_MOD Session: {0}", ex.Message)
LOGGER.Error(ex)
End Try
End If
End Sub
End Class

View File

@@ -178,7 +178,7 @@ Public Class frmNodeNavigation
' "FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {2} AND CONSTRUCT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, CURRENT_SCREEN_ID, oConstructID)
'DT_VWPMO_CONSTRUCTOR_FORMS = MYDB_ECM.GetDatatable(Sql)
CURRENT_DT_TBPMO_ENTITY_RIGHT_CONTROLS = MYDB_ECM.GetDatatable(String.Format("SELECT T.* FROM TBPMO_ENTITY_RIGHT_CONTROLS T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID where T1.CONSTRUCT_ID = {0}", CONSTRUCTORID))
CURRENT_DT_TBPMO_ENTITY_RIGHT_CONTROLS = MYDB_ECM.GetDatatable(String.Format("SELECT T.* FROM TBPMO_ENTITY_RIGHT_CONTROLS T WITH (NOLOCK) INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID where T1.CONSTRUCT_ID = {0}", CONSTRUCTORID))
Try
If DocumentViewer.Init(LOGCONFIG, MYGDPICTURE_LICENSE_KEY, New DigitalData.Controls.DocumentViewer.DocumentViewer.ToolbarSettings() With {
.ShowPrintButton = True,
@@ -214,8 +214,8 @@ Public Class frmNodeNavigation
'End If
ClassWindowLocation.LoadFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "NODE_NAVIGATION")
Try
DT_CONSTRUCT_VIEW = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_FORM_CONSTRUCTOR WHERE GUID = " & CONSTRUCTORID)
Dim SEL1 = String.Format("SELECT * FROM TBPMO_FORM WHERE GUID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {0} AND CONSTRUCT_ID = {1})", CURRENT_SCREEN_ID, CONSTRUCTORID)
DT_CONSTRUCT_VIEW = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_FORM_CONSTRUCTOR WITH (NOLOCK) WHERE GUID = " & CONSTRUCTORID)
Dim SEL1 = String.Format("SELECT * FROM TBPMO_FORM WITH (NOLOCK) WHERE GUID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {0} AND CONSTRUCT_ID = {1})", CURRENT_SCREEN_ID, CONSTRUCTORID)
DT_ENTITY_DATA = MYDB_ECM.GetDatatable(SEL1)
SEL1 = String.Format("SELECT *, dbo.FNPMO_GET_CONTROL_CAPTION ('{0}', 1, CONTROL_ID) AS 'CAPTION' FROM VWPMO_CONTROL_SCREEN", USER_LANGUAGE)
@@ -255,7 +255,7 @@ Public Class frmNodeNavigation
Dim oTable = Await ClassNodeCommands.LoadNodes(CURRENT_ENTITY_ID)
DT_STRUCTURE_NODES = oTable
Dim oNodeConfigSql = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T.ENTITY_ID = {0}", CURRENT_ENTITY_ID)
Dim oNodeConfigSql = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T WITH (NOLOCK) INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T.ENTITY_ID = {0}", CURRENT_ENTITY_ID)
Dim DT_TREEVIEW_CONFIGURATION = MYDB_ECM.GetDatatable(oNodeConfigSql)
Dim imageInit = TryCast(ImageCollection1, System.ComponentModel.ISupportInitialize)
@@ -375,9 +375,6 @@ Public Class frmNodeNavigation
RPGNodes.Enabled = True
Dim oNodeId = e.Node.Id
Console.Write($"Node ID: {oNodeId}")
Dim oRowObject = TreeListDevexpress.GetRow(oNodeId)
@@ -385,9 +382,7 @@ Public Class frmNodeNavigation
Exit Sub
End If
'If oNodeId = 0 Then
' Exit Sub
'End If
NNLogger.Debug($"FocusedNodeChanged: NodeID={oNodeId}, NodeCaption='{e.Node.GetDisplayText("NODE_CAPTION")}', NodeConfigID={e.Node.GetValue("NODE_CONFIG_ID")}, RecordID={e.Node.GetValue("RECORD_ID")}")
Dim oRowView As DataRowView = oRowObject
Dim oRow As DataRow = oRowView.Row
@@ -716,7 +711,7 @@ Public Class frmNodeNavigation
End Sub
Sub Load_Adding_users()
Try
Dim oSql = String.Format("SELECT * FROM TBPMO_ENTITY_USERRIGHT_ADDING where ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", oConstructID)
Dim oSql = String.Format("SELECT * FROM TBPMO_ENTITY_USERRIGHT_ADDING WITH (NOLOCK) where ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", oConstructID)
DT_ADDING_USERS = MYDB_ECM.GetDatatable(oSql)
Catch ex As Exception
NNLogger.Error(ex)
@@ -726,7 +721,7 @@ Public Class frmNodeNavigation
Private Sub Load_Configurable_Nodes()
Try
btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Dim oSql = String.Format("SELECT * FROM TBPMO_STRUCTURE_NODES_CONFIGURATION where TYPE_NODE = 1000 AND ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", oConstructID)
Dim oSql = String.Format("SELECT * FROM TBPMO_STRUCTURE_NODES_CONFIGURATION WITH (NOLOCK) where TYPE_NODE = 1000 AND ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", oConstructID)
DT_CONFIGURABLE_NODES = MYDB_ECM.GetDatatable(oSql)
NNLogger.Info($"Load_Configurable_Nodes: ConstructID={oConstructID}, " &
@@ -863,7 +858,7 @@ Public Class frmNodeNavigation
ADD_RECORDS_CONSTR = True
End Try
If ENTITY_TYPE = "Personal file" Then
Dim oSQL = "SELECT CAT_STRING FROM TBDD_CATALOG WHERE CAT_TITLE = 'PA_NODE_GUID_STAMM'"
Dim oSQL = "SELECT CAT_STRING FROM TBDD_CATALOG WITH (NOLOCK) WHERE CAT_TITLE = 'PA_NODE_GUID_STAMM'"
PA_NODE_GUID_STAMM = MYDB_ECM.GetScalarValue(oSQL)
oSQL = "SELECT CAT_STRING FROM TBDD_CATALOG WHERE CAT_TITLE = 'PA_NODE_CONFIG_USER_STAMM'"
PA_NODE_CONFIG_USER_STAMM = MYDB_ECM.GetScalarValue(oSQL)
@@ -886,9 +881,9 @@ Public Class frmNodeNavigation
'sql = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = {0} AND oEntityID = {1}", USER_GUID, oEntityID)
DT_RIGHTS_USER = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_RIGHT_USER, "ENTITY_ID = " & _ENTITY_ID, "")
expression = String.Format("")
sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WHERE ENTITY_ID = {0} AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {1})", _ENTITY_ID, USER_GUID)
sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WITH (NOLOCK) WHERE ENTITY_ID = {0} AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WITH (NOLOCK) WHERE USER_ID = {1})", _ENTITY_ID, USER_GUID)
DT_RIGHTS_GROUP = MYDB_ECM.GetDatatable(sql)
sql = String.Format("SELECT VIEW_ID FROM TBPMO_USER_CONSTR_VIEW_TYPE WHERE CONSTRUCTOR_DETAIL_ID = {0} AND [ENTITY_ID] = {1} AND USER_ID = {2}", CURRENT_CONSTRUCTOR_DETAIL_ID, _ENTITY_ID, USER_GUID)
sql = String.Format("SELECT VIEW_ID FROM TBPMO_USER_CONSTR_VIEW_TYPE WITH (NOLOCK) WHERE CONSTRUCTOR_DETAIL_ID = {0} AND [ENTITY_ID] = {1} AND USER_ID = {2}", CURRENT_CONSTRUCTOR_DETAIL_ID, _ENTITY_ID, USER_GUID)
_RECORD_ID = 0
@@ -935,7 +930,6 @@ Public Class frmNodeNavigation
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting Entity-Data - Check logfile")
Else
CURRENT_DT_ENTITY_RECORDS.TableName = "VWPMO_ENTITY_TABLE" & _ENTITY_ID
' Dim SQL_AutoValues = "SELECT GUID AS CONTROL_ID, CONNECTION_ID_1 AS CONNECTION_ID, SQL_COMMAND_1 AS SQL_COMMAND FROM TBPMO_CONTROL WHERE CONNECTION_ID_1 <> '' AND SQL_COMMAND_1 <> '' AND FORM_ID = " & oEntityID
Dim DT_AUTOVALUES = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONNECTION_ID_1 > 0 AND SQL_COMMAND_1 <> '' AND FORM_ID = " & _ENTITY_ID, "")
@@ -980,7 +974,7 @@ Public Class frmNodeNavigation
CONVERT(VARCHAR(16),ADDED_WHEN,20) AS ADDED_WHEN,
COALESCE(CHANGED_WHO,'') AS CHANGED_WHO,
COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') AS CHANGED_WHEN
FROM TBPMO_RECORD WHERE GUID = {RecordId}"
FROM TBPMO_RECORD WITH (NOLOCK) WHERE GUID = {RecordId}"
Dim oTable As DataTable
oTable = MYDB_ECM.GetDatatable(oSql)
@@ -1032,64 +1026,48 @@ Public Class frmNodeNavigation
Private Async Function Show_Selected_Record_Data(pRecordId As Integer, pLoadRecordData As Boolean) As Task
Dim oHandle As IOverlaySplashScreenHandle = Nothing
Try
' ✅ 1. SPLASHSCREEN FÜR CRITICAL-PATH (Control-Loading)
oHandle = SplashScreenManager.ShowOverlayForm(Me)
NNLogger.Debug("[OVERLAY] ShowOverlayForm called at {0}", Now.ToString("HH:mm:ss.fff"))
' ✅ 2. DEBUG LOGGING (wie Original)
NNLogger.Debug("Show_Selected_Record_Data_NonBlocking: RecordID={0}, LoadData={1}", pRecordId, pLoadRecordData)
' ✅ 3. ENTITY-ROW laden (wie Original)
Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable()
Select form
Where form.Item("GUID") = _ENTITY_ID).Single()
NNLogger.Debug("RECORD ID: {0}", pRecordId)
' ✅ 4. GLOBALE VARIABLEN setzen (wie Original)
CURRENT_PARENT_RECORD_ID = 0
RIGHT_CONTROL_CHANGED = False
ENTITY_RELOAD_AFT_CONTROL_LOAD = False
' ✅ 5. PANEL aktivieren
If pnlControls.Enabled = False Then pnlControls.Enabled = True
' ✅ 6. CONTROL-LOADING (CRITICAL PATH - blockierend mit Splashscreen)
Dim sw As New SW("Show_Selected_Record_Data - Control Loading")
If pLoadRecordData = True Then
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValues(_RECORD_ID, 0, _ENTITY_ID, CtrlBuilder.AllControls, _ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
End If
sw.Done()
' ✅ 7. RECORD_CHANGED zurücksetzen (wie Original)
RECORD_CHANGED = False
' ✅ 8. RECORD-LABEL aktualisieren (synchron, schnell)
Update_Record_Label(_RECORD_ID)
' ✅ 9. SPLASHSCREEN SCHLIESSEN - Critical-Path abgeschlossen!
If oHandle IsNot Nothing Then
SplashScreenManager.CloseOverlayForm(oHandle)
oHandle = Nothing
End If
' ── ControlLoading abgeschlossen, Overlay bleibt bis DocSearch fertig ──
NNLogger.Debug("[OVERLAY] Kept open - handing to RUN_DOCSEARCH at {0}", Now.ToString("HH:mm:ss.fff"))
' ══════════════════════════════════════════════════════════════
' ✅ AB HIER: NON-BLOCKING BACKGROUND-TASKS
' ══════════════════════════════════════════════════════════════
' ✅ 10. UI-FEEDBACK: Zeige dass DocSearch läuft
Update_Document_Label(0) ' "Loading documents..."
Update_Notification_Label(True, "Loading documents in background...", "Blue")
Update_Document_Label(0)
Update_Notification_Label(True, "Loading documents...", "Blue")
RibbonPageGroupDocResult.Enabled = False
' ✅ 11. DOCSEARCH IM HINTERGRUND (ohne UI-Freeze)
NNLogger.Debug("Starting background DocSearch for RecordID={0}", pRecordId)
NNLogger.Debug("[DOCSEARCH] RUN_DOCSEARCH START at {0}", Now.ToString("HH:mm:ss.fff"))
Dim oDocumentsFound As Integer = 0
Try
' DocSearch ohne Splashscreen ausführen
oDocumentsFound = Await RUN_DOCSEARCH(False)
NNLogger.Debug("DocSearch completed: {0} documents found", oDocumentsFound)
' ✅ FIX: oHandle wird übergeben RUN_DOCSEARCH schließt es nach FillColumns
oDocumentsFound = Await RUN_DOCSEARCH(False, oHandle)
oHandle = Nothing ' ← Ownership übertragen, nicht nochmal schließen
NNLogger.Debug("[DOCSEARCH] RUN_DOCSEARCH END at {0} - {1} documents found", Now.ToString("HH:mm:ss.fff"), oDocumentsFound)
Catch ex As Exception
NNLogger.Error(ex, "Error in background DocSearch")
@@ -1097,22 +1075,17 @@ Public Class frmNodeNavigation
oDocumentsFound = 0
End Try
' ✅ 12. UI-UPDATE NACH DOCSEARCH
Update_Document_Label(oDocumentsFound)
Update_Notification_Label(False, "", "") ' Notification ausblenden
Update_Notification_Label(False, "", "")
' ✅ 13. DOCVIEWER-HANDLING (wie Original)
If DocViewInitialized Then
If oDocumentsFound = 0 Then
Close_Document_Viewer()
RibbonPageGroupDocResult.Enabled = False
SplitContainerDocView.Collapsed = True
NNLogger.Debug("No documents found - DocViewer collapsed")
Else
RibbonPageGroupDocResult.Enabled = True
' ✅ Original-Logik: Node_AfterSelect-Check
If Node_AfterSelect = False Then
UpdateDocViewCollapsedState()
NNLogger.Debug("Documents found - DocView state updated")
@@ -1120,9 +1093,6 @@ Public Class frmNodeNavigation
SplitContainerDocView.Collapsed = True
NNLogger.Debug("Node_AfterSelect=True - DocView collapsed")
End If
' ✅ OPTIONAL: DocView im Hintergrund laden (falls aktiviert)
' ✅ Direkt awaiten statt Task.Run wir sind bereits im Async-Kontext
If checkShowPreview.Checked AndAlso Not Node_AfterSelect Then
NNLogger.Debug("Starting DocView loading")
Await DocView_DisplaySelectedDoc(AfterNodeChange:=False)
@@ -1135,11 +1105,11 @@ Public Class frmNodeNavigation
Catch ex As Exception
NNLogger.Error(ex, "Error in Show_Selected_Record_Data_NonBlocking")
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in SelectedRecord_ShowData: ", ex.Message)
Finally
' ✅ SICHERSTELLEN: Splashscreen wird IMMER geschlossen
' ✅ Sicherheitsnetz: schließen falls RUN_DOCSEARCH es nicht übernommen hat
If oHandle IsNot Nothing Then
Try
NNLogger.Debug("[OVERLAY] CloseOverlayForm (Finally-Fallback) at {0}", Now.ToString("HH:mm:ss.fff"))
SplashScreenManager.CloseOverlayForm(oHandle)
Catch ex As Exception
NNLogger.Warn(ex, "Could not close overlay form")
@@ -1742,7 +1712,7 @@ Public Class frmNodeNavigation
#End Region
Private Sub Customer_Run_Procedures()
Try
Dim DT As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_RUN_PROCEDURES WHERE FORM_ID = " & _ENTITY_ID)
Dim DT As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_RUN_PROCEDURES WITH (NOLOCK) WHERE FORM_ID = " & _ENTITY_ID)
If Not DT Is Nothing Then
For Each row As DataRow In DT.Rows
Dim prsql As String = row.Item("EXECUTE_COMMAND")
@@ -1757,17 +1727,19 @@ Public Class frmNodeNavigation
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Customer_Run_Procedures: ", ex.Message)
End Try
End Sub
Private Async Function RUN_DOCSEARCH(pShowSplashscreen As Boolean) As Task(Of Integer)
Dim oHandle As IOverlaySplashScreenHandle
Private Async Function RUN_DOCSEARCH(pShowSplashscreen As Boolean,
Optional pExternalHandle As IOverlaySplashScreenHandle = Nothing) As Task(Of Integer)
Dim oHandle As IOverlaySplashScreenHandle = pExternalHandle ' ← externer Handle übernommen
If pShowSplashscreen Then
oHandle = SplashScreenManager.ShowOverlayForm(Me)
NNLogger.Debug("[OVERLAY] RUN_DOCSEARCH ShowOverlayForm at {0}", Now.ToString("HH:mm:ss.fff"))
End If
Dim sw As New SW("RUN_WDSEARCH_GRID")
Dim oFilesFound As Integer = 0
Try
If _RECORD_ID = 0 Then
GridControlDocSearch.DataSource = Nothing
Return 0
@@ -1775,59 +1747,58 @@ Public Class frmNodeNavigation
bsitmtInfoDoc.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
If CURRENT_SEARCH_TYPE = "NODE_DOWN" Then
Dim sql = String.Format("DECLARE @return_value int " & vbNewLine &
"EXEC @return_value = [dbo].[PRPMO_NODES_GET_CHILD_RECORDS] @USER_ID = {0}, @NODE_ID = {1} " & vbNewLine &
"SELECT 'Return Value' = @return_value", USER_GUID, _NODE_GUID)
Dim DT_ASYNC As DataTable = Await MYDB_ECM.GetDatatableAsync(sql)
If Not IsNothing(DT_ASYNC) Then
Dim result = DT_ASYNC.Rows(0).Item(0)
If result <> 0 Then
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Getting SubNodes-Structure", "Check the logfile")
End If
End If
End If
NNLogger.Debug("[DOCSEARCH] Get_DOC_RESULTTABLE START at {0}", Now.ToString("HH:mm:ss.fff"))
Dim DT_RESULT As DataTable
DT_RESULT = ClassDOC_SEARCH.Get_DOC_RESULTTABLE(DT_RESULTLIST_OPTIONS, DT_RESULTLIST_VARIABLE_VALUE, DT_COLUMNS_GRID_ENTITY, _ENTITY_ID, _RECORD_ID, True)
NNLogger.Debug("[DOCSEARCH] Get_DOC_RESULTTABLE END at {0} - Rows={1}", Now.ToString("HH:mm:ss.fff"), If(IsNothing(DT_RESULT), "Nothing", DT_RESULT.Rows.Count.ToString()))
If IsNothing(DT_RESULT) Then
Dim msg = "wrong DocSearch-Configuration or unexpected Error in Get_DOC_RESULTTABLE - Check logfile and contact Digital Data"
GridViewDoc_Search.ViewCaption = msg
GridViewDoc_Search.ViewCaption = "wrong DocSearch-Configuration or unexpected Error in Get_DOC_RESULTTABLE - Check logfile and contact Digital Data"
oFilesFound = 0
Else
If DT_RESULT.Rows.Count > 0 Then 'Es gibt Suchergebnisse
If DT_RESULT.Rows.Count > 0 Then
If CURRENT_SEARCH_TYPE = "FULLTEXT" Then
GridViewDoc_Search.ShowFindPanel()
GridViewDoc_Search.FindFilterText = CURRENT_FULLTEXT_PATTERN
End If
If Not IsNothing(DT_DOCRESULT_DROPDOWN_ITEMS) Then
If DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then
NNLogger.Info($"RUN_WDSEARCH_GRID - DT_DOCRESULT_DROPDOWN_ITEMS [{DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count}]!")
End If
End If
ClassDocGrid.FillColumns(
GridViewDoc_Search,
DT_RESULT,
DT_COLUMNS_GRID_ENTITY,
DT_DOCRESULT_DROPDOWN_ITEMS,
AddressOf OnCBSelectedValueChanged,
AddressOf OnDateSelectedValueChanged,
AddressOf OnTextSelectedValueChanged,
AddressOf OnCheckboxValueChanged,
CURRENT_SEARCH_TYPE, _RECORD_ID)
If DT_RESULT.Rows.Count > 0 Then
If CURRENT_SEARCH_TYPE = "FULLTEXT" Then
GridViewDoc_Search.ShowFindPanel()
GridViewDoc_Search.FindFilterText = CURRENT_FULLTEXT_PATTERN
End If
If Not IsNothing(DT_DOCRESULT_DROPDOWN_ITEMS) AndAlso DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then
NNLogger.Info($"RUN_WDSEARCH_GRID - DT_DOCRESULT_DROPDOWN_ITEMS [{DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count}]!")
End If
NNLogger.Debug("[DOCSEARCH] FillColumns START at {0}", Now.ToString("HH:mm:ss.fff"))
ClassDocGrid.FillColumns(
GridViewDoc_Search,
DT_RESULT,
DT_COLUMNS_GRID_ENTITY,
DT_DOCRESULT_DROPDOWN_ITEMS,
AddressOf OnCBSelectedValueChanged,
AddressOf OnDateSelectedValueChanged,
AddressOf OnTextSelectedValueChanged,
AddressOf OnCheckboxValueChanged,
CURRENT_SEARCH_TYPE, _RECORD_ID)
NNLogger.Debug("[DOCSEARCH] FillColumns END at {0}", Now.ToString("HH:mm:ss.fff"))
' ✅ FIX: Overlay NACH FillColumns schließen
If oHandle IsNot Nothing Then
NNLogger.Debug("[OVERLAY] CloseOverlayForm after FillColumns at {0}", Now.ToString("HH:mm:ss.fff"))
SplashScreenManager.CloseOverlayForm(oHandle)
oHandle = Nothing
End If
'BbtnitmDocSearch.Enabled = TruefRe
oFilesFound = DT_RESULT.Rows.Count
Else
GridControlDocSearch.DataSource = Nothing
oFilesFound = 0
End If
@@ -1840,10 +1811,16 @@ Public Class frmNodeNavigation
sw.Done()
bsitmtInfoDoc.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Update_Notification_Label(False, "", "")
If pShowSplashscreen Then
' ✅ Sicherheitsnetz: Handle schließen falls FillColumns-Pfad nicht erreicht wurde (0 Rows / Fehler)
If oHandle IsNot Nothing Then
NNLogger.Debug("[OVERLAY] CloseOverlayForm (RUN_DOCSEARCH Finally-Fallback) at {0}", Now.ToString("HH:mm:ss.fff"))
SplashScreenManager.CloseOverlayForm(oHandle)
End If
If pShowSplashscreen Then
NNLogger.Debug("[OVERLAY] RUN_DOCSEARCH own handle closed at {0}", Now.ToString("HH:mm:ss.fff"))
End If
End Try
Return oFilesFound
@@ -1851,7 +1828,7 @@ Public Class frmNodeNavigation
Private Sub RUN_ENTITY_DOC_SEARCH()
Dim sw As New SW("RUN_ENTITY_DOC_SEARCH")
Try
Dim oSQL = $"SELECT ENTITY_DOC_SEARCH FROM TBPMO_FORM WHERE GUID = {_ENTITY_ID}"
Dim oSQL = $"SELECT ENTITY_DOC_SEARCH FROM TBPMO_FORM WITH (NOLOCK) WHERE GUID = {_ENTITY_ID}"
CURRENT_DOCSEARCH_SQL = MYDB_ECM.GetScalarValue(oSQL)
If CURRENT_DOCSEARCH_SQL <> String.Empty Then
Dim oText = $"Die sichtweite Suche wird im Hintergrund ausgeführt und in einem separaten Fenster angezeigt sobald sie fertig ist."
@@ -2555,7 +2532,7 @@ Public Class frmNodeNavigation
Dim oErrorCount As Integer = 0
For Each pDocId In pDocIds
Dim oSql = $"IF NOT EXISTS (SELECT 1 FROM TBPMO_DOC_RECORD_LINK WHERE DOC_ID = {pDocId} AND RECORD_ID = {_RECORD_ID}) " &
Dim oSql = $"IF NOT EXISTS (SELECT 1 FROM TBPMO_DOC_RECORD_LINK WITH (NOLOCK) WHERE DOC_ID = {pDocId} AND RECORD_ID = {_RECORD_ID}) " &
$"INSERT INTO TBPMO_DOC_RECORD_LINK (DOC_ID, RECORD_ID, ADDED_WHO, ADDED_WHEN) " &
$"VALUES ({pDocId}, {_RECORD_ID}, '{USER_USERNAME}', GETDATE())"
@@ -2950,7 +2927,7 @@ Public Class frmNodeNavigation
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 1 Then
Try
Dim oSQLDRList = $"Select COALESCE(IN_WORK_USER,'') IN_WORK_USER, COALESCE(IN_WORK_COMMENT,'') IN_WORK_COMMENT,IN_WORK FROM TBPMO_DOCRESULT_LIST where DocID = {oDocuments.First.DocId}"
Dim oSQLDRList = $"Select COALESCE(IN_WORK_USER,'') IN_WORK_USER, COALESCE(IN_WORK_COMMENT,'') IN_WORK_COMMENT,IN_WORK FROM TBPMO_DOCRESULT_LIST WITH (NOLOCK) where DocID = {oDocuments.First.DocId}"
Dim oDT As DataTable = MYDB_ECM.GetDatatable(oSQLDRList)
If Not IsNothing(oDT) Then
If oDT.Rows.Count = 1 Then
@@ -3261,6 +3238,7 @@ Public Class frmNodeNavigation
ClassFileResult.DocID = oDocuments.First.DocId
ClassFileResult.ParentID = oDocuments.First.ParentID
ClassFileResult.FileName = oDocuments.First.Filename
ClassFileResult.DocumentPath = oDocuments.First.DocPath
frmWM_CreateVersion.ShowDialog()
Await RUN_DOCSEARCH(True)
Else
@@ -3783,7 +3761,7 @@ Public Class frmNodeNavigation
Dim oDElWMFile As Boolean = False
Dim oCountLinks As Integer
If Not IsNothing(oDoc.DocId) Then
oCountLinks = MYDB_ECM.GetScalarValue("SELECT COUNT(GUID) FROM TBPMO_DOC_RECORD_LINK WHERE DOC_ID = " & oDoc.DocId)
oCountLinks = MYDB_ECM.GetScalarValue("SELECT COUNT(GUID) FROM TBPMO_DOC_RECORD_LINK WITH (NOLOCK) WHERE DOC_ID = " & oDoc.DocId)
If oCountLinks > 1 And CURRENT_SEARCH_TYPE = "RECORD" Then
msg = "Diese Datei ist noch mit anderen Datensätzen verknüpft! Wollen Sie diese Verknüpfungen ebenfalls löschen?"
If USER_LANGUAGE <> "de-DE" Then
@@ -3839,7 +3817,7 @@ Public Class frmNodeNavigation
Private Sub TimerFileHandle_Tick(sender As Object, e As EventArgs) Handles TimerFileHandle.Tick
Try
Dim oSql = $"SELECT GUID FROM TBPMO_DOC_USER_REFRESH_VIEW WHERE USER_ID IN ({USER_GUID},0) AND REFRESHED_WHEN IS NULL"
Dim oSql = $"SELECT GUID FROM TBPMO_DOC_USER_REFRESH_VIEW WITH (NOLOCK) WHERE USER_ID IN ({USER_GUID},0) AND REFRESHED_WHEN IS NULL"
Dim oDTGUID As DataTable = MYDB_ECM.GetDatatable(oSql)
If oDTGUID.Rows.Count >= 1 Then
Dim omsg = "Attention: The DocID of one document changed or a document has been versioned! The DocSearch has been refreshed!"
@@ -3984,7 +3962,7 @@ Public Class frmNodeNavigation
If mySelectedDocs.Count = 1 Then
Dim oDocId As Integer = mySelectedDocs.First.DocId
Dim oJumpToDocSQL = String.Format("DECLARE @PID BIGINT
SELECT @PID = dwParentID FROM TBPMO_DOCRESULT_LIST WHERE DocID = {0}
SELECT @PID = dwParentID FROM TBPMO_DOCRESULT_LIST WITH (NOLOCK) WHERE DocID = {0}
SELECT GUID FROM VWPMO_STRUCTURE_NODES WHERE ENTITY_ID = {1} AND ISNUMERIC(ID1) = 1 AND ID1 = @PID", oDocId, OF_FILESTORE_ENTITY)
Dim ojumpID As Integer = MYDB_ECM.GetScalarValue(oJumpToDocSQL)
If Not IsNothing(ojumpID) AndAlso ojumpID <> 0 Then

View File

@@ -13,11 +13,11 @@ Public Class frmWM_CreateVersion
'Dim odwVersionId = MYDB_ECM.GetScalarValue(oSql)
'Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,DOC_PATH) VALUES ({USER_GUID},'{ProcID.ToString}',{odwVersionId},{BW_DocID},'{BW_DocPath}')"
'MYDB_ECM.ExecuteNonQuery(oInsert)
Dim sql = $"SELECT DocID from VWPMO_DOC_SYNC Where dwParentID = {ClassFileResult.ParentID} and Filename = '{ClassFileResult.FileName}'"
Dim VERSION = MYDB_ECM.GetScalarValue(sql)
If Not IsNothing(VERSION) Then
VERSION = VERSION + 1
Dim upd = String.Format("UPDATE TBPMO_DOCRESULT_LIST SET Version = {0},Change_DateTime = GETDATE() WHERE DocID = {1}", VERSION, ClassFileResult.DocID)
Dim sql = $"SELECT Version from VWPMO_DOC_SYNC Where dwParentID = {ClassFileResult.ParentID} and Filename = '{ClassFileResult.FileName}'"
Dim oVERSION = MYDB_ECM.GetScalarValue(sql)
If Not IsNothing(oVERSION) Then
oVERSION = oVERSION
Dim upd = String.Format("UPDATE TBPMO_DOCRESULT_LIST SET Version = {0},Change_DateTime = GETDATE() WHERE DocID = {1}", oVERSION, ClassFileResult.DocID)
MYDB_ECM.ExecuteNonQuery(upd)
End If

View File

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