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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.07.2005, 13:11   #1  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
? Как отловить отладчиком DoUpdate, DoDelete?
Периодически при поиске ошибок просто необходимая вещь...
Старый 11.07.2005, 13:47   #2  
YVAS is offline
YVAS
1C
Аватар для YVAS
1C
 
265 / 10 (1) +
Регистрация: 31.07.2003
Поставить точку останова в месте их вызова.
__________________
Разница между теорией и практикой на практике больше, чем в теории
Старый 11.07.2005, 13:48   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
ИМХО, никак. Ну или поиск по АОТ и установка точек останова на каждом doUpdate, doDelete, doInsert.
Старый 11.07.2005, 13:48   #4  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
YVAS, это английский хумор такой специфичный?
Старый 11.07.2005, 13:49   #5  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Изначально опубликовано raz
ИМХО, никак. Ну или поиск по АОТ и установка точек останова на каждом doUpdate, doDelete, doInsert.
Не катит, ты ж понимаешь..
Старый 11.07.2005, 13:49   #6  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Если есть пчелы - значит должен быть мед - если есть метод DoUpdate - значит где-то есть его код.. Понятно что на слое sys он точно есть.. но может что-то связанное с выполнением этого кода.. другое место в системе какое-то доступное и привязаное к этому коду..
Старый 11.07.2005, 14:02   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано MironovI
Если есть пчелы - значит должен быть мед - если есть метод DoUpdate - значит где-то естьс его код..
только не в случае с методами, начинающимися на "do"
Они напрямую выполняются.

С Уважением,
Георгий
Старый 11.07.2005, 14:04   #8  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Уточните понятие "напрямую" - система все-таки должна где-то сгенерить запрос к базе и выполнить его.. Может копать надо не конкретный doInsert конкретной таблицы, а место связанное с вставкой изменением вообще.. типа Info.add()..
Старый 11.07.2005, 14:09   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Она генерит.... только ядром (ax32.exe). А туда аксаптийный отладчик не вхож
Если только SQL Profiler (если у вас SQL Server) - но это уже на уровне базы.
Есть и еще способ - перекрестные ссылки - и там отфильтровка по Read/Write... Но если они не построены - то проще искать по АОТ
Старый 11.07.2005, 14:22   #10  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Неужто ядром? Я надеялся хотя бы на слой sys.. Все Reed/write можно конечно, но не в случае с таблицами типа LedgerTrans - попробовал посмотреть перекрестными ссылками где она используется.. десять минут уже ищет.. потом фильтрану по write будет еще десять минут - потом буду ставить лапы по 500 местам где этот LedgerTrans апдейтится - сколько по времени - ну не знаю - наши руки не для скуки Потом придет менеджер проекта и спросит чем я занимался весь день )
Старый 11.07.2005, 14:28   #11  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Приблизительное, и не оочень красивое решение у меня конечно есть - включить журнализацию запросов к базе данных, найти код где эти запросы собственно фиксируются, поставить там в коде уловие типа IF('поискать в текте запроса нужную строку апдейта') и лапу на него.. но это уж край..
Старый 11.07.2005, 14:32   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
слой sys означает что код все-таки есть. Изначально смысл методов do* состоит в том, чтобы сделать черное дело , которое нельзя отменить или перекрыть. Все что есть на слое sys можно изменить на слое usr, и работать будет usr-слой. И поэтому методы do* реализованы в ядре (\System Documentation\Classes\xRecord\do*).
Старый 11.07.2005, 15:01   #13  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Изначально опубликовано MironovI
Приблизительное, и не оочень красивое решение у меня конечно есть - включить журнализацию запросов к базе данных, найти код где эти запросы собственно фиксируются, поставить там в коде уловие типа IF('поискать в текте запроса нужную строку апдейта') и лапу на него.. но это уж край..
Может есть у кого-то более красивый вариант?..
Старый 11.07.2005, 15:57   #14  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Возвращаясь к теме перекрестных ссылок, можно получить ссылки непосредственно на вызов метода doUpdate(), например, для LedgerTrans. У меня их получилось 12 штук. А дальше - лапа и т.д.
__________________
Андрей.
Старый 11.07.2005, 17:56   #15  
MaratRZ is offline
MaratRZ
MaratRZ@mail.ru
 
26 / 35 (2) +++
Регистрация: 11.03.2005
Добрый день!

Можно сделать следующим образом - вешаешь на таблицу триггер на удаление/добавление/изменение, который выдает ошибку, потом ставишь точку останова на Info/add и далее по стеку ...

PHP код:
CREATE TRIGGER LEDGER_TRANS_DEL
ON dbo
.LedgerTrans
FOR DELETE
AS
BEGIN
    RAISERROR 
('Удаление'161)
END 
За это сообщение автора поблагодарили: Proba (1).
Старый 11.07.2005, 20:19   #16  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Хороший вариант Marat предложил. А еще можно включить протоколирование базы данных и поставить breakpoint в метод \Classes\Application\logInsert().
Старый 12.07.2005, 11:53   #17  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Изначально опубликовано Dron AKA andy
Возвращаясь к теме перекрестных ссылок, можно получить ссылки непосредственно на вызов метода doUpdate(), например, для LedgerTrans. У меня их получилось 12 штук. А дальше - лапа и т.д.
Я наверно не доконца умею работать с перекрестными - как получить сылки конкретно по doUpdate()?
Старый 12.07.2005, 11:55   #18  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Изначально опубликовано EVGL
Хороший вариант Marat предложил. А еще можно включить протоколирование базы данных и поставить breakpoint в метод \Classes\Application\logInsert().
DoInsert в лог не пишет..
Старый 12.07.2005, 11:57   #19  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Изначально опубликовано MaratRZ
Добрый день!

Можно сделать следующим образом - вешаешь на таблицу триггер на удаление/добавление/изменение, который выдает ошибку, потом ставишь точку останова на Info/add и далее по стеку ...

PHP код:
CREATE TRIGGER LEDGER_TRANS_DEL
ON dbo
.LedgerTrans
FOR DELETE
AS
BEGIN
    RAISERROR 
('Удаление'161)
END 
Спасиб, может пригодится когда надо поймать первое же место с doUpdate, хотя и будет мешать работе остальных пользователей базы и т.д.. но действенно
Старый 12.07.2005, 12:34   #20  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Как получить ссылки на doUpdate() и другие используемые методы, невидимые в репозитар
Сервис / Средства разработки / Перекрестные ссылки / Объекты по именам.
Открывается форма "Объекты по именам" и вылезает запрос. В поле "Имя типа" вводится имя объекта (напр., название таблицы), в поле "Наименование" - название метода. Фильтр применяется, и в форме остаются только найденные объекты. Далее кнопарь "Чем используется" - и вуаля.
__________________
Андрей.
За это сообщение автора поблагодарили: Logger (7), imir (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как отловить событие запуска формы chanchala DAX: Программирование 2 24.10.2008 09:56
Пробежался отладчиком по СВОДНОМУ планированию и ......... НЕ ПОНИМАЮ :( director DAX: Функционал 5 01.02.2006 14:05
как отловить событие Valia DAX: Программирование 4 07.10.2003 13:50
Как отловить изменение контрола erudit DAX: Программирование 1 15.05.2003 16:56
SalesTable.doUpdate что за метод за такой? tav DAX: Программирование 3 03.03.2003 18:08

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

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

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