From 8247ae80055dddcda09348b7f9ad62d636cd5237 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 11 Feb 2022 16:17:57 +0100 Subject: [PATCH 1/3] Zooflow: use displayname --- GUIs.Common/DocumentResultList/Document.vb | 1 + GUIs.Common/DocumentResultList/Loader.vb | 12 ++++++++---- GUIs.Common/frmDocumentResultList.vb | 8 +++++--- Modules.Base/Base/IDB/Attributes.vb | 9 +++++++++ Service.EDMIService/EDMIService.vbproj | 4 ++++ .../GlobalIndexer/ImportFile/ImportFileMethod.vb | 6 ++++-- .../Methods/IDB/NewFile/NewFileMethod.vb | 7 ++++--- 7 files changed, 35 insertions(+), 12 deletions(-) diff --git a/GUIs.Common/DocumentResultList/Document.vb b/GUIs.Common/DocumentResultList/Document.vb index aacc6dfa..1ef3c4d0 100644 --- a/GUIs.Common/DocumentResultList/Document.vb +++ b/GUIs.Common/DocumentResultList/Document.vb @@ -32,6 +32,7 @@ Namespace DocumentResultList Public Property TempPath As String = Nothing Public Property FileHash As String = Nothing Public Property DocumentType As String = Nothing + Public Property DisplayFileName As String = Nothing Public Sub New(pPrimaryKey As Long) Id = pPrimaryKey diff --git a/GUIs.Common/DocumentResultList/Loader.vb b/GUIs.Common/DocumentResultList/Loader.vb index 52185407..cd1b4e52 100644 --- a/GUIs.Common/DocumentResultList/Loader.vb +++ b/GUIs.Common/DocumentResultList/Loader.vb @@ -56,15 +56,17 @@ Namespace DocumentResultList Dim oDocumentInfo As DocumentInfo = Client.GetDocumentInfo(User.UserId, pObjectId) Dim oFileInfo As New FileInfo(oDocumentInfo.FullPath) - ' Load Doctype Attribute + ' Load System Attributes Dim oDoctype As VariableValue = Client.GetVariableValue(pObjectId, Attributes.ATTRIBUTE_DOCTYPE) + Dim oDisplayFileName As VariableValue = Client.GetVariableValue(pObjectId, Attributes.ATTRIBUTE_DISPLAY_FILENAME) Dim oResultDocumentInfo As New Document(pObjectId) With { .Contents = Load_FromDisk(oDocumentInfo.FullPath), .AccessRight = oDocumentInfo.AccessRight, .FullPath = oDocumentInfo.FullPath, .Extension = oFileInfo.Extension.Substring(1), - .DocumentType = oDoctype.Value + .DocumentType = oDoctype.Value, + .DisplayFileName = oDisplayFileName.Value } Return oResultDocumentInfo @@ -81,8 +83,9 @@ Namespace DocumentResultList Return Nothing End If - ' Load Doctype Attribute + ' Load System Attributes Dim oDoctype As VariableValue = Client.GetVariableValue(pObjectId, Attributes.ATTRIBUTE_DOCTYPE) + Dim oDisplayFileName As VariableValue = Client.GetVariableValue(pObjectId, Attributes.ATTRIBUTE_DISPLAY_FILENAME) Dim oResultDocumentInfo As New Document(pObjectId) With { .Contents = oFileObject._FileContents, @@ -90,7 +93,8 @@ Namespace DocumentResultList .AccessRight = Rights.AccessRight.FULL, .FileHash = oFileObject._FileHash, .FullPath = Nothing, - .DocumentType = oDoctype.Value + .DocumentType = oDoctype.Value, + .DisplayFileName = oDisplayFileName.Value } Return oResultDocumentInfo diff --git a/GUIs.Common/frmDocumentResultList.vb b/GUIs.Common/frmDocumentResultList.vb index b4b341c4..d9f588c4 100644 --- a/GUIs.Common/frmDocumentResultList.vb +++ b/GUIs.Common/frmDocumentResultList.vb @@ -315,6 +315,7 @@ Public Class frmDocumentResultList Private Async Function Watcher_UpdateFile(pFile As DocumentResultList.Watcher.OpenFile, pCreateNewVersion As Boolean) As Task Dim oFileInfo As New FileInfo(pFile.FilePath) + Dim oDisplayName As String = pFile.Document.DisplayFileName Dim oObjectId = Await _IDBClient.UpdateFileAsync(pFile.Document.Id, pFile.FilePath, New Options.UpdateFileOptions With { .CreateNewFileVersion = pCreateNewVersion, .Language = Environment.User.Language, @@ -322,16 +323,17 @@ Public Class frmDocumentResultList }) If IsNothing(oObjectId) Then - MsgBox($"Beim Speichern der Datei '{oFileInfo.Name}' Fehler ist ein Fehler aufgetreten!", MsgBoxStyle.Critical, Text) + MsgBox($"Beim Speichern der Datei '{oDisplayName}' Fehler ist ein Fehler aufgetreten!", MsgBoxStyle.Critical, Text) Else - MsgBox($"Die Datei '{oFileInfo.Name}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text) + MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text) RaiseEvent NeedsRefresh(Me, Params.ProfileGuid) End If End Function Private Async Function Watcher_Ask(pFile As DocumentResultList.Watcher.OpenFile) As Task Dim oFileInfo = New FileInfo(pFile.FilePath) - Dim oMessage = $"Die Datei '{oFileInfo.Name}' wurde außerhalb des Systems verändert. Wollen Sie diese Änderung als neue Version in das System übernehmen oder überschreiben?" + Dim oDisplayName = pFile.Document.DisplayFileName + Dim oMessage = $"Die Datei '{oDisplayName}' wurde außerhalb des Systems verändert. Wollen Sie diese Änderung als neue Version in das System übernehmen oder überschreiben?" Dim oMessageBox As New MsgBoxEx(oMessage, "Datei verändert", MessageBoxIcon.Question) oMessageBox.SetButtons("Überschreiben", "Neue Version", "Abbrechen") diff --git a/Modules.Base/Base/IDB/Attributes.vb b/Modules.Base/Base/IDB/Attributes.vb index a6b62527..bf7bd740 100644 --- a/Modules.Base/Base/IDB/Attributes.vb +++ b/Modules.Base/Base/IDB/Attributes.vb @@ -1,6 +1,15 @@ Namespace IDB Public Class Attributes Public Const ATTRIBUTE_DOCTYPE = "Doctype" + Public Const ATTRIBUTE_DYNAMIC_FOLDER = "Dynamic Folder" + + Public Const ATTRIBUTE_ORIGIN_FILENAME = "OriginFileName" + Public Const ATTRIBUTE_ORIGIN_CHANGED = "OriginChangedDatetime" + Public Const ATTRIBUTE_ORIGIN_CREATED = "OriginCreationDatetime" + + Public Const ATTRIBUTE_DISPLAY_FILENAME = "DisplayFileName" + Public Const ATTRIBUTE_DISPLAY_FILENAME1 = "DisplayFileName1" + End Class End Namespace \ No newline at end of file diff --git a/Service.EDMIService/EDMIService.vbproj b/Service.EDMIService/EDMIService.vbproj index 00656f80..aae3abe5 100644 --- a/Service.EDMIService/EDMIService.vbproj +++ b/Service.EDMIService/EDMIService.vbproj @@ -242,6 +242,10 @@ + + {6ea0c51f-c2b1-4462-8198-3de0b32b74f8} + Base + {44982F9B-6116-44E2-85D0-F39650B1EF99} Config diff --git a/Service.EDMIService/Methods/GlobalIndexer/ImportFile/ImportFileMethod.vb b/Service.EDMIService/Methods/GlobalIndexer/ImportFile/ImportFileMethod.vb index b3ea349a..ae764150 100644 --- a/Service.EDMIService/Methods/GlobalIndexer/ImportFile/ImportFileMethod.vb +++ b/Service.EDMIService/Methods/GlobalIndexer/ImportFile/ImportFileMethod.vb @@ -6,6 +6,7 @@ Imports DigitalData.Modules.Language Imports DigitalData.Services.EDMIService.Methods.Database Imports DigitalData.Services.EDMIService.Methods.IDB Imports DigitalData.Modules.ZooFlow.State +Imports DigitalData.Modules.Base.IDB Namespace Methods.GlobalIndexer.ImportFile Public Class ImportFileMethod @@ -86,9 +87,10 @@ Namespace Methods.GlobalIndexer.ImportFile Logger.Info("Collecting Attributes for ObjectId [{0}]", oResponse.ObjectId) Dim oFinalAttributes As New Dictionary(Of String, List(Of String)) From { - {"DisplayFileName", New List(Of String) From {oDisplayFilename}}, - {"Dynamic Folder", New List(Of String) From {oDynamicFilePath}} + {Attributes.ATTRIBUTE_DISPLAY_FILENAME, New List(Of String) From {oDisplayFilename}}, + {Attributes.ATTRIBUTE_DYNAMIC_FOLDER, New List(Of String) From {oDynamicFilePath}} } + oFinalAttributes = oFinalAttributes. Concat(Helpers.UserAttributesToDictionary(oUserAttributes)). Concat(Helpers.UserAttributesToDictionary(oAutoAttributes)). diff --git a/Service.EDMIService/Methods/IDB/NewFile/NewFileMethod.vb b/Service.EDMIService/Methods/IDB/NewFile/NewFileMethod.vb index 49251aaf..43a37ab1 100644 --- a/Service.EDMIService/Methods/IDB/NewFile/NewFileMethod.vb +++ b/Service.EDMIService/Methods/IDB/NewFile/NewFileMethod.vb @@ -1,4 +1,5 @@ Imports System.Data.SqlClient +Imports DigitalData.Modules.Base.IDB Imports DigitalData.Modules.Database Imports DigitalData.Modules.Database.MSSQLServer.TransactionMode Imports DigitalData.Modules.Logging @@ -105,9 +106,9 @@ Namespace Methods.IDB.NewFile '--------------------------------------------------------------------------- Dim oSystemAttributes As New Dictionary(Of String, Object) From { - {"OriginFileName", pData.File.FileName}, - {"OriginCreationDatetime", pData.File.FileCreatedAt}, - {"OriginChangedDatetime", pData.File.FileChangedAt} + {Attributes.ATTRIBUTE_ORIGIN_FILENAME, pData.File.FileName}, + {Attributes.ATTRIBUTE_ORIGIN_CREATED, pData.File.FileCreatedAt}, + {Attributes.ATTRIBUTE_ORIGIN_CHANGED, pData.File.FileChangedAt} } For Each oAttribute As KeyValuePair(Of String, Object) In oSystemAttributes From 37f3dc7d4fec99fc895802313919b2bd70c583d4 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 14 Feb 2022 15:52:40 +0100 Subject: [PATCH 2/3] Common/ObjectPropertyDialog: Fix duplicate attribute boxes by filtering by lang code --- GUIs.Common/ObjectPropertyDialog/frmObjectPropertyDialog.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GUIs.Common/ObjectPropertyDialog/frmObjectPropertyDialog.vb b/GUIs.Common/ObjectPropertyDialog/frmObjectPropertyDialog.vb index 68968ad0..4cac70d8 100644 --- a/GUIs.Common/ObjectPropertyDialog/frmObjectPropertyDialog.vb +++ b/GUIs.Common/ObjectPropertyDialog/frmObjectPropertyDialog.vb @@ -71,7 +71,7 @@ Public Class frmObjectPropertyDialog Private Async Function GetAttributesForBusinessEntity(EntityId As Long) As Task(Of List(Of Attribute)) Try - Dim oSQL = $"SELECT * FROM VWIDB_BE_ATTRIBUTE WHERE BE_ID = {EntityId}" + Dim oSQL = $"SELECT * FROM VWIDB_BE_ATTRIBUTE WHERE BE_ID = {EntityId} AND LANG_CODE = '{_Environment.User.Language}'" Dim oResult = Await _Client.GetDatatableFromIDBAsync(oSQL) If oResult.OK = False Then From 8f72088a8764c785313834c9f78f7f231875b9eb Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 14 Feb 2022 15:53:42 +0100 Subject: [PATCH 3/3] Common/DocumentResultList: Fix reloading gridcontrol by using delegate in RefreshResults call --- GUIs.Common/My Project/licenses.licx | 7 +- GUIs.Common/frmDocumentResultList.Designer.vb | 8 +- GUIs.Common/frmDocumentResultList.resx | 26 +++---- GUIs.Common/frmDocumentResultList.vb | 74 +++++++++++-------- 4 files changed, 66 insertions(+), 49 deletions(-) diff --git a/GUIs.Common/My Project/licenses.licx b/GUIs.Common/My Project/licenses.licx index 2cf99fc3..4c23d9e3 100644 --- a/GUIs.Common/My Project/licenses.licx +++ b/GUIs.Common/My Project/licenses.licx @@ -1,4 +1,7 @@ -DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ProgressBarControl, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/GUIs.Common/frmDocumentResultList.Designer.vb b/GUIs.Common/frmDocumentResultList.Designer.vb index 2398c636..4d9a79b8 100644 --- a/GUIs.Common/frmDocumentResultList.Designer.vb +++ b/GUIs.Common/frmDocumentResultList.Designer.vb @@ -113,7 +113,7 @@ Partial Class frmDocumentResultList ' Me.SplitContainerControl1.Panel2.Controls.Add(Me.SplitContainerControl2) resources.ApplyResources(Me.SplitContainerControl1.Panel2, "SplitContainerControl1.Panel2") - Me.SplitContainerControl1.SplitterPosition = 382 + Me.SplitContainerControl1.SplitterPosition = 389 ' 'GridControl1 ' @@ -296,12 +296,12 @@ Partial Class frmDocumentResultList Me.MenuItemPropertiesZooFlow.ImageOptions.SvgImage = Global.DigitalData.GUIs.Common.My.Resources.Resources.editcolors Me.MenuItemPropertiesZooFlow.Name = "MenuItemPropertiesZooFlow" ' - 'BarButtonItem1 + 'ButtonRefresh ' - resources.ApplyResources(Me.ButtonRefresh, "BarButtonItem1") + resources.ApplyResources(Me.ButtonRefresh, "ButtonRefresh") Me.ButtonRefresh.Id = 29 Me.ButtonRefresh.ImageOptions.SvgImage = Global.DigitalData.GUIs.Common.My.Resources.Resources.refreshallpivottable - Me.ButtonRefresh.Name = "BarButtonItem1" + Me.ButtonRefresh.Name = "ButtonRefresh" ' 'RibbonPage1 ' diff --git a/GUIs.Common/frmDocumentResultList.resx b/GUIs.Common/frmDocumentResultList.resx index 03bc4f0f..4d9932fc 100644 --- a/GUIs.Common/frmDocumentResultList.resx +++ b/GUIs.Common/frmDocumentResultList.resx @@ -426,7 +426,7 @@ Eigenschaften - + Ergebnisse aktualisieren @@ -455,10 +455,10 @@ 1189, 132 - 0, 647 + 0, 649 - 1189, 24 + 1189, 22 RibbonStatusBar @@ -485,7 +485,7 @@ 2 - 382, 511 + 389, 513 0 @@ -539,7 +539,7 @@ GridBand2 - 370, 223 + 363, 223 0 @@ -587,7 +587,7 @@ GridBand3 - 370, 278 + 363, 280 0 @@ -620,7 +620,7 @@ 1 - 370, 511 + 363, 513 0 @@ -656,7 +656,7 @@ 1 - 762, 511 + 762, 513 2 @@ -704,7 +704,7 @@ 0, 0 - 413, 511 + 413, 513 0 @@ -737,7 +737,7 @@ 1 - 1189, 515 + 1189, 517 5 @@ -978,10 +978,10 @@ DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - BarButtonItem1 + + ButtonRefresh - + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/GUIs.Common/frmDocumentResultList.vb b/GUIs.Common/frmDocumentResultList.vb index d9f588c4..a54c3d05 100644 --- a/GUIs.Common/frmDocumentResultList.vb +++ b/GUIs.Common/frmDocumentResultList.vb @@ -77,7 +77,8 @@ Public Class frmDocumentResultList Public Event NeedsRefresh As EventHandler(Of Integer) Implements IResultForm.NeedsRefresh Public Event ResultsRefreshed As EventHandler(Of List(Of DocumentResultList.DocumentResult)) - Public Delegate Sub SetDatasourceCallback(pDatatable As DataTable) + Private Delegate Sub DatasourceDelegate(View As GridView, Datasource As Object) + Private Delegate Function RefreshResultsDelegate(Results As IEnumerable(Of BaseResult)) As Boolean Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pParams As DocumentResultList.Params) ' Dieser Aufruf ist für den Designer erforderlich. @@ -325,7 +326,7 @@ Public Class frmDocumentResultList If IsNothing(oObjectId) Then MsgBox($"Beim Speichern der Datei '{oDisplayName}' Fehler ist ein Fehler aufgetreten!", MsgBoxStyle.Critical, Text) Else - MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text) + 'MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text) RaiseEvent NeedsRefresh(Me, Params.ProfileGuid) End If End Function @@ -372,23 +373,32 @@ Public Class frmDocumentResultList Public Function RefreshResults(pResults As IEnumerable(Of BaseResult)) As Boolean Implements IResultForm.RefreshResults - _IsLoading = True - Try - UpdateTotalResults() - UpdateGridData() + ' This is needed to update the grid from another form like frmMatch + ' Another form means another thread, so we need a delegate here + If InvokeRequired Then + Dim oDelegate As New RefreshResultsDelegate(AddressOf RefreshResults) + Return GridControl1.Invoke(oDelegate, pResults) + Else + _IsLoading = True + Try + _ResultLists = pResults - Return True - Catch ex As Exception - Logger.Error(ex) + UpdateTotalResults() + UpdateGridData() - MessageBox.Show("Error while loading results:" & vbNewLine & vbNewLine & ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error) - Return False - Finally - _IsLoading = False - End Try + Return True + Catch ex As Exception + Logger.Error(ex) + + MessageBox.Show("Error while refreshing results:" & vbNewLine & vbNewLine & ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Return False + Finally + _IsLoading = False + End Try + End If End Function - Private Sub LoadGridData(Result As DocumentResultList.DocumentResult) + Private Sub LoadGridData(View As GridView, Result As DocumentResultList.DocumentResult) If Result.Datatable.Columns.Contains(COLUMN_DOCID) = False Then Throw New ApplicationException($"Datatable is missing DocId Column [{COLUMN_DOCID}] for search {Result.Title}!") End If @@ -397,22 +407,26 @@ Public Class frmDocumentResultList Throw New ApplicationException($"Datatable is missing Filepath Column [{COLUMN_FILEPATH}] for search {Result.Title}!") End If - ' This is needed to update the grid from another form like frmMatch - ' Another form means another thread, so we need a delegate here - If GridControl1.InvokeRequired Then - Dim oCallback As New SetDatasourceCallback(AddressOf SetGridDataSource) - Invoke(oCallback, Result.Datatable) - - Else - SetGridDataSource(Result.Datatable) - End If + SetGridDataSource(View, Result.Datatable) End Sub - Private Sub SetGridDataSource(pTable As DataTable) - GridControl1.DataSource = Nothing - GridControl1.DataSource = pTable + + Private Sub SetGridDataSource(pView As GridView, pTable As DataTable) + Dim oSavedRowHandle As Integer = pView.FocusedRowHandle + pView.BeginDataUpdate() + + Try + pView.FocusedRowHandle = GridControl.AutoFilterRowHandle + pView.GridControl.DataSource = Nothing + pView.GridControl.DataSource = pTable + pView.FocusedRowHandle = oSavedRowHandle + Finally + pView.EndDataUpdate() + End Try End Sub + + Private Sub UpdateGridData() ' Load Grids For oIndex = 0 To _ResultLists.Count - 1 @@ -420,7 +434,7 @@ Public Class frmDocumentResultList Case 0 Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(0) - LoadGridData(oResult) + LoadGridData(GridView1, oResult) CreateDocumentGrid(GridView1, oResult) RestoreLayout(GridView1) UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count) @@ -428,7 +442,7 @@ Public Class frmDocumentResultList Case 1 Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(1) - LoadGridData(oResult) + LoadGridData(GridView2, oResult) CreateDocumentGrid(GridView2, oResult) RestoreLayout(GridView2) UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count) @@ -436,7 +450,7 @@ Public Class frmDocumentResultList Case 2 Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(2) - LoadGridData(oResult) + LoadGridData(GridView3, oResult) CreateDocumentGrid(GridView3, oResult) RestoreLayout(GridView3) UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)