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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2019, 11:29   #1  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Как правильно? куда вставить действия при старте AOS? ax2009, ax2012 и прочие версии
Disclaimer:
Обратите внимание, вопрос сформулирован "Как правильно?"
На проекте задача уже решена. Поэтому, пожалуйста, не уводите тему в сторону "быстрых и грязных решений".

Задача:
= Обновить параметры интеграции с 1С
= Обновить url в references внешних вебсервисов
= Обновить параметры после рестора рабочей базы в текстовую

или другие подобные действия, которые надо выполнить один раз после останова всех кластерных АОСов, но до старта обычных сессий.

Вопросы:
Куда лучше вставить вызов таких действий?
Какими условиями стоит обставить вызов?
Какие условия стоит учесть при вызове таких действий?

См. также:
ClientType::Server
Является ли текущее приложение рабочим или тестовым


Что получилось исследовать на ax2009:
  • Application.startup() не вызывается при старте AOS. только workTread, Client и, возможно, бизнес-коннектор
  • Application.new() вызывается и при старте AOS (isServer() == true в этот момент).
    • Но в этот момент еще не определены глобальные переменные appl, infolog, classFactory. Соответственно, не работают транзакции, нет глобальных кэшей, не работают infolog-сообщения (что запрещает использование огромной кучи стандартного функционала).
    • А самое главное, в этот момент еще не заполнены таблицы SysClientSessions, SysServerSessions, SysClientServerSessions, а методы класса Session возвращают левую дичь. например, xSession.serverId возвращает идентификатор, которого нет в SysServerConfig.

получается, что в Application.new() вставится можно. Но в этом месте аксапта еще не инициализирована, поэтому в этом месте слишком много ограничений.

Альтернативный вариант:
предположим, мы решили использовать lazy-инициализацию
и дожидаемся пока кто-то запустит неинициализированный функционал,
и в момент запуска проверяем была ли выполнена инициализация
и инициализируем если нужно.

но инициализация может выполняться достаточно долго (несколько секунд при старте АОС роли не играет, а несколько секунд ожидания при работе клиентов - критично)
поэтому с lazy-инициализацией с огромной вероятностью получим гонку за ресурсом.
следовательно надо будет устраивать какой-то мьютекс и решать прочие параллельные проблемы.

Но вдруг кто-то и так решал?
Плюсы-минусы?


В общем,
Куда вставить свой код инициализации/обновления так, чтобы он сработал после инициализации AOS, но до запуска остальных сессий?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 31.01.2019 в 11:51.
Старый 31.01.2019, 12:16   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,124 / 1872 (69) ++++++++
Регистрация: 12.10.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
Что получилось исследовать на ax2009:
...
  • Application.new() вызывается и при старте AOS (isServer() == true в этот момент).
    • Но в этот момент еще не определены глобальные переменные appl, infolog, classFactory. Соответственно, не работают транзакции, нет глобальных кэшей, не работают infolog-сообщения (что запрещает использование огромной кучи стандартного функционала).
    • А самое главное, в этот момент еще не заполнены таблицы SysClientSessions, SysServerSessions, SysClientServerSessions, а методы класса Session возвращают левую дичь. например, xSession.serverId возвращает идентификатор, которого нет в SysServerConfig.

получается, что в Application.new() вставится можно. Но в этом месте аксапта еще не инициализирована, поэтому в этом месте слишком много ограничений.

В общем,
Куда вставить свой код инициализации/обновления так, чтобы он сработал после инициализации AOS, но до запуска остальных сессий?
В 2009-й при поиске пакетов роняющих аос я делал логирование старта аоса.
В Application.new в конце писал код

X++:
if (session.clientKind() == ClientType::Server && session.sessionId() == 2)
{
    ... // мой код
}
2-я служебная сессия обслуживает пакеты (все пакетные сессии - дочерние к ней). Она всегда есть, даже если аос непакетный. При этом она свободна от многих описанных вами багов 1-й сессии. Попробуйте так.
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (3).
Старый 31.01.2019, 12:32   #3  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
2-я служебная сессия обслуживает пакеты (все пакетные сессии - дочерние к ней). Она всегда есть, даже если аос непакетный. При этом она свободна от многих описанных вами багов 1-й сессии. Попробуйте так.
Да, я этот эксперимент я делал.
насколько я понимаю, пакеты могут стартовать после пользовательских сессий, а могут не стартовать вообще, если в SysServerConfig уже есть текущий сервер и он не помечен галочкой пакетный.

можно ли гарантировать, что 2-я служебная сессия гарантировано запускается до пользовательских?
можно ли гарантировать, что на момент запуска 2-й служебной сессии существуют гломальные переменные appl, infolog, classFactory, кэши, транзакции и прочие системные механизмы?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 12:40   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,124 / 1872 (69) ++++++++
Регистрация: 12.10.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
можно ли гарантировать, что 2-я служебная сессия гарантировано запускается до пользовательских?
можно ли гарантировать, что на момент запуска 2-й служебной сессии существуют гломальные переменные appl, infolog, classFactory, кэши, транзакции и прочие системные механизмы?
Можно гарантировать что 2-я сессия точно запустится до старта пакетов независимо от того помечен аос как пакетные или нет. Насчет клиентских сессий - похоже что да. Это можно проверить просто выводов в виндовый лог сообщения - посмотреть когда оно появляется до сообщения аоса о том что он стартовал или после.

Про глобальные переменные уже не помню. Надо пробовать. Но там однозначно все лучше чем с первой сессией, которая например по curExt() выдает пустую строку (даже не "dat" и соответственно не может ничего вставить в неглобальную табличку)
За это сообщение автора поблагодарили: mazzy (5).
Старый 31.01.2019, 13:00   #5  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
521 / 358 (13) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Возможно оффтоп но ...

Цитата:
= Обновить параметры интеграции с 1С
= Обновить url в references внешних вебсервисов
Подобные задачи решаем в Azure DevOps release pipeline. Когда обновляем AX, один из шагов это запуск классов в AX, которые обновляют то что мы хотим обновить при каждом релизе (веб сервисы передеплоит, обновить retail и тп). Так же есть класс который обновляет данные до последней версии. Например, если база версии 23, а релиз версии 25, он прогонит все x++ скрипты от версии 23 до 25.
Конечный итог - AX обновляется одинаково в QA/UAT/Prod и релиз сводится к нажатию кнопки и к проверке что все зеленое (что может сделать кто-то далекий от AX и кто не спит по ночам).

Для 2009 startup команды работают и можно дописать свои. Что-то типа -
Цитата:
ax32.exe -startupcmd=AOTImport_"C:\AX\Import\File.xpo"
Тоест задача сводится к добавлению новой startup команды ("ax32.exe -startupcmd=Refresh1C_"). Далее обе команды обарачиваем в PowerShell, добавляем туда все остальный шаги который обычно надо делать (например останов всех кластерных AOS, компиляция, бекап базы, перезапуск все AOS по окончанию и тп) и используем этот скрипт при каждом обновлении. Как бонус - обернуть в release pipeline.

Цитата:
= Обновить параметры после рестора рабочей базы в текстовую
Задача для SQL, я бы решал через SQL. Наверняка в прод крутится SQL job который бекапит базу каждую ночь куда-то. Можно такой же SQL job написать на тестовом SQL, который отресторит бекап и почистит данные.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
За это сообщение автора поблагодарили: mazzy (2).
Старый 31.01.2019, 13:08   #6  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Подобные задачи решаем в Azure DevOps release pipeline. Когда обновляем AX, один из шагов это запуск классов в AX, которые обновляют то что мы хотим обновить при каждом релизе (веб сервисы передеплоит, обновить retail и тп).
ну... release pipeline конечно да.

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

Если же на проекте настроен CI в каком-либо виде, то дожидаться старта АОС действительно не обязательно.

Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Для 2009 startup команды работают и можно дописать свои. Что-то типа -

Тоест задача сводится к добавлению новой startup команды ("ax32.exe -startupcmd=Refresh1C_"). Далее...
Да, это первое что приходит в голову. http://axapta.mazzy.ru/lib/startupcmd/

Беда в том, что startupcmd выполняется в application.startup()
который, в свою очередь не выполняется при старте АОС (см. первое сообщение в этой ветке)

ax32.exe - это уже поздно. хотелось бы вставиться в момент запуска ax32serv.exe
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 13:11   #7  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Задача для SQL, я бы решал через SQL.
Нет, конечно.
Разбираться средствами SQL с содержимым полей типа container... Нет

К тому же рестор прода в тест может выполняться не только ночью. Но и по требованию консультантов.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 14:03   #8  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
пообедал и вспомнил, что не рассказал о стартап-команде autorun

да, это первое что приходит в голову. особенно действие run.
да, команда autorun (как и остальные startup-команды) выполняется при запуске клиента ax32.exe и не выполняется при запуске сервера ax32serv.exe

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

получается какой-то хлипкий скрипт, завязанный на кучу событий и статусов, который легко сломать одним неловким движением администратора.
поэтому от варианта с autoRun отказались сразу.

но может кто-нибудь таки реализовал этот способ?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 14:18   #9  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
2,233 / 846 (33) +++++++
Регистрация: 10.10.2005
Адрес: Westlands
Если подняться на уровень выше то AOS это Windows service.
Задача стоить выполнить некий script перед запуском windows service.

Идеально оформить повторяемую задачу в виде новой windows service которая будет читать некий скрипт или файл параметров.

Настроить как dependencies между этой новой службой очистки и AOS.

Может выглядить overkill но архитектурно самое прямое решение.

Цитата:
Обновить параметры интеграции с 1С
= Обновить url в references внешних вебсервисов
= Обновить параметры после рестора рабочей базы в текстовую
За это сообщение автора поблагодарили: mazzy (2).
Старый 31.01.2019, 14:34   #10  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Задача стоить выполнить некий script перед запуском windows service.

Идеально оформить повторяемую задачу в виде новой windows service которая будет читать некий скрипт или файл параметров.
да.
но с дополнительными условиями:
= новая служба должна работать с полями типа контейнер (любят, блин, хранить данные в контейнерах)
= новые администраторы, которые будут рано или поздно придут, не должны сломать эту хитрую систему.

пока мне кажется, что по-правильному эта штука должна быть внутри аксапты
и выполняться до запуска пользовательских сессий и пакетников.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 14:56   #11  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
2,233 / 846 (33) +++++++
Регистрация: 10.10.2005
Адрес: Westlands
Пока вижу что сообщество пытается по кривому в Application.New

if (session.clientKind() == ClientType::Server && session.sessionId() == 1)
{

}

Еще бы я бы брал в расчет что код один на несколько AOS. И может быть одновременный/последовательный запуск.

Добавлю что в AX2012 те же number sequence уже не загружаются при старте приложения, то есть инициализация отличается от AX2009.

Ну и все же я бы посмотрел как с контейнерами работать на стороне SQL. Некомфортная зона для нас, да. Но это не значит что так не будет проще. Если все упирается в только контейнеры, то я бы помучился с T-SQL.
Старый 31.01.2019, 15:07   #12  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Пока вижу что сообщество пытается по кривому в Application.New
не то, чтобы "пытается".
многоуважаемые кроты не видят другого способа

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Еще бы я бы брал в расчет что код один на несколько AOS. И может быть одновременный/последовательный запуск.
обязательно берем в расчет.
https://www.youtube.com/watch?v=s44X6l-MgGY

Цитата:
Сообщение от ax_mct Посмотреть сообщение
то есть инициализация отличается от AX2009.
угу.

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Если все упирается в только контейнеры, то я бы помучился с T-SQL.
ax_mct, я ж два пункта написал.

расскажите, как хитрый скрипт сможет гарантировать что он сработает до клиентов и пакетников, и при этом его не сломают новые администраторы со своими скриптами, WMI'ями и прочими кубернетиками
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 16:30   #13  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Можно гарантировать что 2-я сессия точно запустится до старта пакетов независимо от того помечен аос как пакетные или нет. Насчет клиентских сессий - похоже что да. Это можно проверить просто выводов в виндовый лог сообщения - посмотреть когда оно появляется до сообщения аоса о том что он стартовал или после.

Про глобальные переменные уже не помню. Надо пробовать. Но там однозначно все лучше чем с первой сессией, которая например по curExt() выдает пустую строку (даже не "dat" и соответственно не может ничего вставить в неглобальную табличку)
Спасибо за красивую надежду. Но нет.
да, curext() заработал. но глобальные переменные еще не проинициализированы.

в общем, очень хочется какой-нибудь метод после инициализации, но до запуска остальных сессий.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 2
Размер:	46.2 Кб
ID:	12194   Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 1
Размер:	45.3 Кб
ID:	12195  

Нажмите на изображение для увеличения
Название: xpp.PNG
Просмотров: 4
Размер:	30.5 Кб
ID:	12197  
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 16:40   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,124 / 1872 (69) ++++++++
Регистрация: 12.10.2004
Ну ...
А что мешает вклинить такой код в new classFactory / Info
Вдруг помогет. Теоретически, они должны позже инициализироваться чем Application но до других сессий.
Старый 31.01.2019, 16:49   #15  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,763 / 931 (35) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А там где сервисы AIF запускаются (метод servicesStartup в Application) уже есть что нужно?
По крайней мере транзакции там уже используются, да и AifInfoLog использует обычный infolog.
За это сообщение автора поблагодарили: mazzy (5).
Старый 31.01.2019, 17:23   #16  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
2,233 / 846 (33) +++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
ax_mct, я ж два пункта написал.

расскажите, как хитрый скрипт сможет гарантировать что он сработает до клиентов и пакетников, и при этом его не сломают новые администраторы со своими скриптами, WMI'ями и прочими кубернетиками
Цитата:
Задача:
= Обновить параметры интеграции с 1С
= Обновить url в references внешних вебсервисов
= Обновить параметры после рестора рабочей базы в текстовую

или другие подобные действия, которые надо выполнить один раз после останова всех кластерных АОСов, но до старта обычных сессий.
Вопрос был как правильно, а не как удобней программисту AX.
Так вот правильно, с инженерной точки зрения. не лезть в код приложения, а использовать скрипт Power Shell/T-SQL.
Службы стоят, база ресторится, запускается скрипт сброса живых значений.
Идеально если скрипт рестора содержит также запуск этого скрипта. То есть часть скрипта копирования базы.

Понятно что X++ роднее чем T-SQL но в данном случае обратная ситуация той когда люди не знают X++ и используют T-SQL для бизнес-логики.
Здесь у нас задача сбросить/изменить значения в базе. Для базы, на уровне базы. Без бизнес-логики.

Помещать код в Application от кривых рук администраторов - не правильно.
Старый 31.01.2019, 17:43   #17  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Ну ...
А что мешает вклинить такой код в new classFactory / Info
Вдруг помогет. Теоретически, они должны позже инициализироваться чем Application но до других сессий.
бить по площадям, так сказать
не работает. а xClassFactory.new объявлен как final


Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А там где сервисы AIF запускаются (метод servicesStartup в Application) уже есть что нужно?
По крайней мере транзакции там уже используются, да и AifInfoLog использует обычный infolog.
servicesStartup - это 2012. но идея вполне здравая - посмотреть где инициализируется AIF и добавить свое туда же. Спасибо.

смотрю на инициализацию AIF в 2009 и в 2012 - громадные отличия в части инициализации. Может же майкрософт сделать, когда им это нужно.

значит, servicesStartup, а не startupServices, чтобы к остальным поближе. Как это мило.

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Вопрос был как правильно, а не как удобней программисту AX.
...скрипт рестора...
Скрипт рестора?! И каковы ваши гарантии, что администраторы будут запускать скрипт рестора, а не сделают рестор руками или сваяют свой скрипт?
Каковы ваши гарантии, что я сам не забуду о "скрипте рестора" через пару месяцев?

Пока вы не предложите способ, работающий гарантировано, нахер ваши рассуждения о людях.
https://www.youtube.com/watch?v=zvEfaU0gQuU
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 31.01.2019 в 17:45.
Старый 31.01.2019, 18:10   #18  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,869 / 3782 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
и я забыл показать как выглядит servicesStartup в ax2012.
запишу сюда, чтобы вспомнить, когда через некоторое время сам набреду на эту ветку в поисках решения

ключевой момент - посмотреть как инициализируется AIF и сделать также.
servicesStartup в ax2012 запускается только для 1 сессии АОС.
в этот момент еще не работает curext и, похоже, не заполнены таблицы SysClientSessions, SysServerSessions, SysClientServerSessions.

для ax2009 хорошего решения, похоже, нет. но будем искать.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 7
Размер:	41.0 Кб
ID:	12198   Нажмите на изображение для увеличения
Название: xpp.PNG
Просмотров: 4
Размер:	61.8 Кб
ID:	12199  

__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 31.01.2019, 18:49   #19  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,763 / 931 (35) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
SysClienSession для случаев ClientType::Server не создается. Наткнулся на это при попытке логировать вызовы BatchRun, хотел как раз пользоваться Session::getAOSInstance - возвращался пустой.
А вот SysServerSessions возможно есть (для BatchRun точно создается), для при логирования создал в Session метод без объединения с SysClienSession:
X++:
static server ServerId getAOSName()
{
    SysServerSessions           serverSessions;
    ;

    xSession                    currentSession = new xSession();
    SkipAOSValidationPermission skipAOS;
    ;

    skipAOS = new SkipAOSValidationPermission();
    skipAOS.assert();

    //BP deviation documented
    serverSessions.skipAosValidation(true);

    select firstOnly AOSId from serverSessions
        where serverSessions.ServerId   == currentSession.serverId();

    return serverSessions.AOSId;
}
Старый 31.01.2019, 19:06   #20  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,763 / 931 (35) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Для задачи
Цитата:
Обновить параметры после рестора рабочей базы в текстовую
может получиться беда.
На том же тесте могут быть новые поля, которых еще нет в рабочей (или наоборот). И если, вдруг, процедура будет обращаться к таким таблицам, то так как еще не засинхронизорованы таблицы, то возникнет ошибка.
Запустится ли тогда вообще AOS непонятно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax2012 r2: Как более правильно поменять компанию из под которой работает POS? MikeR DAX: Администрирование 2 22.07.2013 10:41
Предварительные выводы о переходе с AX2009 на AX2012 Pustik DAX: Функционал 24 30.10.2011 17:58
Ax2009 Workflow. Действия -> Просмотр журнала Poleax DAX: Программирование 2 25.05.2011 12:23
Ошибка установки AOS AX2009 на Win2008R2 miaa DAX: Администрирование 13 03.11.2010 15:21
Помогите с выбором версии SQL Server для Ax2009 Predator DAX: Администрирование 9 02.02.2010 21:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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