Показать сообщение отдельно
Старый 22.12.2010, 12:59   #1  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,817 / 402 (17) +++++++
Регистрация: 23.03.2006
! InventDim::findOrCreate
Решил поделиться интересной особенностью поведения InventDim::findOrCreate() в параллельных транзакциях. Для демонстрации запустите данный job на 2х клиентах. после запуска второго, продолжить первый (набор аналитик должен не существовать). В итоге сгенерится ошибка, что набор аналитик существует. Лечится ситуация с помощью UserConnection для findOrCreate()

X++:
static void job(Args _args)
{
    InventDim           inventDim;
    ;

    ttsbegin;
    inventDim.InventColorId = 'color1';
    inventDim.InventLocationId = 'Loc1';
    inventDim.InventSizeId = 'size1';
    inventDim = InventDim::findOrCreate(inventDim);
    Pause;
    ttscommit;
    info(inventdim.inventDimId);
}