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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.09.2009, 08:17   #1  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Как определить fieldId в relation расширенного типа
Доброго всем времени суток. Подскажите как определить fieldId в releation'е расширенного типа. DictRelation содержит только tableid а fieldid ни как не могу найти. Поэтому приходится перебирать все поля таблицы чтобы определить поле с таким типом. Мне кажется это немного коряво, моэет есть более простой способ?
Старый 10.09.2009, 08:35   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Лучше расскажите, "как вы дошли до жизни такой" т.е. с чего возникла задача программно разбирать relation на EDT? Может, исходную задачу можно решить иначе?..
Старый 10.09.2009, 08:39   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от IvanS Посмотреть сообщение
Доброго всем времени суток. Подскажите как определить fieldId в releation'е расширенного типа. DictRelation содержит только tableid а fieldid ни как не могу найти. Поэтому приходится перебирать все поля таблицы чтобы определить поле с таким типом. Мне кажется это немного коряво, моэет есть более простой способ?
Примерно так:

X++:
//EVO
static void EDT_Relation(Args _args)
{
    DictRelation    dr ;
    DictType        dt;
    ;

    dt = new DictType(typeId2ExtendedTypeId(typeid(CustAccount)));

    dr = dt.relationObject(1);

    info(strFmt("TableId: %1 FieldId: %2", dr.lineTableValue(1), dr.lineExternTableValue(1)));
}
За это сообщение автора поблагодарили: IvanS (1).
Старый 10.09.2009, 08:43   #4  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Примерно так:

X++:
//EVO
static void EDT_Relation(Args _args)
{
    DictRelation    dr ;
    DictType        dt;
    ;

    dt = new DictType(typeId2ExtendedTypeId(typeid(CustAccount)));

    dr = dt.relationObject(1);

    info(strFmt("TableId: %1 FieldId: %2", dr.lineTableValue(1), dr.lineExternTableValue(1)));
}
Дак метод lineExternTableValue(1) имеет тип TableId разве он возвращает код поля?
Старый 10.09.2009, 08:47   #5  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Хотя так написал так же все работает нормально Пасибо
Старый 10.09.2009, 08:48   #6  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от IvanS Посмотреть сообщение
Дак метод lineExternTableValue(1) имеет тип TableId разве он возвращает код поля?
Это вы где увидели? Насколько я вижу, оба метода возвращают int
(Ax40sp2)
Старый 10.09.2009, 08:50   #7  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
А еще вопрос в этом же направлении как можно быстро проверить есть ли поле в таблице по названию или нет без перебора?
Старый 10.09.2009, 09:05   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от IvanS Посмотреть сообщение
А еще вопрос в этом же направлении как можно быстро проверить есть ли поле в таблице по названию или нет без перебора?
Можно, вот один из примеров

X++:
if (new DictTable(tablenum(InventTable)).fieldName2Id("ItemId"))
{
    info("The field exists");
}
Можно также через TreeNode, можно ещё через псевдо-таблицу UtilElements;

Но, расскажите, что вы такое интересное делаете?
Старый 10.09.2009, 09:34   #9  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от DSPIC Посмотреть сообщение

Но, расскажите, что вы такое интересное делаете?
)))) Да вот издеваются тут надо мной идет крутая преднастройка. Дак тут в полях используются коды таблиц, в которых выбираются поля в зависимости от выбранной ранее таблицы, плюс еще идет ограничение на эти поля, они должны ссылаться на поле в другой таблицы. а когда и это выбирается нужно показывать данные по этим выбранным полям из таблицы на которую ссылается поле по типу. И последний мой вопрос был связан с тем что к этим полям которые отображаются нужно выдавать описание. Но как вы понимаете оно может иметь имя не только Name, но еще description или txt. Вот я проверяю это. Иначе пишу что нужно сделатьметод на выбранный таблице. Вот в кратце проектик

Последний раз редактировалось IvanS; 10.09.2009 в 09:37.
Старый 10.09.2009, 09:34   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IvanS Посмотреть сообщение
А еще вопрос в этом же направлении как можно быстро проверить есть ли поле в таблице по названию или нет без перебора?
Можно обойтись встроенной функцией ядра:
X++:
if (fieldname2id(tablenum(MyTable), 'SupposedFieldName'))
    // поле существует
За это сообщение автора поблагодарили: IvanS (1), alex55 (1).
Старый 10.09.2009, 09:49   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IvanS Посмотреть сообщение
тут в полях используются коды таблиц, в которых выбираются поля в зависимости от выбранной ранее таблицы, плюс еще идет ограничение на эти поля, они должны ссылаться на поле в другой таблицы. а когда и это выбирается нужно показывать данные по этим выбранным полям из таблицы на которую ссылается поле по типу.
Э... Есть ведь штатный подход к решению таких задач: поле с кодом (строка) + поле с типом ссылки в первом поле (enum), как в журналах ГК, как в номенклатурных журналах, как в InventTrans, как еще в фиговой туче мест в системе. Или я чего-то непонял, и у вас идет косвенная ссылка из первой таблицы на третью через промежуточную вторую, идентификатор которой задается в поле первой таблицы? Зачем это все?..
Старый 10.09.2009, 14:42   #12  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
IvanS, описание Ваше напоминает попытку соорудить на MorphX где-то и для каких-то целей некий универсальный аналог 1С-овского субконто или аналитики ГК аля ГАЛАКТИКА
Оно ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 11.09.2009, 09:47   #13  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
IvanS, описание Ваше напоминает попытку соорудить на MorphX где-то и для каких-то целей некий универсальный аналог 1С-овского субконто или аналитики ГК аля ГАЛАКТИКА
Оно ?
Нет совсем не то
может сможете дать ответ на последующий вопрос?
Строковое выражение простейших операций в действие
Теги
edt, extended data type, fieldid, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
msdynamicsax: Upgrading a database from Ax 4.0 SP1 to Ax 2009 Blog bot DAX Blogs 1 13.08.2008 14:02
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
Как программно определить поля с выбранными галками (печать под итогов)? miaa DAX: Программирование 1 15.09.2006 10:00
Как получить имя типа расширенного типа velk DAX: Программирование 9 03.08.2006 14:17
Нет расширенного типа данных Red Stranger DAX: Программирование 3 24.05.2005 17:23
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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