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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2019, 11:29   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как правильно? куда вставить действия при старте 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, но до запуска остальных сессий?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 31.01.2019 в 11:51.
За это сообщение автора поблагодарили: alex55 (1).
Старый 31.01.2019, 12:16   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от 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
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
2-я служебная сессия обслуживает пакеты (все пакетные сессии - дочерние к ней). Она всегда есть, даже если аос непакетный. При этом она свободна от многих описанных вами багов 1-й сессии. Попробуйте так.
Да, я этот эксперимент я делал.
насколько я понимаю, пакеты могут стартовать после пользовательских сессий, а могут не стартовать вообще, если в SysServerConfig уже есть текущий сервер и он не помечен галочкой пакетный.

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

Про глобальные переменные уже не помню. Надо пробовать. Но там однозначно все лучше чем с первой сессией, которая например по curExt() выдает пустую строку (даже не "dat" и соответственно не может ничего вставить в неглобальную табличку)
За это сообщение автора поблагодарили: mazzy (5), gl00mie (5).
Старый 31.01.2019, 16:30   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Можно гарантировать что 2-я сессия точно запустится до старта пакетов независимо от того помечен аос как пакетные или нет. Насчет клиентских сессий - похоже что да. Это можно проверить просто выводов в виндовый лог сообщения - посмотреть когда оно появляется до сообщения аоса о том что он стартовал или после.

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

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

Нажмите на изображение для увеличения
Название: xpp.PNG
Просмотров: 160
Размер:	30.5 Кб
ID:	12197  
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 13:00   #6  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 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   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 13:11   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Задача для SQL, я бы решал через SQL.
Нет, конечно.
Разбираться средствами SQL с содержимым полей типа container... Нет

К тому же рестор прода в тест может выполняться не только ночью. Но и по требованию консультантов.
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 14:03   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
пообедал и вспомнил, что не рассказал о стартап-команде autorun

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

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

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

но может кто-нибудь таки реализовал этот способ?
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 14:18   #10  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 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   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Задача стоить выполнить некий script перед запуском windows service.

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

пока мне кажется, что по-правильному эта штука должна быть внутри аксапты
и выполняться до запуска пользовательских сессий и пакетников.
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 14:56   #12  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 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   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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'ями и прочими кубернетиками
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 17:23   #14  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 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   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 31.01.2019 в 17:45.
Старый 31.01.2019, 19:30   #16  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение

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

Пока вы не предложите способ, работающий гарантировано, нахер ваши рассуждения о людях.
https://www.youtube.com/watch?v=zvEfaU0gQuU
Это кто еще хулиган хакать код запуска приложения для универсального программистского решения административной проблемы

Тема LIVE ссылок в копии она всем известная и понятная. И консультанту как заказчика действия, и исполнителю в поддержке. Там еще и SSRS и EP и AIF и... И все как-то привыкли решать это скриптом. На всех проектах. Уже много лет.

Я поддерживаю задачу как учебную, она интересная. Но абсолютно против такого подхода на живом проекте.
Старый 31.01.2019, 16:40   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ну ...
А что мешает вклинить такой код в new classFactory / Info
Вдруг помогет. Теоретически, они должны позже инициализироваться чем Application но до других сессий.
Старый 31.01.2019, 16:49   #18  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А там где сервисы AIF запускаются (метод servicesStartup в Application) уже есть что нужно?
По крайней мере транзакции там уже используются, да и AifInfoLog использует обычный infolog.
За это сообщение автора поблагодарили: mazzy (5).
Старый 31.01.2019, 18:10   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
и я забыл показать как выглядит servicesStartup в ax2012.
запишу сюда, чтобы вспомнить, когда через некоторое время сам набреду на эту ветку в поисках решения

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

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

__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2019, 18:49   #20  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 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;
}
Теги
как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 10:26.