Flexberry / NewPlatform.Flexberry.ORM.ODataService

OData v4 server for .NET
https://www.nuget.org/packages/NewPlatform.Flexberry.ORM.ODataService
MIT License
1 stars 12 forks source link

Batch-запрос с новым детейлом #289

Open Anisimova2020 opened 1 year ago

Anisimova2020 commented 1 year ago

Описание ошибки

По утверждению пользователей если производить Batch-запросы с новым детейлом и с существующим детейлом и в CallBack BeforeUpdate вызывать исключение, то при существующем детейле приходит красиво упакованное исключение с необходимой детальностью, а при новом детейле исключение минимально подробно.

Ожидаемое поведение

Исключения должны приходить одинаковой подробности.

Шаги воспроизведения

До написания этого issue проводилась проверка, что с интеграционного теста проекта ODataService детейлы отправлялись заявленным способом, однако всё отрабатывалось корректно и сообщения об ошибке приходили как надо, поэтому проверку нужно проводить полностью как у пользователей.

  1. Используется фреймворк 4.8 на одата-бакенде.
  2. В эмбер-приложении код примерно следующий:

let changingRecords = A(); changingRecords.pushObject(model); model.eachRelationship((name, desc) => { if (desc.kind === 'hasMany' && desc.type !== '...-map-layer') { model.get(name).filter(a => { return a.get('hasDirtyAttributes') a.hasChangedBelongsTo(); }).forEach(record => { changingRecords.push(record); }); } });

return store.batchUpdate(changingRecords).then(() => { let generation = this.get('model.lastGeneration.id'); if (this.get('model.typeLayer') === 'vector' && curGeneration !== generation) { return this.checkStatus(generation).then((g) => { if (g.get('state') === 'Success') { Promise.resolve(); } else { let message = 'Сохранение слоя не было выполнено по техническим причинам. '; return reject({ message: message, caption: 'Внимание' }); } }); } else return Promise.resolve(); }).catch((error) => { console.error(error); let message = '';

      // тут нет возможности нормально определить ошибку
      message = 'Сохранение слоя не было выполнено по техническим причинам. ';
      return reject({ message: message, caption: 'Внимание' });
    });
  1. Утверждается, что если отправлять на сохранение модифицированный агрегатор и детейл модифицированный. то при проброске исключения в beforeUpdate на бакенде возвращается аккуратное исключение, где корректно можно разобрать внутренние поля. А если то же самое при модифицированном агрегаторе и созданном детейле, то ошибка возвращается не подробная.

Нужно проверить, что такое поведение имеет место быть. Если подтвердится, то требуется запланировать исправление ошибки.