Колонка типа файл и поле загрузки файла...

Сделал колонку типа файл в объекте, на странице редактирования переношу её на страницу, получаю поле MemoEdit........:confused:

Это сейчас мода такая и я просто не в тренде?

Добавляю поле загрузки файла на странице.....не понимаю куда грузится файл? Точнее куда, понимаю, в таблицу File, но где после этого связь между записью и файлом?

В общем, я в потерях.....

Сразу скажу: ДЕТАЛЬ ФАЙЛЫ НЕ ПРЕДЛАГАТЬ!

Нравится

9 комментариев

Добрый день.

Связи в таблицах развязки, которые именуются как "имятаблицыFile".

Это я уже тоже понял, а как мне положить файл в колонку типа файл, а не в отдельную таблицу рядом. И как кстати эти таблицы появляются или их самому создавать?

Здравствуйте, Александр!

Инструкция по созданию поля загрузки файла на примере карточки контакта в приложении.

Таблицы с файлами создаются разработчиками в зависимости от требований к структуре БД.

В разных отраслевых решениях BPMonline используются разные подходы к хранению изображений. К примеру, в решении для компаний, работающих с недвижимостью используется деталь Файлы, и в дополнительной детали Фото объекта отображается та из загруженных фотографий, у которой установлен признак Основная.

Тогда как в отраслевом решении для банков фотография сотрудника хранится прямо в объекте Contact, и загружается при помощи контрола в карточке.

Спасибо

Два вопроса:
1. У меня не картинка, а просто файл, причем неизвестно какого формата, то есть, как я понял в этой строчке

entity.SetStreamValue("Photo", new MemoryStream(Page.PhotoFileUploadEdit.FileBytes));

вместо Photo использовать название моей колонки типа Файл?

2. Опять же с учетом того, что у меня не картинка как мне потом показать загруженный файл, чтобы пользователь мог его скачать/посмотреть а при случае и удалить, другой закачать.

И, кстати, про метод FetchFromDB класса Entity можно поподробнее.... :wink:

"Шамуилов Александр" написал:1. У меня не картинка, а просто файл, причем неизвестно какого формата, то есть, как я понял в этой строчке
entity.SetStreamValue("Photo", new MemoryStream(Page.PhotoFileUploadEdit.FileBytes));

вместо Photo использовать название моей колонки типа Файл?

Александр, тип колонки в объекте как раз бинарный файл. То есть, такая загрузка файла тоже сработает.

2. Опять же с учетом того, что у меня не картинка как мне потом показать загруженный файл, чтобы пользователь мог его скачать/посмотреть а при случае и удалить, другой закачать.

Как вариант можно использовать такую же загрузку файла, как в базовой странице загрузки файла, которая связана с деталью:

if (Page.FileUploadEdit.HasFile) {
	Page.NameTextEdit.Value = Page.FileUploadEdit.FileName;
	Page.FileUploadEdit.FileContent.Position = 0;
	FileSize = (int)Page.FileUploadEdit.FileContent.Length;
	string encodedData = Convert.ToBase64String(Page.FileUploadEdit.FileBytes);
	FileContent = encodedData;
}
if (!IsNew && !IsCopy) {
	Page.DataSource.ActiveRow.Save();
}

Открыть файл можно так:

var selectedNodes = Page.TreeGrid.SelectedNodes;
if (selectedNodes.Count < 1) {
	return true;
}
Page.DataSource.LoadRow(new Guid(selectedNodes[0].Values["Id"].ToString()));
if (Page.DataSource.Rows.Count < 1) {
	return true;
}
var currentRow = Page.DataSource.Rows[0];
var data = currentRow.GetColumnValue("Data") as byte[];
var Response = Page.Response;
String fileName = (String)currentRow.GetColumnValue("Name");
 
TSConfiguration.PageResponse.Write(Response, data, fileName, TSConfiguration.ContentType.StreamType);

"Шамуилов Александр" написал:И, кстати, про метод FetchFromDB класса Entity можно поподробнее....

Метод FetchFromDB подтягивает в текущий объект необходимые колонки. В данном случае это все колонки, которые для него определены вне зависимости от того, какие активны в датасорсе. В данном конкретном случае он позволяет принудительно подтянуть колонку с файлом. В данном контексте используется для проверки наличия записи в бд. Вообще же рекомендации по использованию метода следующие:

Не используйте метод FetchFromDB(object keyValue), если нужны значения только определенных колонок, скажем, значение поля "Code" справочника, так как будут получены значения всех колонок.

Используйте метод FetchFromDB(string conditionColumnName, object conditionValue), где conditionColumnName будет содержать имя колонки "Code". Будет загружено значение только колонки "Code".

Вот здесь поподробнее можно про FileSize и FileContent? Это колонки? Если колонки то где?

if (Page.FileUploadEdit.HasFile) {
        Page.NameTextEdit.Value = Page.FileUploadEdit.FileName;
        Page.FileUploadEdit.FileContent.Position = 0;
        FileSize = (int)Page.FileUploadEdit.FileContent.Length;
        string encodedData = Convert.ToBase64String(Page.FileUploadEdit.FileBytes);
        FileContent = encodedData;
}
if (!IsNew && !IsCopy) {
        Page.DataSource.ActiveRow.Save();
}

Насколько я посмотрел в процессе базовой страницы редактирования файла -- это параметры процесса, но вот откуда они берутся и куда потом уходят?
Или мне просто использовать в моем случает колонку двоичных данных?
И в чем разница между колонками типа Файл и типа Двоичные данные?
Для конкретно моего случая это имеет значение?

Здравствуйте, Александр.

Это свойства контрола загрузки файла.
В Page.FileUploadEdit.FileContent хранится сам файл в бинарном виде.

Page.FileUploadEdit.FileContent.Position = 0;

перемещает нас в начало файла.

На уровне БД Файл и Двоичные данные ничем не отличаются, и то и то BLOB. А вот в приложении они отличаются набором свойств и методов (разные классы). В частности, в типе Файл есть свойство FileContent.

Александр, может я не правильно понимаю, но Вы хотите отобразить содержимое этого файла (типа вьювера)? Если ДА, то ничего не получится, нужны сторонние плагины для просмотра содержимого в браузере. А если Вы просто хотите отобразить пользователю информацию, о том что есть такой мол файл, Чего желаете (удалить, скачать, изменить и т.д.), то Вам придется хранить в объекте все колонки (аля <имя файла>, <содержимое>, <размер> и т.п.).

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