Формат команды
Как указать команду запуска
Тип команды
Порядок событий при запуске
Список команд
Описание команд
Как создать свою команду загрузки (startup command)

 

Для Аксапты можно указать команду, которая будет выполняться в момент запуска (startup command).

Здесь приводятся команды которые можно указывать в качестве команды запуска. Кроме того, здесь показано как можно добавлять свои команды запуска.

Дополнительную информацию о командах запуска можно получить в хелпе для разработчика, используя поиск по ключевой фразе "startup command".

Формат команды

КоммандаВОдноСлово [Параметры]

Надо отметить, что Аксапта при запуске обрабатывает только одну команду. Команда должна состоять из одного слова. После пробелов могут идти параметры команды.

Вместо пробелов можно использовать знак подчеркивания "_". Знак подчеркивания перед разбором команды заменяется на пробел. Будьте внимательны с именами файлов, которые содержат знаки подчеркивания!

Кроме того, все кавычки, которые содержатся в команде, также удаляются перед разбором.

Как указать команду запуска

Команду можно указать в конфигурационной утилите в поле Startup command

Команда в конфигурационной утилите

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

Команда запуска

Примечание: подробнее о параметрах командной строки можно прочитать на странице параметры запуска.

Тип команды

Команды бывают четырех типов:

Команда типа ApplInit вызывается из метода Application::Startup до инициализации приложения, базы данных, системы infolog и до выполнения проверки валидности базовых таблиц. См. Application::Startup.

Команда типа ApplRun вызывается в самом конце метода Application::Startup.

Команда типа InfoInit вызывается из метода Info::Startup до установки системы документооброта, до обработки параметров пользователя, до обработки CheckList'а. См. Info::Startup.

Команда типа InfoRun вызывается в самом конце метода Info::Startup

Порядок событий при запуске

Список команд

Команда Параметр С версии Тип Автовыход
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

 

Пример использования:

Пример использования команды AOTImport в конфигурационной утилите

или в командной строке:
"-startupcmd=AOTImport D:\My Documents\AOT-Objects.xpo"

Импортирует объекты в AOT из указанного файла. После импорта компиляция не выполняется. Поэтому если вы изменяете или импортируете типы, макросы или классы, то, возможно, дополнительно нужно будет сделать принудительную перекомпиляцию.

В в методе SysStartupCmdAOTImport::infoRun() есть закомментированные строки. Если их раскомментировать, то можно заставить эту команду импортировать метки, а также управлять некоторыми параметрами импорта.

Примечание: Помните, что знаки подчеркивания в команде и в параметре команды преобразуются в пробелы. Поэтому не используйте знаки подчеркивания в имени файла.

Стоит немного модифицировать данную команду или сделать свою на основе этой. Было бы гораздо полезнее, чтобы выполнялся импорт, полная перекомпиляция и выход из Аксапты. Тогда данную команду можно выполнять, например, по ночам. Таким образом можно выполнять, например, синхронизацию приложения.


ApplUpgrade

Существует: с версии 3.0 и выше
Тип: ApplInit

Пример использования:

Пример использования команды ApplUpgrade в конфигурационной утилите

или в командной строке
-startupcmd=ApplUpgrade

Эта команда информирует систему, что апгрейд завершен. В результате, система при запуске не переходит в режим конфигурирования и не открывает Upgrade CheckList.

 


AutoRun xmlFile[,BasePath]

Существует: с версии 3.0 SP6 и выше
Тип: InfoRun

Пример использования:

Пример использования команды AutoRun в конфигурационной утилите

или в командной строке
"-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

Пример использования:

Пример использования команды Batch в конфигурационной утилите

или в командной строке
-startupcmd=Batch

Команда запускает Аксапту в режиме сервера и исполняет Batch-пакеты.

Команда эквивалентна пункту меню Basic \ Periodic \ Batch \ Processing (Axapta 3.0) или Разное \ Пакет \ Режим сервера (Аксапта 2.5).


BMClient

Существует: в версии 2.5, в версии 3.0 уже отсутствует.
Тип: InfoInit

Пример использования:

Пример использования команды BMClient в конфигурационной утилите

или в командной строке
-startupcmd=BMClient

Команда запускает Аксапту в режиме клиента для теста производительности. Подробнее см. документацию о Benchmark Test.


CompileAll[ +|-]

Существует: с версии 2.5 SP2 и выше
Начиная с версии 3.0 SP6 понимает параметры + или -
Тип: InfoRun

Пример использования:

Пример использования команды compileAll в конфигурационной утилите

или в командной строке
-startupcmd=compileAll

Команда запускает Аксапту, делает полную перекомпиляцию и закрывает Аксапту.

Для команды можно задать необязательный параметр, который определяет, будут ли обновляться перекрестные ссылки при компиляции. Возможные значения параметра + или -:

compileAll_+ система будет обновлять перекрестные ссылки при компиляции
compileAll_- система НЕ будет обновлять перекрестные ссылки при компиляции
compileAll

обновление перекрестных ссылок зависит от текущих параметров пользователя. См. скриншот:

Обновлять перекрестные ссылки в параметрах пользователя

Полезно использовать данную команду с указанием полного имени и пароля пользователя. См. параметры запуска.


Exit

Существует: с версии 2.5 SP2 и выше
Тип: InfoRun

Пример использования:

Пример использования команды Exit в конфигурационной утилите

или в командной строке
-startupcmd=Exit

Команда закрывает Аксапту после исполнения всех загрузочных процедур. Т.е. сначала выполняются все проверки и инициализации запуска, затем команда закрывает Аксапту.

Я не очень понимаю зачем нужна эта команда. Сейчас эта команда позволяет выполнить первый запуск Аксапты. Во время первого запуска выполняются начальные действия и копируются необходимые файлы с сервера. Но дело в том, что копирование все равно нельзя выполнить без пользователя, поскольку он должен ответить на вопросы и нажать кнопку подтверждения.

Эта команда была бы полезна, если бы можно было бы указывать несколько команд подряд. Сейчас пока нельзя. Может эту команду зарезервировали на будущее? Сейчас несколько команд можно выполнить при помощи одной команды autoRun.


LoadLicense LicenseFile

Существует: с версии 3.0 SP6 и выше
Тип: InfoRun

Пример использования:

Пример использования команды LoadLicens в конфигурационной утилите

или в командной строке
"-startupcmd=LoadLicense c:\axapta30\AxCodes.4550142.txt"

Загружает в систему новый лицензионный файл. После загрузки синхронизация с БД не выполняется. После загрузки новой лицензии, приложение закрывается без синхронизации таблиц.


SetBuildNo BuildStr

Существует: с версии 2.5 и выше
Тип: ApplInit

Пример использования:

Пример использования команды SetBuildNo в конфигурационной утилите

или в командной строке
"-startupcmd=SetBuildNo MyBuild"

Команда изменяет текст, который соответствует номеру версии, и записывает информацию о изменении в log. Номер версии можно посмотреть при помощи пункта меню ? \ About Axapta.

Окно About Axapta с номером версии.

После выполнения команды Аксапта закрывается.


Synchronize

Существует: с версии 2.5 и выше
Тип: ApplInit

Пример использования:

Пример использования команды Synchronize в конфигурационной утилите

или в командной строке
-startupcmd=Synchronize

Выполняет синхронизацию таблиц, после чего Аксапта закрывается.


UpdateBuildNo

Существует: с версии 2.5 и выше
Тип: ApplInit

Пример использования:

Пример использования команды UpdateBuildNo в конфигурационной утилите

или в командной строке
-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, Орлёнок Евгений