среда, 11 июля 2007 г.

Система: выполнение команд при запуске 1

Последовательность вызова методов при запуске Axapta

[id:005]
Иногда нужно сделать что-то во время запуска системы. Этому и посвящаются несколько следующих статей.
Посмотрите рисунок слева. Это UML-диаграмма типа "Последовательность" (читается сверху-вниз), изображен кусок процесса запуска системы, в котором ты можешь полазить и сделать что-то свое. Места возможного приложения шаловливых ручек помечены розовыми и зелеными областями. В системе Axapta есть базисные (fundamental) классы, к ним относятся - Application и Info.
Сначала выполняется метод Application.startup(). И в нем..
  1. ...вызывается статический метод SysStartupCmd::construct(), в котором анализируется строка параметров запуска системы. В зависимости от ее содержимого создается дочерний от SysStartupCmd класс. Имена всех дочек начинаются на "SysStartupCmd".
  2. Вызывается метод applInit() класса, дочернего от SysStartupCmd.
  3. Время работать методу startup() родительского для Applicatioin класса.
  4. Вызов метода Application.startupPost().
  5. Вызывается метод applRun() класса, дочернего от SysStartupCmd.

    Метод Application.startup() закончился. И наступает время выполняться Info.startup():
  6. Тоже самое, что и в пункте 1
  7. Вызывается метод infoInit() класса, дочернего от SysStartupCmd
  8. Время работать методу startup() родительского для Info класса.
  9. Вызов метода Info.startupPost().
  10. Вызывается метод infoRun() класса, дочернего от SysStartupCmd

Обрати внимание, что пункты 1, 2, 5, 6, 8 и 10 выполняются ТОЛЬКО, если строка параметров запуска системы не была пустой. Чтобы задать эту строчку, иди в "Панель управления" операционной системы, пункт "Администрирование", "Microsoft Dynamics AX Configuration Utility". Откроется окно с настройками клиентской части системы Axapta; на рисунке овалом выделено поле, куда нужно ввести параметры запуска системы:

А что вообще происходит? Если честно, то я не знаю, но... В методе Application.startup() происходит инициализация серверной части для текущей сессии, а в Info.startup() - клиентской части.

PS: возврат какого-либо дочернего класса из статического метода construct() базового класса - это из "Best Practices of Axapta programming", т.е. передовая практика программирования в Аксапте. Об этом расскажу потом.

Комментариев нет: