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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2007, 06:22   #1  
ymv2000 is offline
ymv2000
Участник
 
84 / 11 (0) +
Регистрация: 03.05.2006
Как обмануть fieldnum
Добрый день
есть такая проблемка,хочу в цикле перебирать все поля в таблице
и передавать их в fieldnum и .. проблема выдается ошибка
Вот мой код
DictTable dt = new DictTable(_forecastpurch.TableId);
int n,k,i;
n= dt.fieldCnt();
for (i=1;i<n;i++)
{
k=dt.fieldCnt2Id(i);
if (dt.fieldName(k)!='itemid')
{
ForecastPurch_DS.object(fieldnum(ForecastPurch,dt.fieldName(k))).allowEdit(false);
}
}
Может надо как то подругому или вообще есть другой способ
Старый 04.07.2007, 08:40   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Так у вас же в k уже находится Id поля. Подставляйте его вместо fieldNum()

Кстати, правильнее было бы указать для k тип FieldId

PS Надо учитывать наличие массивов. И ошибка, скорее всего, связана с отсутствием .object() - надо проверять на NULL
X++:
DictTable dt = new DictTable(_forecastpurch.TableId);
int i;
FieldId id = 0;
FieldId extId;
DictField dictField;
;
id = dt.fieldNext(id);
while (id)
{
    if (id != fieldNum(ForecastPurch, itemId))
    {
        dictField = dt.fieldObject(id);
        for (i=1;i<=dictField.arraySize();i++)
        {
            extId = fieldid2ext(id, i);
            if (ForecastPurch_DS.object(extId))
                ForecastPurch_DS.object(extId).allowEdit(false);
        }
    }
    id = dt.fieldNext(id);
}
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 04.07.2007 в 09:14.
Старый 04.07.2007, 14:01   #3  
ymv2000 is offline
ymv2000
Участник
 
84 / 11 (0) +
Регистрация: 03.05.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Так у вас же в k уже находится Id поля. Подставляйте его вместо fieldNum()

Кстати, правильнее было бы указать для k тип FieldId

PS Надо учитывать наличие массивов. И ошибка, скорее всего, связана с отсутствием .object() - надо проверять на NULL
X++:
DictTable dt = new DictTable(_forecastpurch.TableId);
int i;
FieldId id = 0;
FieldId extId;
DictField dictField;
;
id = dt.fieldNext(id);
while (id)
{
    if (id != fieldNum(ForecastPurch, itemId))
    {
        dictField = dt.fieldObject(id);
        for (i=1;i<=dictField.arraySize();i++)
        {
            extId = fieldid2ext(id, i);
            if (ForecastPurch_DS.object(extId))
                ForecastPurch_DS.object(extId).allowEdit(false);
        }
    }
    id = dt.fieldNext(id);
}
Спасибо за идею!
короче вот так вот заработало:
...................
..................
id = dt.fieldNext(id);
while (id)
{
if (id != fieldnum(ForecastPurch,itemId))
{
dictField = dt.fieldObject(id);
extId = fieldid2ext(id, i);
if (ForecastPurch_DS.object(extId))
{
ForecastPurch_DS.object(extId).allowEdit(false);
}
}
id = dt.fieldNext(id);
}
Старый 04.07.2007, 14:40   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Прикольно. Взял и проигнорировал замечания про длину arraySize и про _ds.object(), который может вернуть null и вызвать ошибку времени выполнения.

Молодец!

P.S. Да, про _ds.object() это уже я наврал - проверка есть. недоглядел

Последний раз редактировалось kashperuk; 04.07.2007 в 15:07.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка COM-объекта longson DAX: Программирование 15 21.04.2008 13:03
Query из 7 таблиц Cornflower DAX: Программирование 29 15.03.2007 11:27
Вопрос по SysQueryRun Protey DAX: Программирование 34 24.10.2006 14:22
fieldNum(map) <-> fieldNum(table) ? EVGL DAX: Программирование 8 26.01.2006 15:31
Как установить связь такого вида? Sirius DAX: Программирование 1 04.06.2004 06:39

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

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

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