Подскажите, как можно отследить закрытие Вордовского файла открытого с детали Файлы раздела Документы (файл изначально находится в базе данных, при этом в открытый файл изменения не вносились).
Понадобилось это чтобы автоматизировать блокировку и разблокировку файлов при их открытии и соответственно закрытии.
Нравится
Ищите в этом направлении (на 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).