Формат команды
Как указать команду запуска
Тип команды
Порядок событий при запуске
Список команд
Описание команд
Как создать свою команду загрузки (startup command)
Для Аксапты можно указать команду, которая будет выполняться в момент запуска (startup command).
Здесь приводятся команды которые можно указывать в качестве команды запуска. Кроме того, здесь показано как можно добавлять свои команды запуска.
Дополнительную информацию о командах запуска можно получить в хелпе для разработчика, используя поиск по ключевой фразе "startup command".
Формат команды
КоммандаВОдноСлово [Параметры]
Надо отметить, что Аксапта при запуске обрабатывает только одну команду. Команда должна состоять из одного слова. После пробелов могут идти параметры команды.
Вместо пробелов можно использовать знак подчеркивания "_". Знак подчеркивания перед разбором команды заменяется на пробел. Будьте внимательны с именами файлов, которые содержат знаки подчеркивания!
Кроме того, все кавычки, которые содержатся в команде, также удаляются перед разбором.
Как указать команду запуска
Команду можно указать в конфигурационной утилите в поле Startup command

Команду запуска можно указать в командной строке, если указать параметр -startupcmd=compileAll. Заметим, что если в командной строке указывается несколько команд -startupcmd, то исполняется только последняя.

Примечание: подробнее о параметрах командной строки можно прочитать на странице параметры запуска.
Тип команды
Команды бывают четырех типов:
- ApplInit
- ApplRun
- InfoInit
- InfoRun
Команда типа ApplInit вызывается из метода Application::Startup до инициализации приложения, базы данных, системы infolog и до выполнения проверки валидности базовых таблиц. См. Application::Startup.
Команда типа ApplRun вызывается в самом конце метода Application::Startup.
Команда типа InfoInit вызывается из метода Info::Startup до установки системы документооброта, до обработки параметров пользователя, до обработки CheckList'а. См. Info::Startup.
Команда типа InfoRun вызывается в самом конце метода Info::Startup
Порядок событий при запуске
- Ввод имени пользователя и пароля
- Появляется главное меню
- ...
- Application::startup()
- reindexNative
- SysUserLog::LogUserLogin()
- applInit
- xAccessRightslist::moveAdminToSecuritykeys();
- Init base data
- Set char max
- infolog.isoCurrencyCode(CompanyInfo::find().currencyCode)
- SysSecurity::validateDomainSetup()
- SysPassword::validatePassword()
- SysASPClientTable::validateASPClient()
- SysOracleStatisticsSetup::checkForOracleStatistcs()
- LanguageTable::checkLanguageTable()
- LanguageTable::checkStartUpLanguage()
- super()
- startupPost() // именно сюда рекомендуется добавлять свои действия по инициализации
- SmmInit::construct()
- applRun
- ...
- Info::startup()
- docuInit() // инициализация документооборота
- если Аксапта запущена как COM-объект, то возврат
- если команда BMClient, то возврат
- infoInit
- executeUserOptions() // установка автовыхода по таймеру и открытие меню для ShopFloor Control
- setDocuHandling()
- super()
- InventDim::startUpCreateBlank()
- runASPSetupWizardDelayed()
- startupPost()
- SysFileDeployer::main(new args()) // копирование файлов и библиотек, регистрация dll, перезагрузка Windows если необходимо
- SysHint::run() // подсказка дня
- SysCheckList::runCheckList()
- infoRun
- ...
Список команд
| Команда | Параметр | С версии | Тип | Автовыход |
|---|---|---|---|---|
| AOTImport | ПолноеИмяФайла | 3.0 | InfoRun | - |
| ApplUpgrade | 3.0 | ApplInit | - | |
| AutoRun | Путь к файлу *.xml | 3.0 sp6 | InfoRun | Определяется xml файлом |
| Batch | 2.5 | InfoRun | - | |
| BMClient | 2.5 | InfoInit | - | |
| CompileAll | 2.5 SP2 | InfoRun | + | |
| Exit | 2.5 SP2 | InfoRun | + | |
| LoadLicense | Путь к файлу | 3.0 sp6 | InfoRun | + |
| SetBuildNo | Номер | 2.5 | ApplInit | + |
| Synchronize | 2.5 | ApplInit | + | |
| UpdateBuildNo | 2.5 | ApplInit | + |
Описание команд
AOTImport ПолноеИмяФайла
Существует: с версии 3.0 и выше
Тип: InfoRun
Пример использования:
![]()
или в командной строке:
"-startupcmd=AOTImport D:\My Documents\AOT-Objects.xpo"
Импортирует объекты в AOT из указанного файла. После импорта компиляция не выполняется. Поэтому если вы изменяете или импортируете типы, макросы или классы, то, возможно, дополнительно нужно будет сделать принудительную перекомпиляцию.
В в методе SysStartupCmdAOTImport::infoRun() есть
закомментированные строки. Если их раскомментировать, то можно заставить эту
команду импортировать метки, а также управлять некоторыми параметрами импорта.
Примечание: Помните, что знаки подчеркивания в команде и в параметре команды преобразуются в пробелы. Поэтому не используйте знаки подчеркивания в имени файла.
Стоит немного модифицировать данную команду или сделать свою на основе этой. Было бы гораздо полезнее, чтобы выполнялся импорт, полная перекомпиляция и выход из Аксапты. Тогда данную команду можно выполнять, например, по ночам. Таким образом можно выполнять, например, синхронизацию приложения.
ApplUpgrade
Существует: с версии 3.0 и выше
Тип: ApplInit
Пример использования:
![]()
или в командной строке
-startupcmd=ApplUpgrade
Эта команда информирует систему, что апгрейд завершен. В результате, система при запуске не переходит в режим конфигурирования и не открывает Upgrade CheckList.
AutoRun xmlFile[,BasePath]
Существует: с версии 3.0 SP6 и выше
Тип: InfoRun
Пример использования:
![]()
или в командной строке
"-startupcmd=AutoRun c:\axapta30\Commands.xml,c:\xmlCommands\"
Является, на мой взгляд, самой интересной командой. Она позволяет выполнить последовательность действий описанных в xml-файле, таких как: выполнение X++ кода, запуск меню-айтемов, синхронизация с БД, запуск других startup команд и многое другое. Последовательность действий выполняется только в том случае, если у пользователя, из-под которого запущена экземпляр Dynamics AX, есть права на правку ключа безопасности (security key) Администрирование \ Настройки (AdminSetup).
По сути, команда запускает класс SysAutoRun и передает туда указанный в параметрах xml-файл и, если указан второй параметр, каталог, относительно которого будут задаваться пути к файлам внутри xml-файла. Параметры и действия, которые «умеет» выполнять класс SysAutoRun, описаны в отдельном совете AutoRun. Кроме того, краткое описание и пример построения командного файла xml можно найти в MSDN: SysAutoRun или в документации разработчика.
Batch
Существует: с версии 2.5 и выше
Тип: InfoRun
Пример использования:
![]()
или в командной строке
-startupcmd=Batch
Команда запускает Аксапту в режиме сервера и исполняет Batch-пакеты.
Команда эквивалентна пункту меню Basic \ Periodic \ Batch \ Processing (Axapta 3.0) или Разное \ Пакет \ Режим сервера (Аксапта 2.5).
BMClient
Существует: в версии 2.5, в версии 3.0 уже отсутствует.
Тип: InfoInit
Пример использования:
![]()
или в командной строке
-startupcmd=BMClient
Команда запускает Аксапту в режиме клиента для теста производительности. Подробнее см. документацию о Benchmark Test.
CompileAll[ +|-]
Существует: с версии 2.5 SP2 и выше
Начиная с версии 3.0 SP6 понимает параметры + или -
Тип: InfoRun
Пример использования:
![]()
или в командной строке
-startupcmd=compileAll
Команда запускает Аксапту, делает полную перекомпиляцию и закрывает Аксапту.
Для команды можно задать необязательный параметр, который определяет, будут ли обновляться перекрестные ссылки при компиляции. Возможные значения параметра + или -:
| compileAll_+ | система будет обновлять перекрестные ссылки при компиляции |
| compileAll_- | система НЕ будет обновлять перекрестные ссылки при компиляции |
| compileAll | обновление перекрестных ссылок зависит от текущих параметров пользователя. См. скриншот: |

Полезно использовать данную команду с указанием полного имени и пароля пользователя. См. параметры запуска.
Exit
Существует: с версии 2.5 SP2 и выше
Тип: InfoRun
Пример использования:
![]()
или в командной строке
-startupcmd=Exit
Команда закрывает Аксапту после исполнения всех загрузочных процедур. Т.е. сначала выполняются все проверки и инициализации запуска, затем команда закрывает Аксапту.
Я не очень понимаю зачем нужна эта команда. Сейчас эта команда позволяет выполнить первый запуск Аксапты. Во время первого запуска выполняются начальные действия и копируются необходимые файлы с сервера. Но дело в том, что копирование все равно нельзя выполнить без пользователя, поскольку он должен ответить на вопросы и нажать кнопку подтверждения.
Эта команда была бы полезна, если бы можно было бы указывать несколько команд подряд. Сейчас пока нельзя. Может эту команду зарезервировали на будущее? Сейчас несколько команд можно выполнить при помощи одной команды autoRun.
LoadLicense LicenseFile
Существует: с версии 3.0 SP6 и выше
Тип: InfoRun
Пример использования:
![]()
или в командной строке
"-startupcmd=LoadLicense c:\axapta30\AxCodes.4550142.txt"
Загружает в систему новый лицензионный файл. После загрузки синхронизация с БД не выполняется. После загрузки новой лицензии, приложение закрывается без синхронизации таблиц.
SetBuildNo BuildStr
Существует: с версии 2.5 и выше
Тип: ApplInit
Пример использования:
![]()
или в командной строке
"-startupcmd=SetBuildNo MyBuild"
Команда изменяет текст, который соответствует номеру версии, и записывает информацию о изменении в log. Номер версии можно посмотреть при помощи пункта меню ? \ About Axapta.

После выполнения команды Аксапта закрывается.
Synchronize
Существует: с версии 2.5 и выше
Тип: ApplInit
Пример использования:
![]()
или в командной строке
-startupcmd=Synchronize
Выполняет синхронизацию таблиц, после чего Аксапта закрывается.
UpdateBuildNo
Существует: с версии 2.5 и выше
Тип: ApplInit
Пример использования:
![]()
или в командной строке
-startupcmd=UpdateBuildNo
После запуска запретит выполнение синхронизации, компиляции, а также запретит запуск контрольных списков установки и обновления. После выполнения команды Аксапта автоматически закрывается.
Команда выполняется совместно с командой SetBuildNo.
Как создать свою команду загрузки (startup command)
О том как создавать свои команды загрузки, немного сказано в руководстве разработчика на странице "Executing commands on startup".
Суть сводится к тому, что необходимо создать класс, который наследует SysStartupCmd. В вашем классе необходимо перекрыть метод applInit, applRun, infoInit или infoRun в зависимости от того, какой тип вы выберете для вашей команды. В принципе, можно перекрыть все методы.
Кроме того, надо изменить конструктор SysStartupCmd::construct() и добавить в switch разбор вашей команды.
Все, команда создана.
Есть еще один способ - перекрыть методы Application::StartupPost() и/или Info::StartupPost().
Но этот способ считается устаревшим. Не используйте этот способ - он может привести
к проблемам при апгрейдах.
Буду рад Вашим замечаниям и предложениям.
E-Mail: mazzy@mazzy.ru, Мазуркин Сергей
Дополнил: earlionak@rabota-na-rezultat.ru, Орлёнок Евгений