diff --git a/src/Altinn.App.Api/Altinn.App.Api.csproj b/src/Altinn.App.Api/Altinn.App.Api.csproj index d84e5958a..3747cf0d7 100644 --- a/src/Altinn.App.Api/Altinn.App.Api.csproj +++ b/src/Altinn.App.Api/Altinn.App.Api.csproj @@ -3,7 +3,7 @@ net5.0 Library - 5.3.0-alpha.2 + 5.3.0-alpha.4 5.3.0.0 Altinn.App.Api Altinn;Studio;App;Api;Controllers diff --git a/src/Altinn.App.Common/Altinn.App.Common.csproj b/src/Altinn.App.Common/Altinn.App.Common.csproj index ff0fd34eb..c64ec5e9a 100644 --- a/src/Altinn.App.Common/Altinn.App.Common.csproj +++ b/src/Altinn.App.Common/Altinn.App.Common.csproj @@ -3,7 +3,7 @@ net5.0 Library - 5.3.0-alpha.2 + 5.3.0-alpha.4 5.3.0.0 Altinn.App.Common Altinn;Studio;App;Common diff --git a/src/Altinn.App.PlatformServices/Altinn.App.PlatformServices.csproj b/src/Altinn.App.PlatformServices/Altinn.App.PlatformServices.csproj index de578233e..f77c59fb1 100644 --- a/src/Altinn.App.PlatformServices/Altinn.App.PlatformServices.csproj +++ b/src/Altinn.App.PlatformServices/Altinn.App.PlatformServices.csproj @@ -3,7 +3,7 @@ net5.0 Library - 5.3.0-alpha.2 + 5.3.0-alpha.4 5.3.0.0 Altinn.App.PlatformServices Altinn;Studio;App;Services;Platform diff --git a/src/Altinn.App.PlatformServices/Implementation/AppBase.cs b/src/Altinn.App.PlatformServices/Implementation/AppBase.cs index e1a7537ab..16710db0e 100644 --- a/src/Altinn.App.PlatformServices/Implementation/AppBase.cs +++ b/src/Altinn.App.PlatformServices/Implementation/AppBase.cs @@ -151,7 +151,8 @@ public async Task OnStartProcess(string startEvent, Instance instance) /// public async Task OnEndProcess(string endEvent, Instance instance) { - await Task.CompletedTask; + await AutoDeleteDataElements(instance); + _logger.LogInformation($"OnEndProcess for {instance.Id}, endEvent: {endEvent}"); } @@ -245,7 +246,6 @@ public async Task OnEndProcessTask(string taskId, Instance instance) foreach (DataType dataType in dataTypesToLock) { bool generatePdf = dataType.AppLogic?.ClassRef != null && dataType.EnablePdfCreation; - bool autoDeleteDataElement = dataType.AppLogic?.AutoDeleteOnProcessEnd == true && !_appMetadata.AutoDeleteOnProcessEnd; foreach (DataElement dataElement in instance.Data.FindAll(de => de.DataType == dataType.Id)) { @@ -263,17 +263,6 @@ public async Task OnEndProcessTask(string taskId, Instance instance) { await updateData; } - - if (autoDeleteDataElement) - { - await _dataClient.DeleteData( - _org, - _app, - int.Parse(instance.InstanceOwner.PartyId), - instanceGuid, - Guid.Parse(dataElement.Id), - true); - } } } @@ -513,5 +502,32 @@ private async Task SendEFormidlingShipment(Instance instance) throw; } } + + private async Task AutoDeleteDataElements(Instance instance) + { + List typesToDelete = _appMetadata.DataTypes.Where(dt => dt?.AppLogic?.AutoDeleteOnProcessEnd == true).Select(dt => dt.Id).ToList(); + if (typesToDelete.Count == 0) + { + return; + } + + instance = await _instanceClient.GetInstance(instance); + List elementsToDelete = instance.Data.Where(e => typesToDelete.Contains(e.DataType)).ToList(); + + List deleteTasks = new(); + foreach (DataElement item in elementsToDelete) + { + deleteTasks.Add( + _dataClient.DeleteData( + _org, + _app, + int.Parse(instance.InstanceOwner.PartyId), + Guid.Parse(item.InstanceGuid), + Guid.Parse(item.Id), + true)); + } + + await Task.WhenAll(deleteTasks); + } } }