25.12.2006, 12:58 | #1 |
Участник
|
Добрый день.
Возможно сделать такое - из кода получить список всех объектов запущенных на данный момент в Navision ? |
|
25.12.2006, 14:50 | #2 |
Участник
|
Цитата:
Для этого, конечно нужно иметь права администратора. Один из способов просмотр некой истории использования объектов пользователем. Посмотреть можно так: Администрирование-Пользователи-Настройки пользователя-Использование данных-вкладки формы и кнопка Данные. Удачи! |
|
25.12.2006, 17:45 | #3 |
Участник
|
Мне необходимо программно получить список.
|
|
25.12.2006, 17:54 | #4 |
Участник
|
|
|
25.12.2006, 18:30 | #5 |
Участник
|
Очень жаль !!!!
|
|
26.12.2006, 10:58 | #6 |
Участник
|
|
|
26.12.2006, 11:42 | #7 |
Участник
|
Можно кодом посмотреть и список загруженных объектов и сам код объектов и код который выполнялся, а который нет. Это делается с помощью таблички 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;
__________________
Должен остаться только один. |
|
26.12.2006, 12:25 | #8 |
Участник
|
Тогда - вопрос в другом - возможно ли добраться до тригерра OnINsert Code Coverage №=2000000049 ???
|
|
26.12.2006, 12:31 | #9 |
Участник
|
Можно добратся до любого объекта, тригера, кода, которые вызывались после включения
CODECOVERAGELOG(TRUE). Создайте форму с SourceTable = Code Coverage. включите механизм через меню Дебаггер -> Выполение Кода. И в этой форме посмотреите какие поля, чем заполенены и т.д. Аналогично работает форма 566 в ней можно посмотреть, как в коде определяется выполнялся код или нет и т.д. p.s. Если нужно менять исходный код в коде, то все несколько сложнее.
__________________
Должен остаться только один. |
|
26.12.2006, 13:31 | #10 |
Участник
|
в таблице Code Coverage - нет данных по работе с самой собой.
|
|
26.12.2006, 14:28 | #11 |
Участник
|
Что значит "с самой собой"?
Какие вам нужны данные?
__________________
Должен остаться только один. |
|
26.12.2006, 15:56 | #12 |
Участник
|
Объясню всю задачу.
Мне необходимо записывать в специальную таблицу номера отчетов, название отчетов, кто-вызывал отчет и когда вызывал отчет. То есть вести лог вызова отчетов. Все отчеты (за которыми необходимо следить) - указываются в созданной мной таблице. Есть два типа отчетов, которые работают у клиента - 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 |
Участник
|
|
|
26.12.2006, 17:14 | #14 |
Участник
|
CODE COVERAGE не совсем табличка, физически ее нет.
Вы решаете простую задачу сложными методами или методами не свойственными Navision. Для того чтобы контролировать запуск отчетов достаточно добавить код контроля в место откуда они вызываются или в сами отчеты. Тупо, но будет работать.
__________________
Должен остаться только один. |
|
26.12.2006, 17:41 | #15 |
Участник
|
В том то и дело - что необходимо написать динамическое логирование (чтобы небыло необходимости в каждый отчет добавлять даже строчку программного кода). А, сделать так чтобы Администратору необходио было бы просто добавить номер отчета, и все. А, преставте что у вас уж есть 500 отчетов - сидеть и в каждый добавлять отчет строчку программы ????
|
|
26.12.2006, 17:54 | #16 |
Участник
|
Если нельзя добавить код в то место откуда отчеты вызываются, то добавлять в каждый.
Реплейсом за 5 минут. А лучше создать единое место вызова отчетов.
__________________
Должен остаться только один. |
|
26.12.2006, 18:25 | #17 |
Участник
|
Эти все варианты рассматривались с самого начала. Но, у клиентов есть возможность добавлять свои отчеты путем импорта, и добавлять код внутрь отчета, возможности у них нет.
|
|