Загрузка фото

Стоит такая задача. В разделе создается кнопочка Фото, при нажатие на которую загружается карточка редактирования с фото. Имя фото = имя колонки R_ID.jpg. Создала карточку редактирования с компонентой ImageDataControl, подключила нужную таблицу, в разделе создала кнопку. На обработчик прописала:

function ButtonOnClick(Control) {
var EditWindow = Services.GetNewItemByUSI('wnd_AttedanceJobEdit');
EditWindow.Prepare();
EditWindow.Show();

}

function wnd_AttendanceJobEditOnPrepare(Window) {
dlData.Dataset.Open()//TODO
}

Появляется ошибка выполнения метода 'ButtonOnClick'. Object 'DataField ID' is not assigned.

Подскажите как исправить эту ошибку?

И вопрос немного дальше. Подключать фото я собираюсь так же как фото Контакта https://community.terrasoft.ru/developer/faq/1902

как мне правильно сформировать FileName?

Заранее спасибо за помощь

Нравится

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

Я не до конца понимаю вашу задачу, у вас есть датасет раздела в котором есть колонка с BLOB полем в нем уже загружены фотографии, по кнопке в разделе вы хотите отображать данное фото в карточке редактирования этого же раздела?
По поводу ошибки, проверьте, пожалуйста значение полей DataFieldName и DatasetLink в ImageDataControl
Также просьба ознакомится с инструкцией Добавление фото в карточку продукта.doc

Большое спасибо за инструкцию!

проверила ImageDataControl, даже удалила его, ошибка все равно остается

задача следующая. В папку будет сохранятся фото (их будет много) с определенным именем. Это имя соответствует полю R_ID из моей табл. При нажатии кнопки нужно подгрузить и посмотреть это фото.
Т.е. В разделе идет перечень контактов с определенными данными, пользователь выбирает контакт, нажимает кнопку и просматривает соответствующее фото.

Предлагаю вам еще один вариант реализации. Почему бы не хранить фото в БД в BLOB поле, зачем подгружать фото с физического пути который может поменяться ?

Дело в том что фото надо подгружать не в ручную. При появлении новой записи в таблице, появляется новая фото в определенной папке и это фото мне надо предоставить в террасофте.
Каждый день будет появляться около 100 новых фотографий. Мне кажется что лучше подгружать в систему по 1 фото в случае необходимости, а не все сразу. Или есть более приемлемый вариант?

Если есть поле уникально соответствия, по которому можно связать фото с контактом в Terrasoft, к примеру поле ФИО то возможно разумнее создать job в SQL Server который бы каждый день подгружал фото людей по условию и вставлял их в соответствующую колонку.

В таком случае придется сделать обновление каждые 10-15 мин. Каждый день поступает 100-120 фото, не будет ли система тормозить из-за такого?
к тому же из этих 100 фото просмотренных ,я уверена, будет 2-3, поэтому мне кажется, проще подгружать фото для тех записей, которые хочет увидеть пользователь.

Фотографии пользователей находятся на диске до внесения их в TS ? Если да, то можно создать триггер и на событие insert проверять есть ли фотография в папке, и если есть вставлять ее в поле Photo таблицы tbl_Contact

фото появляется после новой записи в этой таблице (на стороне firebird)
http://www.community.terrasoft.ru/forum/topic/6843
тогда получится что триггер будет срабатывать на каждое выполнение job

Триггер будет срабатывать на каждую запись в таблицу, т.е если в job вы сделали insert на 100 записей, триггер отработает 100 раз

Примерно триггер должен выглядеть следующим образом

CREATE TRIGGER tr_tbl_Contact_photo
   ON  tbl_Contact
   AFTER INSERT
AS 
BEGIN
 
	DECLARE @SQL VARCHAR(2500)
 
 
	SET NOCOUNT ON;
	DECLARE @Cname VARCHAR(250);
	DECLARE @CID VARCHAR(250);
 
	SELECT @Cname = Name FROM inserted;
 
	set @Cname = 'C:\'+@Cname+'.jpg';
 
 
 
    SELECT @CID = Name FROM inserted; --Name
 
set @SQL = '
update tbl_contact 
set Photo =(  
select BulkColumn 
from    
Openrowset (Bulk '''+@Cname+''', Single_Blob) as ContactPhoto
) 
where tbl_contact.Name = '''+@CID+'''
 '
 
EXECUTE (@SQL);
 
set @Cname='';
END
GO

но тут следует доработать проверку на наличие файла с фотографией, имя фотографии должно точно совпадать. Также в перспективе необходимо сделать более лучшую проверку на условие where (переписать с условием по ID)

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