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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2017, 15:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
i-neti: X++ in AX7: Статические члены класса. Часть 5
Источник: http://i-neti.ru/blog/397
==============

Теперь можно задавать переменные класса как статические. Семантика точно такая же, как в C#, а именно: все экземпляры класса смогут использовать такой элемент, и, если один класс установит значение, другой класс может получить его.

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

Пример:

подробнее



Источник: http://i-neti.ru/blog/397
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 08.05.2017, 09:29   #2  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Кстати кто что думает по поводу вот такого использования статических членов
https://docs.microsoft.com/en-us/dyn...-runbase-class
т.е. создается глобальная статическая переменная - ссылка на класс. далее создается handler на таблицу - который проверяет заполнена ли эта глобальная переменная и вызывает метод(кстати тут по моему у них опечатка - должно быть if (myrunningInstance)
X++:
if (runningInstance)
        {
            myRunningInstance.myArchiveUserLog(_sender as SysUserLog);
        }
т.е. сразу приходят куча сценариев на ум, когда SysUserLogCleanup_Post_run не выполняется(не зануляет глобальную переменную класса) к примеру в результате ошибки. получается для таблицы у нас остается висеть хендлер, который будет всегда исполняться.
причем это будет никак не поймать, ибо в новой сессии хендлера уже не будет
Старый 08.05.2017, 09:47   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Мне показалось, что singleton работает не в пределах сессии, а в пределах thread. Я пытался с его помощью передать параметры в отчет, так вот отчеты работают в другои потоке (возможно для запуска отчета создается новая сессия) и singleton у них будет свой, чистый.
С его помощью можно много чего реализовать, только понять, что присходит в сисетеме, будет все труднее.

Пример: есть таблица и мы хотим получить, что то типа -
X++:
void update()
{
    MyTable myTableOrig = this.orig();

    super();

    if (myTableOrig.MyField != this.MyField)
    {
        do something....
    }
}
Можно в pre update положить в singleton orig и в post update сделать сравнение и do something.

P.S. Extension подход только усложняет систему и ее поддержку.

Последний раз редактировалось raz; 08.05.2017 в 09:50.
Старый 08.05.2017, 12:27   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Семантика точно такая же, как в C#,
Семантика НЕ такая же как в c# - в x++ все статические поля компилируются в свойства обращающиеся к словарю таких переменных в зависимости от сессии.
За это сообщение автора поблагодарили: AlexSD (3).
Старый 08.05.2017, 23:06   #5  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от raz Посмотреть сообщение
Мне показалось, что singleton работает не в пределах сессии
А это разве singleton ?
Старый 08.05.2017, 23:40   #6  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
О, Макс, спасибо за статики в сессии. Пруф тут:

Цитата:
You declare static class members by using the static keyword. The static keyword instructs the system to create only one instance of the method, regardless of the number of times that you call new. This one instance is used throughout your session.
https://ax.help.dynamics.com/en/wiki/xpp-variables-and-data-types/
Старый 09.05.2017, 10:05   #7  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от skuull Посмотреть сообщение
А это разве singleton ?
А разве нет? За основу был взят такой код для передачи параметров в SSRS отчет, в отладчике было видно, что параметры в пределах одного thread передаются, но когда обращение было из отчета (data contract), то singleton был чист, при этом номер thread был другой.
Это легко проверить.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
i-neti: X++ in AX7: элементы с уровнями доступа private и public. Часть 4 Blog bot DAX Blogs 0 18.04.2017 13:11
i-neti: X++ в AX7: Определение типа может включать 80 знаков. Часть 3. Blog bot DAX Blogs 0 27.03.2017 11:11
i-neti: X++ в AX7: ключевые слова ”finally” и “using”. Часть 2. Blog bot DAX Blogs 0 20.03.2017 15:11
i-neti: Что нового в X++ в AX7? Часть 1: X++ в AX7: Ключевое слово "var". Blog bot DAX Blogs 5 09.03.2017 10:13
patrickmouwen: AX7 – My top 12 highlights Blog bot DAX Blogs 0 27.02.2016 13:11

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

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

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