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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2005, 16:57   #1  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Types::Record в качестве ключа для класса Map
Привет всем! Вопрос вот в чем. Кто-нибудь использовал тип Record для ключа в классе Map
PHP код:
map = new Map(Types::RecordTypes::Integer
перед вставкой в такой мап проверяем на существование
PHP код:
if (map.exists(orderTable)) 
и если там запись с таким ключом есть, то вываливаемся по крешу
Старый 15.09.2005, 17:25   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А что заставляет использовать в качестве ключа именно Record?
__________________
Axapta v.3.0 sp5 kr2
Старый 15.09.2005, 17:54   #3  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Может лучше RecId для ключа использовать?
Старый 15.09.2005, 23:25   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Однако, интересно - действительно на map.exists вылетает
PHP код:
    Map       map = new Map(Types::RecordTypes::Integer);
    
CustTable custTable;
    
int       i 1;
    ;
    while 
select custTable
    
{
        
map.insert(custTablei);
        
i++;
        if (
5)
        {
            break;
        }
    }
    if (
map.exists(custTable))
    {
        
info("ok");
    } 
Возможно - сие один из непроверенных багов .... Однако, если учесть тот факт, что до сих пор это не заметили - можно сделать вывод что это некритично ... Или разработчики ядра не продумали что прогаммисты ТАК могут сделать ..
Рекомендаций по обходу тут масса - и запоминать RecId в тот же Map и воспользоваться системными классами Record* и сделать временную копию таблицы через метод setTmp. В зависимости от задачи
Но сам факт баги интересен ...
__________________
Возможно сделать все. Вопрос времени
Старый 16.09.2005, 10:52   #5  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Цитата:
Рекомендаций по обходу тут масса - и запоминать RecId в тот же Map и воспользоваться системными классами Record* ...
Да я собственно так и сделал. Так что все ок, просто как правильно было сказано факт интересный. Есть функциональность, а пользоваться нельзя.

to AndyD. А что если натыкаешься на стену, то ее обязательно стороной обходить, а перелезть ни ни. Вот для того, чтобы не создавать лишний RecordSortedList мне нужно было, чтобы ключ был Record, а не Integer c RecId. Мне нужен весть курсор и чтобы не искать его где-либо (даже в супербыстром RecordSortedList) я и хотел воспользоваться ключом типа Record.
Старый 16.09.2005, 11:09   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
2 Gad

Честно сказать совершенно не понял эту фразу. Key - это уникальное значение. Какая разница - будет это запись целиком или, например, ее RecId. Если вам необходимо ее хранить - воспользуйтесь Value

Извините, я просто не пойму, как вы собирались это использовать
__________________
Axapta v.3.0 sp5 kr2
Старый 16.09.2005, 11:44   #7  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
Мне нужен весть курсор и чтобы не искать его где-либо
Ok. Ну положили вы курсор ключом в map. (Хотя сомнительно использовать такой ключ на мой взгляд). Теперь вы где то обращаетесь к мапу для поиска значения по ключу типа Record - откуда запись будет брать? А если за это время изменилось какое либо поле в записи? Устанете искать причину того, что запись не находиться в мапе ...
Старый 16.09.2005, 14:01   #8  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
2 kvan
мне не нужно искть в мапе запись после формирования мапа я итератором перебираю в нем записи и вывожу в отчет.

2 AndyD
мне для вывода в отчет требуется Key - запись (несколько полей из одной таблицы) и Value - количество суммируемое для этой конкретной записи из других таблиц

А вообще говоря предметом обсуждения является не то зачем мне это надо. А конкретный баг, на вопрос про который ответ я получил. Спасибо.
Старый 16.09.2005, 14:33   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хорошо.

Я проверил - вставка и работа с итератором проходит без проблем. Nак что, если убрать вызов Exists() и проверять значение, возвращаемое функцией Insert(), то можно использовать Record как ключ
__________________
Axapta v.3.0 sp5 kr2
Старый 16.09.2005, 15:54   #10  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Да можно было бы, если бы к одному Record несколько раз не прибавлялось разное Value. То есть если запись есть, то ее надо прочитать, увеличить Value мапа на очередное количество и снова вставить в мап Record и увеличенное Value. А так как, использование метода lookup в мапе вываливает ошибку в случае, если записи с таким ключом нет, то без exists не обойтись. Таким образом, приходится все же делать через RecId и RecordSortedList
Старый 16.09.2005, 16:23   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Я бы предложил что-то типа такого

PHP код:
static void Job21(Args _args)
{
    
inventtable     inventtable;
    
Map             map = new Map(Types::RecordTypes::Integer);
    
MapIterator     mi;
    
int             i;
    
int             epb;
    ;
    
1;
    while 
select inventtable
    
{
        
map.insert(inventtable10);
        
i++;
        if (
30) break;
    }

    
next inventtable;
    
epb infolog.errorsPerBatch();
    
infolog.errorsPerBatch(-1);
    try
    {
        
map.lookup(inventtable);
        
map.insert(inventtable100 i);
    }
    catch (
Exception::Error)
    {
        
map.insert(inventtable100);
    }

    try
    {
        
map.lookup(inventtable);
        
map.insert(inventtable20 i);
    }
    catch (
Exception::Error)
    {
        
map.insert(inventtable100);
    }
    
infolog.errorsPerBatch(epb);

    
mi = new MapIterator(map);
    while (
mi.more())
    {
        
inventtable mi.key();
        
mi.value();
        
info(inventtable.itemName ":" int2str(i));
        
mi.next();
    }

__________________
Axapta v.3.0 sp5 kr2
Старый 11.07.2007, 00:07   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Gad Посмотреть сообщение
Привет всем! Вопрос вот в чем. Кто-нибудь использовал тип Record для ключа в классе Map
PHP код:
map = new Map(Types::RecordTypes::Integer
перед вставкой в такой мап проверяем на существование
PHP код:
if (map.exists(orderTable)) 
и если там запись с таким ключом есть, то вываливаемся по крешу
С контейнерами та же фигня...
Старый 11.07.2007, 10:54   #13  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Пофиксили в 3,0 СП4 КР2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Map Object Sorting - a real issue Blog bot DAX Blogs 7 15.10.2008 12:02
Real в качестве ключа - ошибка при создании записи в связанной таблице sgt.Pepper DAX: Программирование 4 20.05.2008 16:08
Как можно организовать сериализацию класса Map Morpheus DAX: Программирование 7 30.03.2007 16:49
Dynamics AX Geek: Interesting fact about set(Types::Record) Blog bot DAX Blogs 0 28.10.2006 16:40
Что хранит map ? ссылки на Record или сам рекорд в упакованном виде ? Logger DAX: Программирование 9 15.10.2004 10:45
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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