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