AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2007, 16:54   #1  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
Когда ActiveX отпускает документ?
Здравствуйте все.
Задача: Есть форма, на которую добавлен ActiveX "Microsoft Web Browser". До открытия формы выбираются данные из талицы и заполняются в файл Excel (по шаблону), файл сохраняется на диске. Затем при помощи функции
X++:
ActiveX.Navigate(fileName)
осуществляется отображение содержимого файла на форма в этом ActiveX

Проблема: при закрытии формы нужно удалить файл созданный, собственно, для навигации по нему в форме. Но в методе close, как выяснилось, процесс Excel еще существует, т.е. файл Excel занят полагаю этм ActiveX, соотв. удалить его не удается
После того как форма закрылась, процесс Excel благополучно закрывается и файл руками удалить можно.

Попробовал закрывать документ непосредственно перед удалением:
X++:
ActiveX.Document().closeDocument()
результат тот же: файл не удаляется.

Возможно кто-то сталкивался с подобным или просто знает, в каком месте нужно поставить удаление файла или как правильно это сделать. Буду благодарен за любые советы.

Axapta 3.0 SP4
Старый 12.12.2007, 17:12   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Попробуйте сделать так:
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  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
К сожалению такая схема также не работает, пробовал еще и более подробную схему, которая тоже не работает:
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  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А вы можете как-то визуализировать процесс? ( visible(true) ). Один раз это помогло вот здесь: Завершить процесс Word
Старый 12.12.2007, 19:02   #5  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
Это тоже не помогло. Excel-таки появляется на taskBar, но с документом ничего не происходит
если вызывать application.Quit() то с taskBar Excel исчезает, но в процессах остается
При том что закрывать все приложение не хочется, т.к. пользователь может редактировать другой документ в этот момент.
Старый 12.12.2007, 22:51   #6  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Посмотрите как сделано отложенное удаление временных файлов в \Classes\DocuFileWatchDog
Пример использования класса: \Forms\DocuView\Methods\loadHtmlFile
За это сообщение автора поблагодарили: Logger (3), patron (1).
Старый 13.12.2007, 11:48   #7  
patron is offline
patron
Участник
 
19 / 12 (1) ++
Регистрация: 29.03.2007
Так помогает, спасибо. Только не хотелось таймеры использовать.
Старый 20.12.2011, 13:28   #8  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Если перед закрытием открыть (снова вызвать Navigate) любой другой файл, то исходный он отпускает. Я для этого сделал пустой html-файл, внутри которого только <HTML></HTML>
Старый 26.12.2011, 14:24   #9  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
При закрытии формы запустите примитивный тред, в нем цикл:
X++:
while (file.locked())
{
sleep(100);
}
file.delete();
при желании можно добавить счетчик чтоб скажем больше 100 раз проверка не отрабатывала
по тредам есть стандартный туториал \Classes\Tutorial_ThreadWork
мы в свое время так делали для того чтобы открыть файл после сохранения аксаптой
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dax-lessons: Problem when creating a dynamic form with ActiveX control & Solution :) Blog bot DAX Blogs 0 30.04.2008 16:05
Вопрос ActiveX raniel DAX: Программирование 4 19.03.2008 08:21
передать строку в ActiveX Eldar9x DAX: Программирование 1 13.08.2007 15:23
Ошибка ActiveX PT DAX: Функционал 9 09.10.2006 13:00
Как убить ActiveX компонет на форме Аксапты? Горбунов Дмитрий DAX: Функционал 1 29.11.2004 18:07

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:24.