Я создал пользовательскую таблицу для хранения причин для изменения объекта. Я делаю PO C с BOPF, чтобы учиться, даже если это не имеет смысла использовать его здесь.
Вот как выглядит (упрощенно) постоянная структура:
define type zobject_modifications {
object_id : zobject_id;
@EndUserText.label : 'Modification Number'
mod_num : abap.numc(4);
reason_id : zreason_id;
@EndUserText.label : 'Modification Comments'
comments : abap.string(256);
}
Альтернативный ключ состоит из object_id + mod_num . mod_num должен быть автоматически сгенерированным счетчиком, всегда добавляя 1 к последней модификации для object_id.
Я создал определение before_save для его генерации, проверяя MAX mod_num из BO базы данных и из текущих экземпляров BO и увеличение на 1.
Но когда я пытаюсь создать 2 BO для одного и того же объекта в одной транзакции, я получаю ошибку из-за дублированного альтернативного ключа, поскольку поле MOD_NUM все еще является начальным, а before_save будет вызвано позже. Я попытался изменить определение на «После изменения», но у меня все та же проблема.
Вопрос в том, когда и как мне создать следующий MOD_NUM, чтобы иметь возможность создавать несколько узлов для одного и того же идентификатора объекта. безопасно?
Это должно быть очень распространенной проблемой, поэтому должен быть лучший способ сделать это, но я не смог ее найти.