diff --git a/src/VirtoCommerce.ExportModule.Core/Services/IDataExporter.cs b/src/VirtoCommerce.ExportModule.Core/Services/IDataExporter.cs index b1718fa..da953ef 100644 --- a/src/VirtoCommerce.ExportModule.Core/Services/IDataExporter.cs +++ b/src/VirtoCommerce.ExportModule.Core/Services/IDataExporter.cs @@ -1,15 +1,16 @@ -using System; -using System.IO; -using VirtoCommerce.ExportModule.Core.Model; -using VirtoCommerce.Platform.Core.Common; - -namespace VirtoCommerce.ExportModule.Core.Services -{ - /// - /// Interface for data exporter implementation. - /// - public interface IDataExporter - { - void Export(Stream stream, ExportDataRequest request, Action progressCallback, ICancellationToken token); - } -} +using System; +using System.Threading; +using System.IO; +using VirtoCommerce.ExportModule.Core.Model; +using VirtoCommerce.Platform.Core.Common; + +namespace VirtoCommerce.ExportModule.Core.Services +{ + /// + /// Interface for data exporter implementation. + /// + public interface IDataExporter + { + void Export(Stream stream, ExportDataRequest request, Action progressCallback, CancellationToken token); + } +} diff --git a/src/VirtoCommerce.ExportModule.Core/VirtoCommerce.ExportModule.Core.csproj b/src/VirtoCommerce.ExportModule.Core/VirtoCommerce.ExportModule.Core.csproj index 7b263d5..0bfdc97 100644 --- a/src/VirtoCommerce.ExportModule.Core/VirtoCommerce.ExportModule.Core.csproj +++ b/src/VirtoCommerce.ExportModule.Core/VirtoCommerce.ExportModule.Core.csproj @@ -14,6 +14,6 @@ - + \ No newline at end of file diff --git a/src/VirtoCommerce.ExportModule.Data/Services/DataExporter.cs b/src/VirtoCommerce.ExportModule.Data/Services/DataExporter.cs index f7f5f58..19df0bd 100644 --- a/src/VirtoCommerce.ExportModule.Data/Services/DataExporter.cs +++ b/src/VirtoCommerce.ExportModule.Data/Services/DataExporter.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Collections.Generic; using System.IO; using System.Text; @@ -20,7 +21,7 @@ public DataExporter(IKnownExportTypesResolver exportTypesResolver, IExportProvid _exportProviderFactory = exportProviderFactory; } - public void Export(Stream stream, ExportDataRequest request, Action progressCallback, ICancellationToken token) + public void Export(Stream stream, ExportDataRequest request, Action progressCallback, CancellationToken token) { if (request == null) { @@ -65,27 +66,7 @@ public void Export(Stream stream, ExportDataRequest request, Action enumerable) - { - foreach (var exportable in enumerable) - { - WriteRecord(exportProvider, writer, request, exportable, needTabularData); - } - } - else - { - WriteRecord(exportProvider, writer, request, preparedObject, needTabularData); - } - } - catch (Exception e) - { - exportProgress.Errors.Add(e.Message); - progressCallback(exportProgress); - } + ExportObject(exportProvider, writer, request, obj, needTabularData, exportProgress, progressCallback); exportedCount++; } @@ -115,6 +96,31 @@ public void Export(Stream stream, ExportDataRequest request, Action progressCallback) + { + try + { + var preparedObject = obj.CloneTyped(); + + if (preparedObject is IEnumerable enumerable) + { + foreach (var exportable in enumerable) + { + WriteRecord(exportProvider, writer, request, exportable, needTabularData); + } + } + else + { + WriteRecord(exportProvider, writer, request, preparedObject, needTabularData); + } + } + catch (Exception e) + { + exportProgress.Errors.Add(e.Message); + progressCallback(exportProgress); + } + } + private static void WriteRecord(IExportProvider exportProvider, TextWriter writer, ExportDataRequest request, IExportable exportable, bool needTabularData) { if (needTabularData) diff --git a/src/VirtoCommerce.ExportModule.Data/VirtoCommerce.ExportModule.Data.csproj b/src/VirtoCommerce.ExportModule.Data/VirtoCommerce.ExportModule.Data.csproj index 346ea8b..4782d6d 100644 --- a/src/VirtoCommerce.ExportModule.Data/VirtoCommerce.ExportModule.Data.csproj +++ b/src/VirtoCommerce.ExportModule.Data/VirtoCommerce.ExportModule.Data.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/src/VirtoCommerce.ExportModule.Web/BackgroundJobs/ExportJob.cs b/src/VirtoCommerce.ExportModule.Web/BackgroundJobs/ExportJob.cs index 4878f3a..990e61a 100644 --- a/src/VirtoCommerce.ExportModule.Web/BackgroundJobs/ExportJob.cs +++ b/src/VirtoCommerce.ExportModule.Web/BackgroundJobs/ExportJob.cs @@ -48,7 +48,7 @@ void ProgressCallback(ExportProgressInfo x) await using (var stream = await _exportFileStorage.OpenWriteAsync(fileName)) { - _dataExporter.Export(stream, request, ProgressCallback, new JobCancellationTokenWrapper(cancellationToken)); + _dataExporter.Export(stream, request, ProgressCallback, cancellationToken.ShutdownToken); } notification.DownloadUrl = $"/api/export/download/{fileName}"; diff --git a/src/VirtoCommerce.ExportModule.Web/Controllers/Api/ExportController.cs b/src/VirtoCommerce.ExportModule.Web/Controllers/Api/ExportController.cs index b1e5fda..2435209 100644 --- a/src/VirtoCommerce.ExportModule.Web/Controllers/Api/ExportController.cs +++ b/src/VirtoCommerce.ExportModule.Web/Controllers/Api/ExportController.cs @@ -158,7 +158,11 @@ public ActionResult CancelExport([FromBody] ExportCancellationRequest cancellati /// [HttpGet] [Route("download/{fileName}")] + // VC0015: PlatformExport permission was moved to the BackupRestore module but the platform keeps + // the constant for backward compatibility; keep using it here to avoid an Export->BackupRestore dependency. +#pragma warning disable VC0015 [AuthorizeAny(PlatformConstants.Security.Permissions.PlatformExport, ModuleConstants.Security.Permissions.Download)] +#pragma warning restore VC0015 public async Task DownloadExportFile([FromRoute] string fileName) { var contentType = MimeTypeResolver.ResolveContentType(fileName); diff --git a/src/VirtoCommerce.ExportModule.Web/VirtoCommerce.ExportModule.Web.csproj b/src/VirtoCommerce.ExportModule.Web/VirtoCommerce.ExportModule.Web.csproj index 010252e..b6e0b26 100644 --- a/src/VirtoCommerce.ExportModule.Web/VirtoCommerce.ExportModule.Web.csproj +++ b/src/VirtoCommerce.ExportModule.Web/VirtoCommerce.ExportModule.Web.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/src/VirtoCommerce.ExportModule.Web/module.manifest b/src/VirtoCommerce.ExportModule.Web/module.manifest index 4482255..e141cb9 100644 --- a/src/VirtoCommerce.ExportModule.Web/module.manifest +++ b/src/VirtoCommerce.ExportModule.Web/module.manifest @@ -4,9 +4,9 @@ 3.1003.0 - 3.1002.0 + 3.1039.0 - + Generic Export