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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.05.2008, 14:50   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Будьте осторожны с RecordInsertList
1) Создаю таблицу новую (Table1)
2) Создаю текстовое поле (field1) (string 10 по умолчанию)
3) В insert таблицы пишу.
X++:
public void insert()
{
    super();
    info("ttttttttttttttttttttttttttttttttttttttttttt");
}
4) Запускаю джобик
X++:
static void Job14(Args _args)
{
    RecordInsertList    recordInsertList    = new RecordInsertList(tablenum(Table1));
    Table1 table1;
    int i;
;
    for(i=0;i<4000;i++)
    {
        table1.Field1 = int2str(i);
        info(table1.Field1);
        recordInsertList.add(table1);
    }
    recordInsertList.insertDatabase();
}
И вижу что в add на цифрах 1067, 2135, 3203 идёт сброс данных в таблицу не в insertDatabase(), а в add.
Провожу экспиримент сначала.
Только коментирую insertDatabase(). Те которые уже сбросились так и остались в таблице до 3203, а которые не успели в таблицу не попали.
Расширяю поле в таблице до 20 знаков.
Снова провожу экспиримент, цифры сброса уже другие 743, 1487, 2231, 2975, 3719.
Если взять например класс xRefCreate метод updateDBReferences, то
X++:
                                if (!xRefReferences::find(phantomCallReference.xRefNameRecId, phantomCallReference.xRefPathRecId))
                                {
                                    recordInsertList.add(phantomCallReference);
                                }
Перед тем как закинуть в буфер новую строку идёт проверка есть ли уже такая, и только тогда сбрасывается.
А ведь может выйти такая ситуация.
Сбрасываем десять записей, на восьмой буфер переполнился и произошёл сброс.
В той строке которую я написал находиться 9 строка, в базе её ещё нет. А в буфере она есть так как не было сброса. Добавляем в буфер 9 строку повторно и на insert database они обе идут в таблицу.
Просто у меня стоит локально Ax 3.0 sp1 и мало того что перекрёстные ссылки считаются 8 часов, так они ещё и задваиваются кое-где. На Ax 3.0 sp4 (не локально трёх звенка) задвоений нет, и считается быстро. Хотя классы xRefCreate и xRefUpdate одинаковые.
И думаю возможно причина здесь. Пока не знаю, до конца ещё не докопал.
Но впечатление, что человек писаший обновление перекрёстных ссылок не знал о подобном эффекте (преждевременного сброса буфера).
Но ведь такие места наверное есть и вдругих местах.
Вообщем будь те осторожны с recordInsertList, на верное его из-за этого и убрали из Ax 2009.
aEremenko: DAX 2009, работа с несколькими компаниями
За это сообщение автора поблагодарили: mazzy (2), Wamr (3).
Теги
ax2009, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Есть ли выигрыш от RecordInsertList Wamr DAX: Программирование 30 18.09.2013 10:31
RecordInsertList для Excel Arahnid DAX: Программирование 7 02.10.2007 19:51
Получение данных из RecordInsertList. lemchey_white DAX: Программирование 1 10.09.2007 11:05
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26

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

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

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