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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2009, 14:50   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Статьи аналитик
Добрый день. Подскажите, пожалуйста, решение такой проблемы:

В описании класса пишу:
Dimension dimension;

Создаю диалог:
public Object dialog()
{
DialogRunbase dialog = super();
DialogField dialogBKNumber;
;

dialog.addGroup("Фильтры");
dialogBKNumber = dialog.addField(typeid(Dimension),"Статья БК","Выбор статьи БК");
dialogBKNumber.value(dimension);

return dialog;
}

В результате получаю на форме семь полей аналитик, а мне нужно только одно поле. Проблема в том, что Dimesion - это массив из семи аналитик. Как мне указать, что мне нужна конкретно 7-я аналитика в качестве типа dimension? Вариант Dimension[7] dimesion; не работает.

Спасибо.
Старый 27.01.2009, 14:58   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Создать для нужной аналитики свой ЕДТ-наследние от SysDim и прописать соответствющий релейшн к таблице Dimensions. В диалог подставлять этот ЕДТ.

X++:
DepartmentId extends SysDim
DepartmentId == Dimensions.Num
0 = Dimensions.Code
__________________
С уважением,
Олег.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 27.01.2009, 14:58   #3  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
нужно создать расшитенный тип со ссылкой на аналитику кот вам нужна или используйте функцию extendedTypeName2Id_RU


з.ы упс попередили)
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
За это сообщение автора поблагодарили: Silphidae (1).
Старый 27.01.2009, 15:16   #4  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
? вариант без создания отдельных EDT
Посмотрите тему финансовые аналитики в диалог

Там в обсуждении был пример job'а в котором программно скрывались 'ненужные' поля финансовых аналитик в диалоге:
X++:
static void jobDimensionFields(Args _args)
{
    Dialog              dialog              ;
    DialogField         dialogFieldDimension;
    FormStringControl   formStringControl   ;
    Counter             idx                 ;
    ;
    
    dialog = new Dialog() ;
    dialogFieldDimension = dialog.addField(typeId(Dimension));
 
    for( idx=2; idx<=Dimensions::numOfDimensions(); idx++ )
    {
        formStringControl = dialogFieldDimension.fieldControl(idx) ;
        formStringControl.visible( false ) ;
    }
 
    dialog.run() ;
}
За это сообщение автора поблагодарили: Silphidae (1).
Старый 27.01.2009, 15:55   #5  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Спасибо всем за помощь.
Извиняюсь, но мне непонятно, что значит строка в связях:
0 == Dimensions.DimensionCode
Почему 0? Объясните, пожалуйста.

Последний раз редактировалось Silphidae; 27.01.2009 в 16:41.
Старый 27.01.2009, 16:57   #6  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Извиняюсь, но мне непонятно, что значит строка в связях:
0 == Dimensions.DimensionCode
Почему 0? Объясните, пожалуйста.
Цитата:
Сообщение от oip
...
DepartmentId == Dimensions.Num
0 = Dimensions.Code
В основе поля таблицы Dimensions.DimensionCode лежит перечисление (base enum) SysDimension в котором 0 = SysDimension:: Department
В данном случае создана доп.связь (ограничение) типа 'Поле ссылки фиксировано' по таблице Dimensions с ограничением по полю Dimensions.DimensionCode = "Подразделение"

Если Вам необходим какой-либо другой вид аналитики, то смотрите числовое значение этого кода в enum SysDimension (например SysDimension::SomeValue = 10) и подставляете в связь вместо 0.

Последний раз редактировалось petergunn; 27.01.2009 в 17:22. Причина: орфография
Старый 27.01.2009, 17:13   #7  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Цитата:
Сообщение от petergunn Посмотреть сообщение
В основе поля таблицы Dimensions.DimensionCode лежит перечисление (base enum) SysDimension в котором 0 = SysDimension:: Department

Создана доп.связь (ограничение) типа 'Поле ссылки фиксировано' по таблице Dimensions с ограничением по полю Dimensions.DimensionCode = "Подразделение"
Спасибо, petergunn. Я примерно так и думал. Просто меня удивило, что при любом другом значении, кроме 0 - я получаю тоже самое "Подразделение" (Например, при 2 должно быть "Тип производства", если верить перечислению SysDimension ).
Старый 29.01.2009, 16:42   #8  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
DAX 4.0 SP2
Цитата:
Сообщение от Silphidae Посмотреть сообщение
...
Просто меня удивило, что при любом другом значении, кроме 0 - я получаю тоже самое "Подразделение" (Например, при 2 должно быть "Тип производства", если верить перечислению SysDimension ).

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

Цитата:
Сообщение от oip Посмотреть сообщение
Создать для нужной аналитики свой ЕДТ-наследние от SysDim и прописать соответствющий релейшн к таблице Dimensions. В диалог подставлять этот ЕДТ.

X++:
DepartmentId extends SysDim
DepartmentId == Dimensions.Num
0 = Dimensions.Code

Создал новый EDT, который должен был отображать штатную аналитику 'Центр затрат' (SysDimension::Center=1)
X++:
DimensionSysDemo extends SysDim
DimensionSysDemo == Dimensions.Num
1 = Dimensions.DimensionsCode

Однако на диалоге, в поле на основе созданного EDT DimensionSysDemo, в lookup действительно отображался список аналитик соответствующих типу 'Подразделение'. Причина этого в том что на EDT SysDim, взятого в качестве 'родителя', указана своя lookup форма (FormHelp=DimensionsLookup), в методе run() которой происходит определение значения переменной sysDimension на основании индекса массива поля с которого открывается lookup.

X++:
void run()
{
    ...
    callerControl = SysTableLookup::getCallerStringControl(element.args());
    ...
    callerFieldId = callerControl.dataField() ;

    sysDimension = Dimensions::arrayIdx2Code(fieldExt2Idx(callerFieldId));
    callerFieldId = fieldExt2Id(callerFieldId);

    if (!callerFieldId)
    {
        sysDimension = Dimensions::arrayIdx2Code(callerControl.arrayIndex());
    }
    ...
}

У созданного EDT DimensionSysDemo нет дополнительных array elements и преобразование Dimensions::arrayIdx2Code( <arrayIdx> ) давало 0 (SysDimension:: Department). Т.е. если наследование определенной аналитики идет от SysDim, то вне зависимости от указанных relations на новом EDT отображаться в lookup будет аналитика 'Подразделение', что и подтвердили слова Silphidae.

Наследование новых EDT от SysGroup (как родителя SysDim) избавляет от такого вида lookup. (работает штатная функциональность по отображению lookup на основе EDT relations )

В качестве следующей цели эксперимента стало обеспечение возможности форме DimensionsLookup (помимо работы с массивами) корректно отображать список аналитик для EDT унаследованных от SysDim и не являющихся массивом - для единобразия вида lookup отображающего аналитику (форма DimensionsLookup содержит дополнительные вкладки).

Суть внесенных модификаций в форму: для вызывающего control формы определить extended data type, в случае если EDT не является массивом (для них остается штатная логика) определить значение sysDimension на основе информации о relation с типом 'Поле ссылки фиксировано' на поле Dimensions.DimensionCode.

Вот что получилось в первом приближении (для включения дополнительной функциональности нужно в \Forms\DimensionsLookup\Methods\classDeclaration определить значение макроса dimensionsLookup(1) - в проекте значение =0 ).

P.S. В проект включил job и форму которую использовал для тестирования. Выгружено с приложения DAX 4.0 SP2 (application version: 4.0.2501.122):
Вложения
Тип файла: zip DimensionsLookup.zip (9.2 Кб, 118 просмотров)
За это сообщение автора поблагодарили: aao_p (1).
Старый 29.01.2009, 17:06   #9  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Большое спасибо, petergunn.
Очень доступное объяснение.
Тему можно закрыть.
Старый 02.11.2012, 10:05   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
В продолжение темы... Чтобы особо не заморачиваться, делаем следующее. Создаем EDT на основе SysGroup, Добавляем необходимые relations и ничего танцору не мешает.
__________________
// no comments
Теги
edt, extended data type, dimensions

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с отображением скл. аналитик ZVV DAX: Администрирование 22 09.01.2009 20:11
сопоставление по клиенту с учетом финансовых аналитик? Aquarius DAX: Функционал 3 20.12.2008 10:05
ALEG: Интересная статья про иерархию финансовых аналитик в Microsoft Dynamics AX 4.0 Blog bot DAX Blogs 0 09.11.2006 06:00
mazzy: Иерархия финансовых аналитик в Microsoft Dynamics AX 4.0 Blog bot DAX Blogs 0 28.10.2006 17:22
Добавление финансовых аналитик в Оракле.. MironovI DAX: Программирование 32 08.08.2006 13:02

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

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

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