From c58ef9469818ca802163cd4140ca617ee7989e5a Mon Sep 17 00:00:00 2001 From: kapustb Date: Thu, 19 Oct 2023 15:12:33 +0200 Subject: [PATCH] TreeNode under Worklfow update fix --- src/AlgoliaSearchModule.cs | 19 +++++++++-------- src/Services/IAlgoliaTaskLogger.cs | 1 + .../DefaultAlgoliaTaskLogger.cs | 21 +++++++++++++++++++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/AlgoliaSearchModule.cs b/src/AlgoliaSearchModule.cs index 36ffbf1..c4f6726 100644 --- a/src/AlgoliaSearchModule.cs +++ b/src/AlgoliaSearchModule.cs @@ -7,7 +7,7 @@ using CMS.DataEngine; using CMS.DocumentEngine; using CMS.Helpers; - +using DocumentFormat.OpenXml.Wordprocessing; using Kentico.Xperience.Algolia.Extensions; using Kentico.Xperience.Algolia.Services; @@ -60,7 +60,8 @@ protected override void OnInit() DocumentEvents.Delete.Before += HandleDocumentEvent; DocumentEvents.Update.Before += HandleDocumentEvent; - DocumentEvents.Update.Before += ForceMoveUpdate; + DocumentEvents.Update.After += ForceMoveUpdate; + DocumentEvents.Delete.After += ForceMoveUpdate; DocumentEvents.Insert.After += HandleDocumentEvent; WorkflowEvents.Publish.After += HandleWorkflowEvent; WorkflowEvents.Archive.After += HandleWorkflowEvent; @@ -108,15 +109,15 @@ private void HandleDocumentEvent(object sender, DocumentEventArgs e) private void ForceMoveUpdate(object sender, DocumentEventArgs e) { - var columns = e.Node.ChangedColumns(); - if (columns.Any(col => col.Equals(nameof(TreeNode.NodeParentID), System.StringComparison.OrdinalIgnoreCase))) + if (!EventShouldContinue(e.Node)) { - algoliaTaskLogger.HandleEvent(e.Node, WorkflowEvents.Publish.Name); + return; + } - foreach (var child in e.Node.AllChildren) - { - algoliaTaskLogger.HandleEvent(child, WorkflowEvents.Publish.Name); - } + var columns = e.Node.ChangedColumns(); + if (columns.Any(x => x.Equals(nameof(TreeNode.NodeParentID), System.StringComparison.OrdinalIgnoreCase))) + { + algoliaTaskLogger.HandleEventAfter(e.Node, e.CurrentHandler.Name); } } } diff --git a/src/Services/IAlgoliaTaskLogger.cs b/src/Services/IAlgoliaTaskLogger.cs index 3be8d35..2847993 100644 --- a/src/Services/IAlgoliaTaskLogger.cs +++ b/src/Services/IAlgoliaTaskLogger.cs @@ -17,5 +17,6 @@ public interface IAlgoliaTaskLogger /// The that triggered the event. /// The name of the Xperience event that was triggered. void HandleEvent(TreeNode node, string eventName); + void HandleEventAfter(TreeNode node, string eventName); } } diff --git a/src/Services/Implementations/DefaultAlgoliaTaskLogger.cs b/src/Services/Implementations/DefaultAlgoliaTaskLogger.cs index b453b9e..be03c39 100644 --- a/src/Services/Implementations/DefaultAlgoliaTaskLogger.cs +++ b/src/Services/Implementations/DefaultAlgoliaTaskLogger.cs @@ -51,6 +51,27 @@ public void HandleEvent(TreeNode node, string eventName) } } + public void HandleEventAfter(TreeNode node, string eventName) + { + foreach (var indexName in IndexStore.Instance.GetAll().Select(index => index.IndexName)) + { + if (!node.IsIndexedByIndex(indexName)) + { + continue; + } + + try + { + var queueItem = new AlgoliaQueueItem(node, GetTaskType(node, eventName), indexName, node.ChangedColumns()); + AlgoliaQueueWorker.Current.EnqueueAlgoliaQueueItem(queueItem); + } + catch (InvalidOperationException ex) + { + eventLogService.LogException(nameof(DefaultAlgoliaTaskLogger), nameof(HandleEvent), ex); + } + } + } + private AlgoliaTaskType GetTaskType(TreeNode node, string eventName) { if (eventName.Equals(DocumentEvents.Insert.Name, StringComparison.OrdinalIgnoreCase) ||