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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.08.2012, 16:21   #1  
VBF is offline
VBF
Участник
Аватар для VBF
 
65 / 17 (1) ++
Регистрация: 19.05.2003
Адрес: Москва
Вывод display-массива на форму в Grid
Все привет

Вот понадобилось сделать Subj, судя по документации Use a display Method on a Form or Report

а именно вот этот пункт:
...
If the display method returns an array, set ArrayIndex to 0 to indicate that all array elements are to be shown in the control. If, for example, you set it to 2, only array element number two is shown.
...
это возможно.

Мне нужно массив, заполненный в дисплей-методе, вывести на грид

Я долго мучился, но что-то не получилось...
Никто не пробовал или может подскажет кто, как это реализовать. Очень не хочется писать отдельный метод для каждого элемента массива, если, судя по документации, можно как-то вывести весь массив.
Старый 15.08.2012, 17:00   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Сделайте дисплей-метод на таблице, который возвращает массив, включите его в группу полей и вытащите эту группу полей на форму.
Свойство ArrayIndex для контролов не работает.
__________________
Возможно сделать все. Вопрос времени
Старый 16.08.2012, 11:39   #3  
VBF is offline
VBF
Участник
Аватар для VBF
 
65 / 17 (1) ++
Регистрация: 19.05.2003
Адрес: Москва
Нет, это не работает, по крайней мере в 4-ке. Я это попробовал первым делом.
Не смотря на то, что метод имеет расширенный тип как массив из 4-х элементов типа int,
X++:
display RHRMChildAges cmpRateValueFromHRMParm(EmplTable _emplTable)
{
    RHRMChildAges           ret[4];
.....
    return ret;
}
в группе он отображается одной строкой. На форме то же самое, группа с одной строкой. Отображается это на форме одной колонкой с нулевым значением.
А вот поле DIMENSION в группе отображается как несколько элементов

Последний раз редактировалось VBF; 16.08.2012 в 11:43.
Старый 16.08.2012, 11:47   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Надо указывать именно возвращаемый тип массив

EDT RHRMChildAges не является массивом.
__________________
Axapta v.3.0 sp5 kr2
Старый 16.08.2012, 16:43   #5  
VBF is offline
VBF
Участник
Аватар для VBF
 
65 / 17 (1) ++
Регистрация: 19.05.2003
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
EDT RHRMChildAges не является массивом.
Согласен

Цитата:
Сообщение от AndyD Посмотреть сообщение
Надо указывать именно возвращаемый тип массив
Если можно, поподробнее, какого типа должен быть метод. Явного типа, описывающего массив в Аксе не существует. Имеется ввиду контейнер?

Что нужно указать в описании метода, можно пример?
Старый 16.08.2012, 17:05   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от VBF Посмотреть сообщение
Если можно, поподробнее, какого типа должен быть метод. Явного типа, описывающего массив в Аксе не существует. Имеется ввиду контейнер?

Что нужно указать в описании метода, можно пример?
Эм.

У EDT есть ветка Array Elements. Добавьте в нее элементы - получите EDT-массив (размерность - кол-во элементов в этой ветке + 1).

Смотрите тип Dimension в качестве примера
__________________
Axapta v.3.0 sp5 kr2
Старый 16.08.2012, 17:11   #7  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от VBF Посмотреть сообщение
А вот поле DIMENSION в группе отображается как несколько элементов
Может это потому, что оно типа массив.
Если в AOT найти EDT Dimension и развернуть в нем узел Array Elements, будут видны элементы массива.

Только я сейчас попробовал вывести на первой попавшейся таблице с полем Dimension его же, но как display метод на грид и увидел только первый элемент.
X++:
display Dimension dimensionasmethod()
{
    return this.Dimension;
}
AX2009
Старый 16.08.2012, 17:13   #8  
VBF is offline
VBF
Участник
Аватар для VBF
 
65 / 17 (1) ++
Регистрация: 19.05.2003
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
У EDT есть ветка Array Elements. Добавьте в нее элементы - получите EDT-массив (размерность - кол-во элементов в этой ветке + 1).

Смотрите тип Dimension в качестве примера

В таком случае EDT RHRMChildAges - массив. Все оформлено как нужно

X++:
 Microsoft Dynamics Integer: RHRMChildAges 
 USERTYPEVERSION
6
USERTYPE #RHRMChildAges
INT
PROPERTIES
Name #RHRMChildAges
Label #1 
ArrayLength #4
Extends #RHRMChildAge
Alignment #Right
ENDPROPERTIES
TYPEELEMENTS
TYPEELEMENT
PROPERTIES
Index #2
Label #2 
ENDPROPERTIES
TYPEREFERENCES
ENDTYPEREFERENCES
ENDTYPEELEMENT
TYPEELEMENT
PROPERTIES
Index #3
Label #3   
ENDPROPERTIES
TYPEREFERENCES
ENDTYPEREFERENCES
ENDTYPEELEMENT
TYPEELEMENT
PROPERTIES
Index #4
Label #
ENDPROPERTIES
TYPEREFERENCES
ENDTYPEREFERENCES
ENDTYPEELEMENT
ENDTYPEELEMENTS
TYPEREFERENCES
ENDTYPEREFERENCES
ENDUSERTYPE

Последний раз редактировалось VBF; 16.08.2012 в 18:32.
Старый 16.08.2012, 17:25   #9  
VBF is offline
VBF
Участник
Аватар для VBF
 
65 / 17 (1) ++
Регистрация: 19.05.2003
Адрес: Москва
Цитата:
Сообщение от Кирилл Посмотреть сообщение

Только я сейчас попробовал вывести на первой попавшейся таблице с полем Dimension его же, но как display метод на грид и увидел только первый элемент.
Вот и у меня закралось подозрение, что это работает только если выводить на грид массив из таблицы, а через метод не работает.
Старый 16.08.2012, 20:58   #10  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Хе... я ж перед тем как ответить специально проверил.
По факту - да, получается не работает. А у меня заработало, потому что я создал метод dimension() и поле Dimension. И когда я перетаскивал метод в группу полей - я не посмотрел, что у меня метод в группе полей чудесным образом "преобразовался" в поле. И поэтому все отработало.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Cathome (1).
Старый 17.08.2012, 08:12   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На самом деле возвращение масива (даже EDT-эшного) из метода в аксапте как-то недореализовано.
Например, нельзя использовать вот такой код:
X++:
sysDim dim1 = myTable.Dimension()[1];
Старый 21.08.2012, 17:23   #12  
kit22 is offline
kit22
Участник
 
30 / 12 (1) ++
Регистрация: 15.08.2012
X++:
display sysdim displayMy()
{
 return myTable.MyDimension[1];
}
Так работает возврат из EDT 1го элемента массива
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Добавление display-поля к runtime grid Hyper DAX: Программирование 3 02.11.2007 14:40
axaptapedia: Display method Blog bot DAX Blogs 0 29.08.2007 16:30
подсчет строк у несколких таблиц и вывод на grid braathe DAX: Программирование 1 23.03.2005 16:05
display() method on Grid Control DK DAX: Программирование 5 31.01.2003 22:09

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

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

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