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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2008, 18:57   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Значение по умолчанию параметра типа EDT c array elements либо просто массива
Ребята, очередной вопрос из разряда: ламер хочет всё и сразу, поэтому не обессудте.

Во время написания парм метода для поля, которое базируется на EDT real типа с количеством ArrayElements равным двум, столкнулся с проблемой присвоения значений по умолчанию. 0, равно как и Null в качестве значения по умолчанию метод не принимает. Вспомнил, что есть известное EDT Dimensions с несколькими ArrayElements. От рациональности реализации парм-метода для поля, которое базируеццо на эту Идетешку просто офигел. При передаче параметра вызывается статический метод(на какой таблице уже не помню) и возвращает неинициализированную переменную этого же типа. Ну что-то на подобии

Хедер парма:
X++:
public Dimension parmDimesion(Dimension _dim =SomeTable::emptyDim())
функция таблицы КакоетоТабличко:

X++:
public static Dimension emptyDim()
{
    Dimension dim;
    ;
    return dim;
}
Выглядит дико, но хотя бы работает. Что интересно, такой трюк не проходит с массивными EDT, которые базируются на числовые базовые типы(компиль ругается на несовместимость типов, хотя это, конечно же, бред).

Так же усложняет ситуацию то, что параметр по умолчанию может быть лишь один, поэтому такой трюк не пройдёт:
X++:
public Dimension parmDimesion(real x=0, y=0)
Опять таки, можно использовать в качестве параметра обьект типа лист, рек или контейнер, но таким образом в метод можно будет передать какое угодно количество параметров и хоть внутри самого парма можно будет устроить проверку, реализация явно получится через одно место.

Конечно можно отказаться от использования массивного поля и разделить его релизацию в 2 отдельных поля, но это так же не выход. Может кто-нибудь из гуру сталкивался с такой проблемой, будет очень интересно узнать есть ли всё-таки для неё вразумительный солюшн. Зарание спасибо.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 18.02.2008 в 19:10.
Старый 18.02.2008, 19:02   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Про параметры - их может быть много
Для каждого надо указывать тип данных
Старый 18.02.2008, 19:14   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Про параметры - их может быть много
Для каждого надо указывать тип данных
Нет слов, одни выражения. Вот это я тупица! Громадное спасибо)))
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 15:33   #4  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Не понял, зачем городить огород с инициализацией в сигнатуре метода. Можно "старым дедовским способом":

X++:
class MyClass
{
    Dimension dim;
}
X++:
public Dimension parmDimesion(Dimension _dim = dim)
Инициализация замечательно отрабатывается ядром.
Старый 20.02.2008, 15:48   #5  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от mau Посмотреть сообщение
Не понял, зачем городить огород с инициализацией в сигнатуре метода. Можно "старым дедовским способом":

X++:
class MyClass
{
    Dimension dim;
}
X++:
public Dimension parmDimesion(Dimension _dim = dim)
Инициализация замечательно отрабатывается ядром.
А в данном примере вы параметр не в сигнатуре инициализируете?))) В любом случае, этот способ ничем не отличается от преведённого мной, за исключением того, что по всей видимости в вашем способе переменная обьявляется в декларейшене этого же класса, а в моём её значение возвращается статической функцией на родной таблице(как в общем-то это и реализовано в стандартном функционале). Так вот, повторюсь, не работает этот способ с ЭДТ, которые базируются на числовой тип, строковые - да, а числовые - нет. с Dimension трюк катит ибо этот EDT строкового типа.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 15:58   #6  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Проверил на Ax 3.0 SP3 KR1 - работает.

Параметр инициализируется не в сигнатуре, а при создании экземпляра класса. В сигнатуде он определяется по-умолчанию. Вещи разные, на мой взгляд. Если вы считаете ваш подход эстетически выигрышным - ок.
Успехов.

PS. Что такое "родная" табличка для EDT c arrayElements? ;-)
Старый 20.02.2008, 16:05   #7  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от mau Посмотреть сообщение
Проверил на Ax 3.0 SP3 KR1 - работает.

Параметр инициализируется не в сигнатуре, а при создании экземпляра класса. В сигнатуде он определяется по-умолчанию. Вещи разные, на мой взгляд. Если вы считаете ваш подход эстетически выигрышным - ок.
Успехов.

PS. Что такое "родная" табличка для EDT c arrayElements? ;-)
А кто говорил, что таблица родная для EDT? Если вам нравиться выдёргивать отдельные контексты из моих сообщений - пожалуйста. Хотя, по-момему в изначальном посте всё ясно сказано:
Цитата:
Во время написания парм метода для поля, которое базируется на EDT real типа с количеством ArrayElements
Так что могли бы и не ерничать.
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 16:07   #8  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от mau Посмотреть сообщение
PS. Что такое "родная" табличка для EDT c arrayElements? ;-)
Я так понял, что автор имел ввиду ту табличку на которую настроены relations данного EDT.
Старый 20.02.2008, 16:10   #9  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
С типом real? В контексте аксапты, оригинально.
Старый 20.02.2008, 16:17   #10  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Цитата:
Сообщение от HorrR Посмотреть сообщение
Так что могли бы и не ерничать.
Вы бы огласили целиком решаемую задачу, не не отдельные технические трудности при её решении. Тогда ответ был бы получен быстрее и точнее. Судя по другой ветке, вы руководствуетесь шаблонами решения другого языка и , скорее всего, скриптового. Не все стандартные шаблоны других языков будут работать в аксапте. В аксапте есть шаблоны решения типовых задач. Называется Best practice.

Так что, пожалуйста, опишите задачу.
Старый 20.02.2008, 16:22   #11  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от mau Посмотреть сообщение
С типом real? В контексте аксапты, оригинально.
Нда ужж. Чего-то и не подумал об этом :-)))

Цитата:
Сообщение от HorrR Посмотреть сообщение
Так вот, повторюсь, не работает этот способ с ЭДТ, которые базируются на числовой тип, строковые - да, а числовые - нет.
Проверил на Ax 4.0 sp1
Ошибку есть.
Содал новый EDT типа Real. Добавил в array к нему парочку элементов.
На новой табличке написал статический метод(аля метод emptyDimension на табличке Dimensions),который возвращает пустой EDT.
Создал джобик и попытался проинитить этим статическим методом переменную.
Ругается на несовместимость типов
За это сообщение автора поблагодарили: HorrR (1).
Старый 20.02.2008, 16:28   #12  
mau is offline
mau
Участник
 
34 / 24 (1) +++
Регистрация: 12.03.2003
Адрес: Москва
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Проверил на Ax 4.0 sp1
Ошибку есть.
Блин, тогда я пасс - под рукой 4-ки нет.
Грустно - опять придется парить мозг для обхода мелкого бага ядра.
За это сообщение автора поблагодарили: HorrR (1).
Старый 20.02.2008, 16:33   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Нда ужж. Чего-то и не подумал об этом :-)))



Проверил на Ax 4.0 sp1
Ошибку есть.
Содал новый EDT типа Real. Добавил в array к нему парочку элементов.
На новой табличке написал статический метод(аля метод emptyDimension на табличке Dimensions),который возвращает пустой EDT.
Создал джобик и попытался проинитить этим статическим методом переменную.
Ругается на несовместимость типов
Ха, так в том то и дело! Но если сделать так, как подсказал mau, то есть, что бы переменная инициализировалась в классе-обладателе метода, всё работает! Мистика! Не понятно в чём же разница? Ну, в любом случае спасибо вам обоим за участие, а особенно mau за действенный совет)
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 18:20   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Создал запрос - возможно, в след. версии исправят.
Но это очень незначительная фигня.
Старый 20.02.2008, 18:31   #15  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
А чем такой-то вариант не устраивает?

X++:
public ReaArraylDemo parmReaArraylDemo(ReaArraylDemo _reaArraylDemo = _reaArraylDemo)
{
    ;
    reaArraylDemo = _reaArraylDemo;

    return reaArraylDemo;
}
За это сообщение автора поблагодарили: HorrR (1).
Старый 20.02.2008, 19:15   #16  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Thumbs up
Цитата:
Сообщение от petr Посмотреть сообщение
А чем такой-то вариант не устраивает?

X++:
public ReaArraylDemo parmReaArraylDemo(ReaArraylDemo _reaArraylDemo = _reaArraylDemo)
{
    ;
    reaArraylDemo = _reaArraylDemo;
 
    return reaArraylDemo;
}
Бгг, гениально просто!!!
__________________
Axapta has seduced me deadly!
Старый 20.02.2008, 19:18   #17  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Создал запрос - возможно, в след. версии исправят.
Но это очень незначительная фигня.
Благодарю, общественность тебя не забудет)
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 20.02.2008 в 19:21.
Теги
ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
EDT как Array KingPeas DAX: Программирование 16 17.06.2008 10:40
Почему компилятор не позволяет объявлять переменные EDT типа SessionId? Morpheus DAX: Программирование 1 06.06.2007 11:23
Как при вводе новой записи установить значение поля по умолчанию Zman DAX: Программирование 3 17.01.2005 10:23
Значение по умолчанию в таблице bocman DAX: Программирование 4 15.08.2003 16:20
Фильтр по полю типа Enum, в котором чиловое значение? slava DAX: Программирование 1 08.05.2002 10:26
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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