Билд 4.0.2503.1208, но насколько понимаю, тут вопрос вне версионный.
Для начала опишу модель архитектуры.
Есть некоторый ф-ционал(предположим, что примитивный логгер показателей системы во время некого события).
Метод для вызова логера находится внутри некого метода, для простоты будем считать, что это некоторый апдейт.
Что-то вроде:
X++:
ttsbegin;
//Инициализация только для примера. Суть в том, что до вызова логера должна
//отработать одна часть процесса
someBuffer.SomeField = SomeNewValue;
someBuffer.SomeField2 = SomeNewValue2;
someBuffer.SomeField3 = SomeNewValue3;
//вызов логера
Loger.logit();
//Вторая часть процесса после логера + окончательный апдейт.
someBuffer.update();
ttscommit;
Loger.logit(); делает примерно следующее - пишет в таблицу лога показатели, если только таблица лога ещё не содержит записи, которая дублирует нашу по индексным полям. Для упрощения - эти поля дата логирования, период логирования и подпериод. Не спрашивайте зачем) Так нужно! В общем, эти поля формируют уникальный индекс - только одна запись за данную дату, период и подпериод логирования.
Так вот, в чем суть, если процесс, в который внедрен вызов логера запускается одновременно на двух клиентах(а такая ситуация на проекте, увы, встречается в реальной практике) - происходит следующее: вылетает ошибка о невозможности записи в таблицу логера, так как запись существует, но худшее то, что при этом прерывается процесс.
Что я только не делал:
- и запись в лог в Try-catch обрамлял, наивно думая, что в такой ситуации должна инициироваться исключительная ситуация UpdateConflict(Хотя так же перепробовал и UpdateConflictNotRecovered и просто Error и вообще кэтч блок без фильтра), но увы, catch блок ничего ловится.
- и OCC на таблице логгера отключил(эфект частичный, на 2-3 тестах отрабатывает хорошо, на 4ом все-равно валится).
В итоге, у меня появился лишь один сомнительный вариант: сделать индекс по дате, пироду и под-периоду логирования неуникальным и потом чистить повторяющиеся варианты.
В общем, если есть у кого более интересные идеи - милости прошу.