Отладчик в NAV 2013: что за ширмой

Началось все с банального - хотел смотреть что происходит при работе с формами. Для этого обратился к новому отладчику.
Из Development Environment запустил Tools – Debugger – Debug Session.

Tools – Debugger – Debug Session

Запустилось окно со списком сессий, в моем случае сессия одна, но мне этого хватает.

Edit - Session List

Выбрал сессию. Нажал Debug. Запустилось окно отладчика. Активировал 1 кодеюнит и пощелкал в ролевом центре. Остановился на триггере.

Debugger - stop on trigger

Надо сказать – работает. Как пользоваться – есть статья в MSDN. Меня же заинтересовало кое-что на первом скриншоте. Если быть точнее – триггер LaunchDebugger.
После этого погрузился в изучение и выяснил следующее:
В NAV 2013 отладчик реализован внутренними средствами Dynamics NAV, в частности следующими объектами:
Страницы:

  • 9500 Debugger
  • 9502 Debugger Callstack FactBox
  • 9503 Debugger Watch Value FactBox
  • 9504 Debugger Code Viewer
  • 9505 Debugger Breakpoint List
  • 9506 Session List
  • 9507 Debugger Breakpoint Condition
  • 9508 Debugger Variable List
  • 9509 Debugger Break Rules

Программный модуль 9500 Debugger Management

Чтобы они заработали были расширены возможности встроенного языка следующими функциями:

New C/AL functions for debugger

А для отображения отлаживаемого кода используется подключаемый компонент

Microsoft.Dynamics.NAV.CodeViewerControl;PublicKeyToken=31bf3856ad364e35

Со следующими методами:

Debugger AddIn

И списком доступных событий:

Debugger AddIn Events

При работе отладчика активно используется новые виртуальные таблицы:

Debugger Tables

Вооружившись такими технологиями немедленно кое-что соорудил, но использовать не удалось из-за досадного технического ограничения:

Debugger Limitation

Жаль, очень было интересно посмотреть, что происходит в текущей сессии в online-режиме.
Вместо этого решил внимательнее поиграть с подключаемым компонентом.
Для этого сделал страницу типа CardPart довольно примитивного вида. Основной интерес – в свойствах поля:

CardPart

Весь интеллектуальный код поместил в функцию

CardPart code
Затем создал основную страницу на базе таблицы Object настроил связи через триггер OnAfterGetCurrRecord()
Результатом можно насладиться на скриншоте ниже. Хотя красота довольно сомнительная, есть куда развивать и улучшать.

RTC object designer

Кстати, запустить созданную карточную форму напрямую из дизайнера объектов не получилось – настойчиво преследовала ошибка:
—————————
The control add-in on control Code Viewer on page Debugger Code Viewer has not been instantiated.
—————————

Метки: ,



Оставьте свой отзыв!