From 0125d9b0473da23abacdc13abe0e808342ac15a0 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 27 Mar 2026 14:08:05 +0100 Subject: [PATCH] Versionierung windream, DocRecordLink, Overlay in NodeNavigation --- app/DD-Record-Organizer/App.config | 4 + .../Classes/ClassDOC_SEARCH.vb | 48 ++-- .../Classes/ClassDocGrid.vb | 12 +- app/DD-Record-Organizer/Log_ewa.txt | Bin 153702 -> 0 bytes app/DD-Record-Organizer/Log_orgFLOW.txt | 162 +++++++++++ .../My Project/AssemblyInfo.vb | 2 +- app/DD-Record-Organizer/OrgFlow.vbproj | 2 +- app/DD-Record-Organizer/frmDocRecordLink.vb | 253 +++++++----------- app/DD-Record-Organizer/frmMain.vb | 22 +- app/DD-Record-Organizer/frmNodeNavigation.vb | 176 ++++++------ .../frmWM_CreateVersion.vb | 10 +- app/OrgFlow.sln | 42 --- 12 files changed, 409 insertions(+), 324 deletions(-) delete mode 100644 app/DD-Record-Organizer/Log_ewa.txt create mode 100644 app/DD-Record-Organizer/Log_orgFLOW.txt diff --git a/app/DD-Record-Organizer/App.config b/app/DD-Record-Organizer/App.config index ecfcfaf..30b37e2 100644 --- a/app/DD-Record-Organizer/App.config +++ b/app/DD-Record-Organizer/App.config @@ -117,6 +117,10 @@ + + + + diff --git a/app/DD-Record-Organizer/Classes/ClassDOC_SEARCH.vb b/app/DD-Record-Organizer/Classes/ClassDOC_SEARCH.vb index 6911c98..42da4f6 100644 --- a/app/DD-Record-Organizer/Classes/ClassDOC_SEARCH.vb +++ b/app/DD-Record-Organizer/Classes/ClassDOC_SEARCH.vb @@ -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) diff --git a/app/DD-Record-Organizer/Classes/ClassDocGrid.vb b/app/DD-Record-Organizer/Classes/ClassDocGrid.vb index 831fe9c..54ddac6 100644 --- a/app/DD-Record-Organizer/Classes/ClassDocGrid.vb +++ b/app/DD-Record-Organizer/Classes/ClassDocGrid.vb @@ -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 diff --git a/app/DD-Record-Organizer/Log_ewa.txt b/app/DD-Record-Organizer/Log_ewa.txt deleted file mode 100644 index 1c7a20fb21f7a39d59edecdd8c6caf6874069d92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153702 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 b>s!%&cl{xq-yJ(cCS`W|oS2zjO-BBI!b6!Y diff --git a/app/DD-Record-Organizer/Log_orgFLOW.txt b/app/DD-Record-Organizer/Log_orgFLOW.txt new file mode 100644 index 0000000..9485f36 --- /dev/null +++ b/app/DD-Record-Organizer/Log_orgFLOW.txt @@ -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 diff --git a/app/DD-Record-Organizer/My Project/AssemblyInfo.vb b/app/DD-Record-Organizer/My Project/AssemblyInfo.vb index c33abd3..4e23526 100644 --- a/app/DD-Record-Organizer/My Project/AssemblyInfo.vb +++ b/app/DD-Record-Organizer/My Project/AssemblyInfo.vb @@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + \ No newline at end of file diff --git a/app/DD-Record-Organizer/OrgFlow.vbproj b/app/DD-Record-Organizer/OrgFlow.vbproj index 6948e6b..a05770d 100644 --- a/app/DD-Record-Organizer/OrgFlow.vbproj +++ b/app/DD-Record-Organizer/OrgFlow.vbproj @@ -1726,7 +1726,7 @@ PreserveNewest - + diff --git a/app/DD-Record-Organizer/frmDocRecordLink.vb b/app/DD-Record-Organizer/frmDocRecordLink.vb index 1be9629..e7ccd71 100644 --- a/app/DD-Record-Organizer/frmDocRecordLink.vb +++ b/app/DD-Record-Organizer/frmDocRecordLink.vb @@ -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 + + 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 + + ''' + ''' Lädt das Grid neu. + ''' Wenn current=True wird versucht, die zuletzt gewählte Entity korrekt zu laden. + ''' 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 - DT_RECORDS = GET_CURRENT_ENTITY_DATA() - + 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 - If CURRENT_LINK_ENTITY_ID = 0 Then - CURRENT_LINK_ENTITY_ID = CURRENT_ENTITY_ID - 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....." + Private Sub frmDocRecordLink_Load(sender As Object, e As EventArgs) Handles Me.Load + ENTITY_LOAD_ACTIVE = True + ' Dateiinfo-Text setzen + If myDocuments.Count > 0 Then + 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 - 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) + Try + If myDocuments.Count > 0 AndAlso IsNothing(CURRENT_DT_ENTITY_RECORDS) Then + Me.Close() + Return 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 + 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 - - - Dim DT_ENTITIES As DataTable = GetENTITIES() - Dim oSelectedIndex As Integer = 0 - - If DT_ENTITIES.Rows.Count = 0 Then - Exit Sub + If Not IsNothing(DT_RESULT) Then + DT_ENTITYDATA = DT_RESULT + Refresh_Grid_Data(False, DT_RESULT) 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 + + 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 - ' Den index der aktuell geöffneten ConstructorForm setzen - cmbConstructorForms.SelectedIndex = oSelectedIndex + oCount += 1 + Next - Catch ex As Exception - ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in frmDocRecordLink_Load", ex.Message, ex.StackTrace) - End Try + 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:") - Load_DocGrid_Layout() - bsiInfo.Caption = "Waiting for record-Selection....." + cmbConstructorForms.SelectedIndex = oSelectedIndex - End If + 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 diff --git a/app/DD-Record-Organizer/frmMain.vb b/app/DD-Record-Organizer/frmMain.vb index 74600dd..c8c75d9 100644 --- a/app/DD-Record-Organizer/frmMain.vb +++ b/app/DD-Record-Organizer/frmMain.vb @@ -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 diff --git a/app/DD-Record-Organizer/frmNodeNavigation.vb b/app/DD-Record-Organizer/frmNodeNavigation.vb index 96d51af..b2ba5ba 100644 --- a/app/DD-Record-Organizer/frmNodeNavigation.vb +++ b/app/DD-Record-Organizer/frmNodeNavigation.vb @@ -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 - - ' ══════════════════════════════════════════════════════════════ - ' ✅ AB HIER: NON-BLOCKING BACKGROUND-TASKS - ' ══════════════════════════════════════════════════════════════ + ' ── ControlLoading abgeschlossen, Overlay bleibt bis DocSearch fertig ── + NNLogger.Debug("[OVERLAY] Kept open - handing to RUN_DOCSEARCH at {0}", Now.ToString("HH:mm:ss.fff")) - ' ✅ 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 diff --git a/app/DD-Record-Organizer/frmWM_CreateVersion.vb b/app/DD-Record-Organizer/frmWM_CreateVersion.vb index ffd4fe6..35a5775 100644 --- a/app/DD-Record-Organizer/frmWM_CreateVersion.vb +++ b/app/DD-Record-Organizer/frmWM_CreateVersion.vb @@ -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 diff --git a/app/OrgFlow.sln b/app/OrgFlow.sln index f276311..6e32f78 100644 --- a/app/OrgFlow.sln +++ b/app/OrgFlow.sln @@ -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