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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.12.2006, 12:58   #1  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Добрый день.
Возможно сделать такое - из кода получить список всех объектов запущенных на данный момент в Navision ?
Старый 25.12.2006, 14:50   #2  
dinai is offline
dinai
Участник
 
28 / 10 (1) +
Регистрация: 15.08.2006
Цитата:
Сообщение от art Посмотреть сообщение
Добрый день.
Возможно сделать такое - из кода получить список всех объектов запущенных на данный момент в Navision ?
Да, такая возможность есть. Но, по-моему в рамках просмотра запущенной сессии пользователя.
Для этого, конечно нужно иметь права администратора. Один из способов просмотр некой истории использования объектов пользователем. Посмотреть можно так: Администрирование-Пользователи-Настройки пользователя-Использование данных-вкладки формы и кнопка Данные.
Удачи!
Старый 25.12.2006, 17:45   #3  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Мне необходимо программно получить список.
Старый 25.12.2006, 17:54   #4  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от art Посмотреть сообщение
Мне необходимо программно получить список.
Штатными средствами - думаю нет. В навижене нет семейств объектов.
Старый 25.12.2006, 18:30   #5  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Очень жаль !!!!
Старый 26.12.2006, 10:58   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от art Посмотреть сообщение
Очень жаль !!!!
You're in the navi now )))
Старый 26.12.2006, 11:42   #7  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Можно кодом посмотреть и список загруженных объектов и сам код объектов и код который выполнялся, а который нет. Это делается с помощью таблички Code Coverage №=2000000049.

Например этот код выводит собственный исходный код. (откуда был запущен, какой триггер)(сообщениями)
Код:
CodeCoverage.RESET;
CodeCoverage.DELETEALL;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
  CodeCoverage.RESET;
  IF CodeCoverage.FIND('-') THEN
	REPEAT
	  MESSAGE(CodeCoverage.Line);
	UNTIL CodeCoverage.NEXT = 0;
  CODECOVERAGELOG(FALSE);
END;
P.s. на этой основе можно что-нибудь хитрое замутить, типа защиты от изменения кода и т.д.
__________________
Должен остаться только один.
Старый 26.12.2006, 12:25   #8  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Тогда - вопрос в другом - возможно ли добраться до тригерра OnINsert Code Coverage №=2000000049 ???
Старый 26.12.2006, 12:31   #9  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Можно добратся до любого объекта, тригера, кода, которые вызывались после включения
CODECOVERAGELOG(TRUE).
Создайте форму с SourceTable = Code Coverage. включите механизм через меню Дебаггер -> Выполение Кода. И в этой форме посмотреите какие поля, чем заполенены и т.д.
Аналогично работает форма 566 в ней можно посмотреть, как в коде определяется выполнялся код или нет и т.д.

p.s. Если нужно менять исходный код в коде, то все несколько сложнее.
__________________
Должен остаться только один.
Старый 26.12.2006, 13:31   #10  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
в таблице Code Coverage - нет данных по работе с самой собой.
Старый 26.12.2006, 14:28   #11  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Что значит "с самой собой"?
Какие вам нужны данные?
__________________
Должен остаться только один.
Старый 26.12.2006, 15:56   #12  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Объясню всю задачу.
Мне необходимо записывать в специальную таблицу номера отчетов, название отчетов, кто-вызывал отчет и когда вызывал отчет. То есть вести лог вызова отчетов.
Все отчеты (за которыми необходимо следить) - указываются в созданной мной таблице.

Есть два типа отчетов, которые работают у клиента - 1. это отчеты созданные в Navision 2.это отчеты которые выгружаются в Excel.

Если запускать отчет 1-типа - то при каждом вызове такого отчета запускается функция FindPrinter из кодюнита1. При вызове этой функции указывается параметр функции ReportID. Таким образом логирование за 1 - тпиом отчетов осуществляется очень легко.

Если запускать отечет 2 - типа - то функция FindPrinter не запускается. Но, постоянно запускается функция GetGlodalTableTriggerMask. И вот теперь возникает проблема с логированием таких отчетов, так как не известно номер запускаемого отчета.

Для этого я использую CODECOVERAGELOG.

При запуске формы "Главного меню" - запускается функция из CU1.LogInStart. В это функции я добавил код CODECOVERAGELOG(TRUE); Таким образом я слежу за каждым действием пользователя.
Когда пользователь запускает отчет 2 типа - запускается GetGlodalTableTriggerMask. Из него запускается мой кодюнит. Внутри моего кодюнита происходит следующее -

CoverageLine.RESET;
CoverageLine.SETRANGE(CoverageLine."Object Type",CoverageLine."Object Type"::Report);
IF CoverageLine.FIND('-') = TRUE THEN BEGIN
Object.SETRANGE(Object.Type,Object.Type::Report);
Object.SETRANGE(Object.ID,CoverageLine."Object ID");
IF Object.FIND('-') = TRUE THEN BEGIN
"ChangeLogSetup(Report)".RESET;
"ChangeLogSetup(Report)".SETRANGE("ChangeLogSetup(Report)"."Report No.",Object.ID);
IF "ChangeLogSetup(Report)".FIND('-') = TRUE THEN
MESSAGE(Object.Name + ' Отчет добавлен в таблицу логирования.'); // здесь будет происходить запись данных в таблицу для логирования
END;
END;

CODECOVERAGELOG(FALSE);
CoverageLine.RESET;
CoverageLine.DELETEALL;
CODECOVERAGELOG(TRUE);
// удаление делаю обязательно по двум причинам - 1. что бы база не увеличивалачь до гигагнских размеров в течении все го рабочего дня; 2. В CoverageLine должна быть только одна строка с типом Report, так как определить какой отчет был запущен последним и записать про него данные в таблицу для логирования - не получается , не получается из-за того что данные в CoverageLine сортируются по типу, а, потом по своему уникальному ID номеру.

Проблема в том, что после удаления данные из таблицы удаляются !!!!! Я снова запускаю CODECOVERAGELOG. Но, после того как данные были удаленны из CoverageLine, там появляются новые записи. И В ЭТИХ ЗАПИСЯХ УКАЗЫВАЮТСЯ ВСЕ объекты КОТОРЫЕ УЖЕ БЫЛИ ЗАПУЩЕННЫ ДО запуска CODECOVERAGELOG(TRUE)( Хотя должно быть по другому - все объекты которые были запущенны до CODECOVERAGELOG(TRUE) - не должно попасть CoverageLine).

Таким образом там появляется отчет который я уже добавил в лог таблицу. и при следующем запуске другого отчета, в таблице CoverageLine - появляется две записи с типом REPORT. И выяснить - какой именно отчет был запущен последним невозможно.

Поэтому я и спрашиваю - возможно ли доступиться до тригерра OnInsert таблицы Code Coverage №=2000000049, для того чтобы при добавлении записи производить пр определенных услових удаление записей с типом REPORT.

Вот такая простая задача.
Старый 26.12.2006, 16:37   #13  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Цитата:
Сообщение от NeNavision Посмотреть сообщение
p.s. Если нужно менять исходный код в коде, то все несколько сложнее.
А, вот по этому поводу - можно немного по конкретнее ?
Старый 26.12.2006, 17:14   #14  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
CODE COVERAGE не совсем табличка, физически ее нет.

Вы решаете простую задачу сложными методами или методами не свойственными Navision.
Для того чтобы контролировать запуск отчетов достаточно добавить код контроля в место откуда они вызываются или в сами отчеты. Тупо, но будет работать.
__________________
Должен остаться только один.
Старый 26.12.2006, 17:41   #15  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
В том то и дело - что необходимо написать динамическое логирование (чтобы небыло необходимости в каждый отчет добавлять даже строчку программного кода). А, сделать так чтобы Администратору необходио было бы просто добавить номер отчета, и все. А, преставте что у вас уж есть 500 отчетов - сидеть и в каждый добавлять отчет строчку программы ????
Старый 26.12.2006, 17:54   #16  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Если нельзя добавить код в то место откуда отчеты вызываются, то добавлять в каждый.
Реплейсом за 5 минут.
А лучше создать единое место вызова отчетов.
__________________
Должен остаться только один.
Старый 26.12.2006, 18:25   #17  
art06 is offline
art06
Участник
Аватар для art06
 
192 / 10 (1) +
Регистрация: 11.08.2006
Эти все варианты рассматривались с самого начала. Но, у клиентов есть возможность добавлять свои отчеты путем импорта, и добавлять код внутрь отчета, возможности у них нет.
 


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

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

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