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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.08.2006, 12:54   #1  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Как получить имя типа расширенного типа
Как получить имя типа расширенного типа поля от которого создано поле таблицы....?
Старый 03.08.2006, 13:09   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Если я правильно понял вопрос
X++:
    DictField df = new DictField(tableNum(InventTable), fieldnum(InventTable, ItemId));
    DictType dt;
    ;
    if (df.typeId())
    {
        dt = new DictType(df.typeId());
        if (dt)
            info(dt.Name());
    }
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: qwertyx84 (1).
Старый 03.08.2006, 13:12   #3  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Да но например есть поле оно имеет тип RefRecId
этот тип порожден от RecId
так вот результатом этой функции будет RecID
а надо чтоб вернуло RefRecId....
Старый 03.08.2006, 13:13   #4  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Эта функция есть в классе проверки кодов RecId
но она возвращает лишь Самого первого родителя
Старый 03.08.2006, 13:16   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Ну вот была написана в своё время функция возвращающая тип поля из строковых имени таблицы и поля

Дописал пару строк
Код:
    FieldId getFieldId(str tableName, str fieldName)
    {
        FieldId         fieldId;
        extendedTypeId           _type; //наш EDT

        DictField       dictField;
        TableId         tableId;
        ;

        tableId     = new SysDictTable(tableName2Id(tableName)).id();
        dictField   = new DictField(tableid, fieldName2Id(tableId, fieldName));
        fieldId     = dictField.id();
        _type     = dictField.typeId(); //наш EDT

        return      fieldId;
     }
Вызов

Код:
DictTable_my   dt;
dt = new DictTable_my();
dt.getFieldId("SalesTable","SalesId");
вернул результат (смотрел в дебагере) 1577 что и есть SalesIdBase.

Дальше сам додумывай, что и как использовать

Смотри семейство классов Dict*
А вообще поиск по форуму иногда помогает помогает
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.08.2006, 13:25   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У класса DictType есть метод extend() - он возвращает предка для выбранного EDT. Т.е.
X++:
    DictField df = new DictField(tableNum(Address), fieldnum(Address, RefZipCode));
    DictType dt;
    ;
    if (df.typeId())
    {
        dt = new DictType(df.typeId());
        while (dt && dt.extend())
            dt = new DictType(dt.extend());
        if (dt)
            info(dt.Name());
    }
__________________
Axapta v.3.0 sp5 kr2
Старый 03.08.2006, 13:26   #7  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
2Velk
Вы запускали 1-й джоб от AndyD? Он вернул "ItemId", так? А ведь у ItemId есть еще и папа ItemIdBase... Метод реально работает, в том числе и для RefRecId, что-то не так делаете.

2Russland:
Ваш метод возвращает id поля, а не его тип, т.е. не то, что требуется.
__________________
Андрей.
Старый 03.08.2006, 14:08   #8  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Метод действительно возращает fieldId
Просто времени не было причесать его

строки с комментарием наш EDT это то что я дописал "на ходу"


вернул результат (смотрел в дебагере) 1577 что и есть SalesIdBase.

ладно
дописываем за строкой
_type = dictField.typeId(); //наш EDT
box::info(int2str(_type))

и смотрим что показывается в box::info :-)
то что функция возращает смотреть не надо
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.08.2006, 14:13   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
ключевой момент
dictField.typeId();

собственно AndyD уже успел ответить раньше меня то что я хотел сказать
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.08.2006, 14:17   #10  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Спасибо Вам буду проверять ....
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить из элемента enum-а код типа (enum-а)? Romb DAX: База знаний и проекты 12 27.06.2013 16:17
Получить имя пользователя в формате DOMAIN\user egorych DAX: База знаний и проекты 6 06.08.2008 11:05
Как получить значение переменной из типа Object Arahnid DAX: Программирование 6 23.05.2007 16:17
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
Как получить имя текущего пользователя? Yuri Safronov DAX: Программирование 6 17.09.2002 09:27

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

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

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