Вопрос

Экспорт Excel файл из view в бизнес-процессе

Здравствуйте, коллеги. Появился вопрос как из БП запустить экспорт Excel файла (нужно каждую неделю отправлять этот файл на email). Пробовал записывать файл с помощью GetExcelData из ExcelConverter. Но выходила ошибка с FETCH запросом - количество строк должно быть больше нуля. Подскажите пожалуйста как это лучше реализовать.

Нравится

3 комментария
Лучший ответ

Удалось решить проставлением значения batchsize:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "VwDoorTT");
esq.AddColumn("Id");
var collection = esq.GetEntityCollection(UserConnection);
int count = collection.Count;
 
var excelConverter = new ExcelConverter();
excelConverter.BatchSize = count;
var data = excelConverter.GetExcelData(exportEsq, UserConnection);
Set<byte[]>("ExcelFile", data);

 

Добрый день.

Прошу предоставить полный текст ошибки.

Mykhailo Storozhuk,

Добрый.

Terrasoft.Configuration.ExportToExcel.ExportToExcelException: Exception during export to excel. Inner exception Количество строк, указываемое в предложении FETCH, должно быть больше нуля. ---> System.Data.SqlClient.SqlException: Количество строк, указываемое в предложении FETCH, должно быть больше нуля.
   в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   в System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   в System.Data.SqlClient.SqlDataReader.get_MetaData()
   в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
   в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   в System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   в Polly.Policy.<>c__DisplayClass119_0`1.<Execute>b__0(Context ctx, CancellationToken ct)
   в Polly.Policy.<>c__DisplayClass129_0`1.<ExecuteInternal>b__0(Context ctx, CancellationToken ct)
   в Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct)
   в Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   в Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)
   в Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   в Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   в Polly.Policy.Execute[TResult](Func`1 action)
   в Terrasoft.DB.MSSql.MSSqlExecutor.FailoverExecute[TResult](DbCommand command, Func`1 func)
   в Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func)
   в Terrasoft.Core.DB.DBExecutor.<ExecuteCommandAsync>d__88`1.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)
   в Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken)
   в Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText)
   в Terrasoft.Core.DB.Select.<ExecuteReaderAsync>d__54.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.DB.Select.ExecuteReader(DBExecutor dbExecutor)
   в Terrasoft.Core.Entities.EntitySchemaQuery.<GetNativeDataReaderAsync>d__299.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetNativeDataReader(UserConnection userConnection, Select selectQuery)
   в Terrasoft.Core.Entities.EntitySchemaQuery.<GetDataReaderAsync>d__302.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetDataReader(UserConnection userConnection, Select selectQuery)
   в Terrasoft.Core.Entities.EntitySchemaQuery.<ExecuteReaderAsync>d__290.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.Entities.EntitySchemaQuery.ExecuteReader(UserConnection userConnection, EntitySchemaQueryOptions options)
   в Terrasoft.Core.Entities.EntitySchemaQuery.<GetEntityCollectionAsync>d__342.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection, EntitySchemaQueryOptions options)
   в Terrasoft.Configuration.ExportToExcel.ExcelConverter.SaveData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
   в Terrasoft.Configuration.ExportToExcel.ExcelConverter.GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
   --- Конец трассировки внутреннего стека исключений ---
   в Terrasoft.Configuration.ExportToExcel.ExcelConverter.GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
   в Terrasoft.Core.Process.Report_TestMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Удалось решить проставлением значения batchsize:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "VwDoorTT");
esq.AddColumn("Id");
var collection = esq.GetEntityCollection(UserConnection);
int count = collection.Count;
 
var excelConverter = new ExcelConverter();
excelConverter.BatchSize = count;
var data = excelConverter.GetExcelData(exportEsq, UserConnection);
Set&lt;byte[]&gt;("ExcelFile", data);

 

Показать все комментарии