12.12.2007, 16:54 | #1 |
Участник
|
Когда ActiveX отпускает документ?
Здравствуйте все.
Задача: Есть форма, на которую добавлен ActiveX "Microsoft Web Browser". До открытия формы выбираются данные из талицы и заполняются в файл Excel (по шаблону), файл сохраняется на диске. Затем при помощи функции X++: ActiveX.Navigate(fileName) Проблема: при закрытии формы нужно удалить файл созданный, собственно, для навигации по нему в форме. Но в методе close, как выяснилось, процесс Excel еще существует, т.е. файл Excel занят полагаю этм ActiveX, соотв. удалить его не удается После того как форма закрылась, процесс Excel благополучно закрывается и файл руками удалить можно. Попробовал закрывать документ непосредственно перед удалением: X++: ActiveX.Document().closeDocument() Возможно кто-то сталкивался с подобным или просто знает, в каком месте нужно поставить удаление файла или как правильно это сделать. Буду благодарен за любые советы. Axapta 3.0 SP4 |
|
12.12.2007, 17:12 | #2 |
Участник
|
Попробуйте сделать так:
X++: COM excel = COM::getObject('Excel.Application'); COM active_book = excel.ActiveWorkbook(); ; active_book.Saved(true); active_book.Close(); |
|
12.12.2007, 17:43 | #3 |
Участник
|
К сожалению такая схема также не работает, пробовал еще и более подробную схему, которая тоже не работает:
X++: m_comDocument = ActiveX.Document();//проверял, имеет типа _WorkBook m_comApplication = m_comDocument.Application(); if (!m_comApplication) { return; } if (m_comDocument) { tmp = m_comDocument.windows(); comWindow = tmp.Item(1); comWindow.close(false); m_comDocument.close(false); m_comDocument.detach(); m_comDocument.finalize(); } m_comApplication.Quit(); m_comApplication.detach(); Последний раз редактировалось patron; 12.12.2007 в 17:47. |
|
12.12.2007, 18:06 | #4 |
Moderator
|
А вы можете как-то визуализировать процесс? ( visible(true) ). Один раз это помогло вот здесь: Завершить процесс Word
|
|
12.12.2007, 19:02 | #5 |
Участник
|
Это тоже не помогло. Excel-таки появляется на taskBar, но с документом ничего не происходит
если вызывать application.Quit() то с taskBar Excel исчезает, но в процессах остается При том что закрывать все приложение не хочется, т.к. пользователь может редактировать другой документ в этот момент. |
|
12.12.2007, 22:51 | #6 |
Microsoft Dynamics
|
Посмотрите как сделано отложенное удаление временных файлов в \Classes\DocuFileWatchDog
Пример использования класса: \Forms\DocuView\Methods\loadHtmlFile |
|
|
За это сообщение автора поблагодарили: Logger (3), patron (1). |
13.12.2007, 11:48 | #7 |
Участник
|
Так помогает, спасибо. Только не хотелось таймеры использовать.
|
|
20.12.2011, 13:28 | #8 |
Участник
|
Если перед закрытием открыть (снова вызвать Navigate) любой другой файл, то исходный он отпускает. Я для этого сделал пустой html-файл, внутри которого только <HTML></HTML>
|
|
26.12.2011, 14:24 | #9 |
Участник
|
При закрытии формы запустите примитивный тред, в нем цикл:
X++: while (file.locked())
{
sleep(100);
}
file.delete(); по тредам есть стандартный туториал \Classes\Tutorial_ThreadWork мы в свое время так делали для того чтобы открыть файл после сохранения аксаптой
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy |
|