Вообще-то, изменения между версиями можно характеризовать так:
В данной статье посмотрим некоторые отличия во взаимодействии с базами данных.
Появилась поддержка сложных структур запросов, т.е. возможность создавать объединения не только типа родитель - наследник, но и более сложные, правда такие объединения можно делать только в структурах запросов.
Реализована поддержка union, правда не в коде X++, а только для структур запросов, например:
query = new Query(); query.queryType(QueryType::Union); // другим значением QueryType является "Join"
Появилась поддержка Inner join и outer join в UPDATE_RECORDSET, а также возможность возврата количества обработанных записей для UPDATE_RECORDSET и DELETE_FROM, например:
update_recordset batchJob setting Status = BatchStatus::Canceled, EndDateTime = thisDate, Finishing = 1 where batchJob.Status == BatchStatus::Cancelling notexists join batch where ( (batch.Status == BatchStatus::Ready || batch.Status == BatchStatus::Executing || batch.Status == BatchStatus::Hold || batch.Status == BatchStatus::Cancelling) && batch.BatchJobId == batchJob.RecId );
rowsUpdated = (batchJob.RowCount() > 0); // использование rowCount()
Реализована обработка исключений при дублировании уникального ключа, например:
Table t;
try { while select forupdate t { test.Field1 = ‘xyz’; t.update(); } }
catch ( Exception::DuplicateKeyException, t ) { infolog(‘Запись уже существует‘ + t.Field1 ); }
С точки зрения обмена данными между клиентом, сервером приложений и базы данных изменения коснулись также RunBase (уменьшение трафика при инициализации и упаковке), NumberSequences и дисплей-методов. Улучшение работы с дисплей-методами подразумевает их расчет в пакетном режиме на сервере и сохранении результата на клиенте, это выгодно отличается от текущей реализации с последовательным расчетом и передачей с сервера на клиента каждого метода.
Данная статья подготовлена с помощью Windows Live Writer.