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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.09.2007, 11:13   #1  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Чтение только завершенных транзакций.
Вчера у нас возникла ситуация при выгрузке в другую систему, когда пакетник выгружающий в другую систему пересекся с выгрузкой в буферную таблицу (откуда идет выгрузка в другую систему),
т.е. в другую систему выгрузился еще не полностью вставленный в буферную таблицу заказ (попали не все строки).

Чтобы побороть такие ситуации надо использовать чтение данных в тразакции
и у читаемой таблицы использовать метод Таблица.readPast(true) - чтение завершенных транзакций.
Если читать не в транзакции, то будут выбираться все записи (в том числе не завершенные).
Если читать в тразакции без readPast(true), то будут блокировки.

ЗЫ.
Можно-ли установить уровень изоляции транзакции ?

ЗЗЫ
Для понимания два джоба (ВНИМАНИЕ используется ProjTable)

X++:
static void Job_00001(Args _args)
{
    ProjTable       p;
    int             i;
    ;
    delete_from p where p.ProjId like "test__*";

    ttsbegin;
    for (i = 1; i <=10; i++)
    {
        p.ProjId = strfmt("test__%1",i);
        p.doinsert();
    }
    ttscommit;
    ttsbegin;
    for (i = 11; i <=20; i++)
    {
        p.ProjId = strfmt("test__%1",i);
        p.doinsert();
    }
    pause;
    ttsabort;

    pause;
    delete_from p where p.ProjId like "test__*";
}
X++:
static void Job_00002(Args _args)
{
    ProjTable       p1, p2, p3, p4, p5;
    int             i;
    ;
    while select p1
    {
        print(strfmt("nontts %1", p1.ProjId));
        info(strfmt("nontts %1", p1.ProjId));
    }

    p2.selectLocked(false);
    while select p2
    {
        print(strfmt("nontts selectLocked(false) %1", p2.ProjId));
        info(strfmt("nontts selectLocked(false) %1", p2.ProjId));
    }

    ttsbegin;

    p3.readPast(true);
    while select p3
    {
        print(strfmt("tts readPast(true) %1", p3.ProjId));
        info(strfmt("tts readPast(true) %1", p3.ProjId));
    }

    p4.selectLocked(false);
    while select p4
    {
        print(strfmt("tts selectLocked(false) %1", p4.ProjId));
        info(strfmt("tts selectLocked(false) %1", p4.ProjId));
    }

    while select p5
    {
        print(strfmt("tts %1", p5.ProjId));
        info(strfmt("tts %1", p5.ProjId));
    }

    ttscommit;
}
За это сообщение автора поблагодарили: axaLearner (1), iCloud (2).
Теги
программно, транзакции

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Неверный откат сопоставленных транзакций sgt.Pepper DAX: Программирование 4 17.01.2008 09:16
Чтение данных за пределами файла, временная таблица zemlyn DAX: Программирование 0 05.12.2005 18:32
IMTS (Система множественных складских транзакций) yuranio DAX: Функционал 7 04.03.2005 17:56
Хочу видеть только итоги AKIS DAX: Функционал 1 19.08.2002 11:49
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.