Добрый день коллеги.

В общем размер файлов по непонятным мне причинам ограничен.

Методы  GetStreamValue GetColumnValue возвращают файл не больше 512 kb.

Каким образом можно сделать чтобы возвращался весь файл, а не 512 kb сначала файла ?

 

Мне нужен весь файл так как я его собираюсь отправлять в файловое хранилище !

string iin1;	
iin1=Get<string>("iin");
int nomer1;		
nomer1=Get<int>("nomer");
Guid fileid1;	
fileid1=Get<Guid>("fileid");
 
string filename;
filename = "/public/Письма БПМ/";
filename = filename + iin1 +"/" + nomer1.ToString() +"/";
 
 
 
var userConnection = Get<UserConnection>("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
esqResult.AddColumn("Name");
esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
 
//var data = entity.GetColumnValue("Data") as byte[]; послу получения размер массива 512288
//MemoryStream stream = new MemoryStream(data);
 
 
// Тут тоже 512288
MemoryStream stream = entity.GetStreamValue("Data");
 
fileexported = SftpService.SftpService.UploadFile(stream, filename);

 

Нравится

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

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла 

Загрузка файла выполняется асинхроно. БП сигнализирует о том что добавлена записьв таблицу, а не о том что процесс заливки файла завершен. 

var data = entity.GetBytesValue("Data");

MemoryStream stream = new MemoryStream(data);

GetBytesValue тоже возвращает 512 кб

Судя по тому, что раздел самодельный, дело может быть в неверных свойствах поля «Data» в его объекте. Попробуйте проверить такую же логику для другого раздела.

Если и с ним то же самое, то нужно смотреть, как в этих случаях работает стандартный сервис скачивания /0/rest/FileService/GetFile/ и в чём отличие от Вашей логики.

 

А если попробовать так....

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
esqResult.AddColumn("Name");
var colData = esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
using (MemoryStream stream = entity.GetStreamValue(colData.Name)){
if (stream != null) {
                                               stream.Position = 0;
//UploadFile....
stream.Flush();
                               }
}

И какой тип данных в конфигураторе установлен для колонки Data ????

 

объект наследуется от базового !

Нет Григорий Ваш код не помог до сих пор 512 кб. Видимо придется эскалировать на службу поддержки !

string iin1;    
iin1=Get&lt;string&gt;("iin");
int nomer1;        
nomer1=Get&lt;int&gt;("nomer");
Guid fileid1;    
fileid1=Get&lt;Guid&gt;("fileid");
 
string filename;
filename = "/public/Письма БПМ/";
filename = filename + iin1 +"/" + nomer1.ToString() +"/";
 
var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SubsidiesFile");
 
 
esqResult.AddColumn("Name");
var colData = esqResult.AddColumn("Data");
 
var entity = esqResult.GetEntity(userConnection, fileid1);
 
 
string[] lines = { fileid1.ToString(),filename };
System.IO.File.WriteAllLines(@"C:\Users\Public\TestFolder\WriteLines.txt", lines);
 
string name1 = entity.GetTypedColumnValue&lt;string&gt;("Name");
filename = filename + name1;
 
bool fileexported=false;
 
using (MemoryStream stream = entity.GetStreamValue(colData.Name)){
    if (stream != null) {
        stream.Position = 0;
        fileexported = SftpService.SftpService.UploadFile(stream, filename);
        string[] lines2 = { filename ,name1 , stream.Length.ToString() };
        System.IO.File.WriteAllLines(@"C:\Users\Public\TestFolder\WriteLines2.txt", lines2);
        stream.Flush();
        }
}
 
Set("fileexported", fileexported);
Set("path", filename);
Set("filename", name1);
 
return true;

 

Проверьте на файлах других разделов, есть ли ограничение там.

Добрый день коллеги.

В общем ситуация такая. Нетривиальная.

Там есть событие на добавление записи.

При добавление файла, файл отправляется на сервер по 512 кб.

Когда срабатывает событие, загружены только первые 512 кб.

Событие на изменение записи не работает!

В итоге для того чтобы отправить файл в файловое хранилище нужно ждать 10-15 сек, в зависимости как быстро закачается весь файл в Bpmonline! 

 

Напрашивается вопрос Террасофту, почему нельзя генерировать событие на добавление файла, когда весь файл записан, а не только первые его 512 кб??

В стандартном объекте «Файл» есть обработчики событий «Saving» и «Saved». В первом вычисляется версия и размер (и на тот момент его считает верно), второй пустой. Может, завязаться на второе и привязать туда запуск нужного БП. Или сразу на первое и обрабатывать данные файла ещё до его сохранения в базу.

Еще как вариант можно в FileDetail

перезгрузить событие и отсюда вызывать бизнес процесс параметрами 

onFileComplete: function(error, xhr, file, options) {

                if (!error) {

                    this.loadGridDataRecord(options.data.fileId);

                } else {

                    this.onFileCompleteError(error, file);

                }

                alert("Hie_dias");

                console.log(options);

            },

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла  ?

Может, на момент срабатывания события вся логика на стороне системы уже отработала и по 512 КБ асинхронно грузит сама база? Интересно, если смотреть в SQL-профайлере, завершился ли в тот момент Insert/Update-запрос?

возможно, но дальше разбираться нет желания...

Но все равно остается вопрос почему БП неправильно сигнализирует добавление файла 

Загрузка файла выполняется асинхроно. БП сигнализирует о том что добавлена записьв таблицу, а не о том что процесс заливки файла завершен. 

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