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

Нравится

4 комментария

Ищите в этом направлении (на sdk):
IFileChangeNotifier
Пример есть в scr_FilesDetailGridArea.
Сам пока не трогал, т.к. не было подобных задач, посему больше не подскажу)

Юрий, добрый день.

Попробуйте изменить некоторые функции из scr_FilesDetailGridArea следующим образом:

function SetFileIsChanged(FileChangeNotifier, FileName, FileID) {
	var Dataset = FilesDetailGridArea.ChangedFilesDataset;
	if (IsCanSaveChangeFile(FileID)) {
		Dataset.Append();
		Dataset.ValAsGUID('ID') = FileID;
		Dataset.ValAsStr('Name') = FileName;
		Dataset.Post();
		RefreshGrid();
		if (ShowConfirmationDialog(DoYouWantToSaveChangedFileToDatabase) ==
				mrYes) {
			SaveFileInDataBase(FileID, FileName);
			UnlockFile();
			dlData.Dataset.RefreshRecord(FileID, false);
			Dataset.Delete();
			RefreshGrid();
		} else {
			UnlockFile();
		}
	}
}
 
function grdDataOnDblClick(Control) {
	if (amiOpen.IsEnabled){
		LockFile();
		EditObject(true);
	}
}
 
function amiSaveOnExecute(ActionMenuItem) {
	SaveToFile();
	UnlockFile();
}
 
function amiSaveChangedFilesOnExecute(ActionMenuItem) {
	SaveChangedFiles();
	UnlockFile();
}
 
function amiOpenOnExecute(ActionMenuItem, Sender) {
	LockFile();
	EditObject(false);
	UpdateButtons();
}

В присоединённом файле выделено красным, что именно нужно изменить.

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

Юрий, дело в том, что на текущий момент нет возможности отследить момент завершения работы с файлом. У объекта, который связан с файлом, есть возможность подписаться на событие OnFileChange и OnFileDelete. Поэтому в решении момент сохранения файла в БД воспринимается как сигнал к разблокировке файла. Согласен, что в некоторых случаях это не совсем верно, но пока другой более подходящей возможности нет.

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

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