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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.07.2014, 12:44   #1  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
? Вытащить DialgField из Dialog
Динамически создал Dialog, запихал во внутрь несколько DialogFields с типом NoYesCombo. Как после нажатия на кнопку вытащить значения?
Пробовал пробежаться по Count, но нигде не нашел.
Старый 15.07.2014, 12:47   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
когда поля создавали, можно их в переменные сохранить и потом использовать. подойдет?
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 15.07.2014, 12:56   #3  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
Несовсем. При создании DF, создаю строку и еще +тип. Потом на диалоге меняют тип, как хотят. Нужно после нажатии на кнопку, пробежаться по всем DF и потом запустить форму. Сейчас главное найти как пробежаться и где найти Count.
Старый 15.07.2014, 13:11   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Покажите код, которым создаются DialgFields.
Старый 16.07.2014, 03:58   #5  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
select firstonly common where common.RecId == _recId;
If (Common.RecId>0)
{
DF= _dialog.addField(typeid(NoYesCombo_RU), _LabelName);
DF.value(NoYes::No);
}
Старый 16.07.2014, 08:24   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ну так переменная DF уже содержит ваш контрол. Зачем вам его заново получать? Пользуйтесь им.

Если таких DF несколько, то можно их в список сохранить...
За это сообщение автора поблагодарили: mazzy (2).
Старый 16.07.2014, 08:39   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от yuriy_64 Посмотреть сообщение
If (Common.RecId>0)
никогда. НИКОГДА! НЕ проверяйте recID на > 0!!!!
только на равенство или неравенство нулю.
поскольку recid в последних версиях могут содержать и отрицательные значения.

Правильный код:

If (Common.RecId != 0)

короткий код, который на некоторых билдах работал некорретно из-за ошибок в ядре:

If (Common.RecId)
За это сообщение автора поблагодарили: yuriy_64 (1).
Старый 16.07.2014, 09:28   #8  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
А примерчик? А то я, похоже, начинаю тупить.
Старый 16.07.2014, 09:44   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
X++:
NoYes value;

value = DF.Value();
Старый 16.07.2014, 09:46   #10  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
У меня DF может быть штук 5. Как по ним бегать?
Старый 16.07.2014, 09:47   #11  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
Вернее пробегать в цикле. И как определить кол-во этих DF&
Старый 16.07.2014, 10:00   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от yuriy_64 Посмотреть сообщение
Вернее пробегать в цикле. И как определить кол-во этих DF&
Сохраните их в список.

Как вы их отличать собираетесь? По _LabelName? По _recId?
Допустим по _LabelName:
X++:
Map mapDF = new Map(Types::String, Types::Class);
X++:
DF = _dialog.addField(typeid(NoYesCombo_RU), _LabelName);
mapDF.insert(_LabelName, DF); // добавляем очередной контрол в список

Обход списка:
X++:
MapEnumerator m;
X++:
m = mapDF.getEnumerator();
while (m.moveNext())
{
    LabelName = m.currentKey();
    DF = m.currentValue();
}
Старый 16.07.2014, 10:17   #13  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
никогда. НИКОГДА! НЕ проверяйте recID на > 0!
За исключением случаев, когда recId используется для аггрегации. Тогда можно. Например
X++:
select count(Recid) from myTable; 
if (myTable.Recid>0)
...
Цитата:
Сообщение от mazzy Посмотреть сообщение
recid в последних версиях могут содержать и отрицательные значения.
Не только в "последних", а как минимум с 3.0, то есть как минимум с 2002 года. Версию 2.5 не видел.
За это сообщение автора поблагодарили: mazzy (2).
Старый 16.07.2014, 10:26   #14  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
Спасибо, вроде как работает. А почему нужно создавать второй список? Я уже заметил, что ни Items, ничего подобного при создании диалога нет. Столько времени потерял. Ядолгое время работал на Дельфи. Там как то логичнее. Еще раз спасибо.
Старый 16.07.2014, 10:34   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от yuriy_64 Посмотреть сообщение
Спасибо, вроде как работает. А почему нужно создавать второй список? Я уже заметил, что ни Items, ничего подобного при создании диалога нет. Столько времени потерял. Ядолгое время работал на Дельфи. Там как то логичнее. Еще раз спасибо.
Реализация класса Dialog - открыта. Можете найти его в списке классов и сами посмотреть как там что внутри устроено.

Собственный список обходить проще, потому-что там только нужные элементы. На диалоге же в общем случае могут присутствовать другие контролы, которые будут только мешаться.
Старый 16.07.2014, 11:37   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если таких DF несколько, то можно их в список сохранить...
я бы в массив положил. или в [] или в array().
Старый 16.07.2014, 13:59   #17  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Если интересуют не столько контролы, сколько их значения, то можно обойтись без хранения своего списка:
X++:
MapEnumerator   me;
    anytype         value; 
    ;    
    me   = Map::create(_dialog.packValues()).getEnumerator();
    while (me.moveNext())
    {
        [value] = me.currentValue();
        info(strfmt("%1", value));
    }
__________________
Старый 16.07.2014, 14:17   #18  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
У меня такое ощущение, что ТС не знает о существовании макросов и не знает как их применять в особенности для RunBase-классов.
Я про #CurrentVersion и #CurrentList.
И почему-то никто про это не вспомнил, все принялись изобретать велосипед.
__________________
// no comments
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (-2).
Старый 16.07.2014, 15:20   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от dech Посмотреть сообщение
И почему-то никто про это не вспомнил, все принялись изобретать велосипед.
Диалог ТС создает динамически, и перечень контролов у него судя по вопросам тоже формируется динамически.
Макросы же, о которых вы вспомнили, вообще при сериализации уже полученных данных используются а не для взаимодействия с элементами управления.
За это сообщение автора поблагодарили: Ruff (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axtadka: Adding a field on dialog by addfield() method, when the type of EDT is known at run time, in Dynamics AX 2009 Blog bot DAX Blogs 0 17.11.2012 11:12
Malaysia: Creating a dialog Blog bot DAX Blogs 0 07.11.2012 17:11
ax-erp: How to use default dimensions as Dialog fields in dialogs [Dynamics AX 2012] Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to Enable/Disable fields in a dialog Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to override the event methods on dialog controls? Blog bot DAX Blogs 0 18.09.2012 18:11

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

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

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