Решился описать решение, может кому пригодится
Созданы действия AIF для:
- открытия транзакции AifTtsBegin(GUID _messageId, UserId _userId, DataAreaId _dataAreaId, int _transactionLifeTimeSec)
- коммита - AifTtsCommit(GUID _messageId)
- отката - AifTtsAbort(GUID _messageId)
Модифицирована таблица SysDatabaseLog:
- добавлено поле messageId типа GUID;
- добавлены методы для отката изменений в логируемых таблицах:
- rollbackInsert - удаляет запись
- rollbackUpdate - обновляет запись в предыдущее состояние
- rollbackDelete - вставляет запись из лога
- модифицирован метод insert, в котором производится запись в поле SysDataBaseLog.messageId значения AifTtsLog.messageId в контексте текущего пользователя запущенной сессии AX
Создана таблица AifTtsLog для отслеживания состояния AIF транзакций с набором полей:
- messageId - GUID - уникальный идентификатор транзакции, в контексте которого производятся изменения данных и запись в SysDatabaseLog; устанавливается интегрируемой системой
- userId - идентификатор пользователя, в контексте которого производятся изменения данных и запись в SysDatabaseLog; устанавливается интегрируемой системой
- wsAbort - boolean - признак вызова отката транзакции; устанавливается интегрируемой системой
- expirationDateTime - время жизни транзакции, по истечению которого AX запустит механизм отката транзакции
- axAbort - boolean - признак, отображающий успешное завершение отката транзакции на стороне AX
- wsCommit - boolean - признак коммита транзакции; устанавливается интегрируемой системой
- axRollbackError - boolean - признак, отображающий возникновение ошибки в процессе отката транзакции на стороне AX
Создан класс AxTtsMonitor extends RunBaseBatch, который мониторит таблицу AifTtsLog и:
- Запускает откат изменений при появлении признака wsAbort, или же при истечении времени жизни транзакции
- Устананавливает признаки axAbort и axRollbackError