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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.06.2022, 12:38   #1  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
isAOS vs isRunningOnServer
А кто-то может рассказать, чем отличается
X++:
xGlobal::clientKind() == ClientType::Server
из global.isRunningOnServer()
от
X++:
xGlobal::isAOS()
из global.isAOS()
на разных версиях аксапты (3-2012) ?
Старый 14.06.2022, 14:06   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
по-моему, isAOS() - это какой-то атавизм со времен трешки, когда можно было запускать толстого клиента без АОСа.
Старый 14.06.2022, 17:42   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Я считал, что
X++:
ClientType::Server
это признак выполнения задачи самим сервером, без клиентской сессии. Например, работа пакетника, работы в момент старта АОС и т.
п.
А
X++:
xGlobal::isAOS()
признак что выполняемся на сервере, а не на клиенте. А вот кто там выполняет (сам сервер, клиентская сессия, отдельный поток и т. п.) уже дальше нужно разбираться при помощи xGlobal::clientKind().

Еще до Ax3 включительно было перечисление AOSClientMode (например из метода aosClientMode класса Session), но с DAX4 там всегда возвращается, что работает тонкий клиент.

Может что-то считаю ошибочно, но вроде такой подход помогал не запутаться.
Старый 14.06.2022, 17:49   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Хотя вот только что увидел ,что для определения того, что работаем не на клиенте, а на сервере используется вполне себе:
X++:
xGlobal::clientKind() == ClientType::Server
Так что предположение о том, что это работа самого сервера не подтверждается.

Видимо стоит иногда задуматься и пересмотреть привычки.
Старый 14.06.2022, 17:53   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А не, всё нормально.
Это зависит от того, откуда именно берем ClientType.
Если из
X++:
new Session().clientKind() == ClientType::Server;
то это проверка, что работает сам сервер.
А если из:
X++:
xGlobal::clientKind() == ClientType::Server;
то это проверка, что работаем на стороне сервера.

Что такое
X++:
xGlobal::isAOS()
тогда непонятно.

PS вообще использовать одну сущность для определения разных понятий было не очень хорошей идеей авторов Аксы.
Старый 15.06.2022, 07:46   #6  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Судя по перекрестным ссылкам isAos в 365ой(нашлось штук 5 ссылок, возможно в более младших версиях их больше) используется в качестве костыля и связано со спецификой работы итераторов - Нюансы класса SetIterator при вызове на клиенте/сервере

Примеры

X++:
    static SysDBInformation construct(boolean remotePossible = true)
    {
        SysDBInformation sysDBInformation;
        boolean loadRemote = false;
        ;


        if (isAOS())
        {
            if (xGlobal::clientKind() == ClientType::Client)
                if (remotePossible) loadRemote = true;
        }
X++:
CustVendOpenTransEngine_RU\createMapCVTrans_FactureJourAmount

            if (isAOS())
                //We work by AOs
                tmpMap = Map::create(factureCalcBalances.mapSettledAmounts().pack());
            else
                tmpMap = factureCalcBalances.mapSettledAmounts();
В теории можно пересоздавать мапы\сеты только в случае clientKind = Client.
__________________
Sergey Nefedov
Старый 18.06.2022, 00:25   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
я ж и говорю: атавизм с тех времен, когда еще была доступна двухзвенка, т.е. способ различать, есть в наличии АОС или нет. После 3.0 - не актуально.
куча перекрестных ссылок с кодом вида
X++:
if (isAOS() && clientKind() == ClientType::Client)
как бы намекают...

Последний раз редактировалось gl00mie; 18.06.2022 в 00:30.
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:00.