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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.07.2007, 16:51   #1  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Всем привет! Есть один небольшой вопросик.

Можно ли средствами C\AL отловить момент запуска и момент окончания работы, например, отчета?

Вопрос возник из-за необходимости написать систему логирования времени запуска и окончания работы некоторых объектов.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 31.07.2007, 16:58   #2  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код.
__________________
Должен остаться только один.
Старый 31.07.2007, 17:23   #3  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Цитата:
Сообщение от NeNavision Посмотреть сообщение
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код.
Это понятно. Но как фиксировать время окончания работы отчета если он дал ошибку, например? Если он отработал нормально - то проблем нет - пишем в OnInit, в OnPost и вуаля. А если выдал ошибку и закончил работу?

Конечно можно на каждую ошибку писать код в отчете, который будет закрывать время выполнения... Но это работает только для прогнозируемых ошибок.

В целом суть вопроса сводится к следующему: есть ли в Навике триггер, который отрабатывает ВСЕГДА при окончании работы объекта, даже если оное окончание вызвано исключением или спец. функцией.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 31.07.2007, 17:55   #4  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Так это уже совсем другой вопрос
Думаю стандартного ничего нет.
__________________
Должен остаться только один.
Старый 31.07.2007, 18:20   #5  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Но. Как рассказывали старые мастера.
Способ все таки есть.
Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет.

Например, после выполнения кода, строки в таблице Code Coverage остаются.
Код:
CodeCoverage.RESET;
CodeCoverage.DELETEALL;
CodeCoverage.RESET;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
  //выполняем какойто код
  ERROR('видимо что-то случилось');
  //---------------------
  CODECOVERAGELOG(FALSE);
END;
__________________
Должен остаться только один.
Старый 01.08.2007, 11:45   #6  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от NeNavision Посмотреть сообщение
Но. Как рассказывали старые мастера.
Способ все таки есть.
Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет.

Например, после выполнения кода, строки в таблице Code Coverage остаются.
Код:
CodeCoverage.RESET;
CodeCoverage.DELETEALL;
CodeCoverage.RESET;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
  //выполняем какойто код
  ERROR('видимо что-то случилось');
  //---------------------
  CODECOVERAGELOG(FALSE);
END;
Только есть 2 проблемы - нет даты и времени и если GUIALLOWED = TRUE, то можно "долго ждать ответа" на ERROR :-)
Старый 01.08.2007, 20:58   #7  
Голышев Михаил is offline
Голышев Михаил
Участник
 
106 / 10 (1) +
Регистрация: 03.07.2006
Есть способ проще - через Automation.

DLL в атаче содержит компонент с событием OnDestroy, которое срабатывает в момент уничтожения самого Automation и передаёт управление в Navision.

Пример использования:

1) Регистрируете DLL. (regsvr32.exe CROCOnDestroy.dll)
2) В нужном отчете создаете глобальную переменную
oDestroy Automation 'CROC OnDestroy 1.0 Type Library'.OnDestroyEvent
3)В дополнительных свойствах переменной выставляете WithEvents=YES
4)В коде появляется тригер - oDestroy::OnDestroy() - в него пишете поцедуру логирования.
Вложения
Тип файла: rar CROCOnDestroy.rar (11.7 Кб, 35 просмотров)
Старый 02.08.2007, 17:23   #8  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
А если в файлик логи писать, а потом когда потребуется их анализировать, загружать в Нав.
Старый 03.08.2007, 13:55   #9  
Padre is offline
Padre
Участник
 
28 / 12 (1) ++
Регистрация: 14.05.2007
Адрес: Санкт - Петербург
Цитата:
Сообщение от RedFox Посмотреть сообщение
Только есть 2 проблемы - нет даты и времени и если GUIALLOWED = TRUE, то можно "долго ждать ответа" на ERROR :-)
Интересная библиотечка.
А есть что нибудь подобная для ожидания сообытий от пользователя, например onPush для формы?
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:03.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.