Сохранение файлов в БД

Здравствуйте!
3.4.0.117
Интересуют наиболее эффективные способы сохранения файлов любого типа (файл, ссылка, url, ссылка на папку).

Нравится

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

С использованием функционала детали "Файлы". Очень эффективно :smile:

Меня интересует как это сделать без GUI (из скрипта).

То есть необходимо прикрепить добавить файл в таблицу файлов. К какой записи какого раздела она должна быть привязана?
Файл из локальной директории?

Совершенно верно! Нужно добавить файл в таблицу tbl_Files, а затем создать связь между файлом и записью из раздела Документы , используя развязанную таблицу tbl_FileInDocument

Добрый день!
Решил вопрос следующим образом:
Добавил в GridArea кнопку, по нажатию на которую выполняется функция AttachOnClick. Сам код ниже:

var RecordID;
 
function AttachOnClick(Control) {
 
RecordID = dlData.Dataset.Values('ID');
var Dataset = Services.GetSingleItemByUSI('ds_Files');
var ObjectType = '{39A5B367-4A7A-473E-8F74-26977CB6DB67}';
var AddedFileIDsArray = new Array();
var FileNameStr = "C:\\Documents and Settings\\I.Gakalo\\Рабочий стол\\Read Me.txt";
AddFile2Record(Dataset, ObjectType, null, 'новый файл.txt', FileNameStr, 1, AddedFileIDsArray);
 
}
 
function AddFile2Record(Dataset, ObjectType, OldFileID, ShortFileName, 
	LongFileName, Revision, AddedFileIDsArray) {
	var ID = Connector.GenGUID();
	try {
		Dataset.Append();
		Dataset.Values('ID') = ID;
		Dataset.Values('ItemTypeID') = ObjectType;
		Dataset.Values('Link') = ShortFileName;
		Dataset.Values('Revision') = Revision;
		if (ObjectType == ft_File) {
			var FileSize = GetFileSize(LongFileName);
			if (FileSize > 0) {
				Dataset.Values('FileSize') = FileSize;
			}
			var Result = SaveFileToDataset(LongFileName, Dataset, 'FileData');
			if (!Result) {
				return;
			}
		}
		var FilePosted = Dataset.Post();
		if ((FilePosted) && (ObjectType == ft_File)) {
			CopyFileAccessDetailData(OldFileID, ID);
		}
	} finally {
		Dataset.Close();
	}
	if (FilePosted) {
 
	var InsertQuery = Services.GetSingleItemByUSI('iq_FileInDocument');
	var ColumnsValues = InsertQuery.ColumnsValues;
	ColumnsValues.ItemsByName('FileID').Value = ID;
	ColumnsValues.ItemsByName('DocumentID').Value = RecordID;
	ColumnsValues.ItemsByName(BaseGridArea.IDFieldName).Value = dlData.Dataset('ID');
 
	var NewID = Connector.GenGUID();
	ColumnsValues.ItemsByName('ID').Value = NewID;
	InsertQuery.Execute();
 
		AddedFileIDsArray.push(NewID);
	}
}
Показать все комментарии