Использую вот такой вот скрипт, где FileID - id нашего файла
var esqResult = new EntitySchemaQuery(esqManager, "File");
esqResult.AddAllSchemaColumns();
esqResult.AddColumn("Data");
Entity currentFile = esqResult.GetEntity(UserConnection, FileID);
//файл должен появиться
while (currentFile == null) {
currentFile = esqResult.GetEntity(UserConnection, FileID);
}
var currentFileName = currentFile.GetTypedColumnValuestring>("Name");
var currentFileData = currentFile.GetBytesValue("Data");
var Response = Page.Response;
Response.AddHeader("Content-Disposition", "attachment; filename=\""" + System.Web.HttpUtility.UrlPathEncode(currentFileName) + ""\"""");
Нравится
Здравствуйте, Александр!
Думаю, стоит воспользоваться готовым решением из процесса "Скачать шаблон для импорта контрагентов", например:
[csharp]
public virtual bool DownloadTemplateScriptExecute(ProcessExecutingContext context) {
var entitySchemaManager = UserConnection.EntitySchemaManager;
var entitySchema = entitySchemaManager.GetInstanceByName("File");
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, entitySchema.Name);
var dataColumn = entitySchemaQuery.AddColumn("Data");
entitySchemaQuery.Filters.Add(
entitySchemaQuery.CreateFilterWithParameters(
FilterComparisonType.Equal, "[KnowledgeBaseFile:FileId].KnowledgeBase", new object[] {new Guid("edb71f06-f46b-1410-e980-20cf30b39373")}));
entitySchemaQuery.Filters.Add(
entitySchemaQuery.CreateFilterWithParameters(
FilterComparisonType.Equal, "Name", new object[] {FileName.ToString()}));
var entityCollection = entitySchemaQuery.GetEntityCollection(UserConnection);
if (entityCollection.Count > 0) {
var data = entityCollection[0].GetBytesValue(dataColumn.Name) as byte[];
var response = HttpContext.Current.Response;
TSConfiguration.PageResponse.Write(response, data, FileName, TSConfiguration.ContentType.XmlType);
}
return true;
}
[/csharp]
К сожалению у меня TSConfiguration не знает методов PageResponse и ContentType, и в процессе "Скачать шаблон ..." вместо TSConfiguration стоит скрипт
[csharp]
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + System.Web.HttpUtility.UrlPathEncode(FileName) + ""\"""");
Александр, какая у Вас версия ядра?
Попробую воспроизвести.
По поводу загрузки данных попробуйте перед вызовом LoadRows() установить
[csharp]
Page.DataSource.PageRowsCount = -1; //или заведомо вольшое числ
[/csharp]