Цитата:
Сообщение от
IKA
Можно, конечно все переструктурировать в существующем коде. чтобы обойти проблему, но:
1) пользователям это не нравится, тк они для каждой строки хотят видеть все релевантные для нее ошибки /предупреждения. (И, вообще-то, я с ними согласна.)
Научите пересчеты не выбрасывать исключения - вот и все. Чтобы не лезть глубоко в код, если проблематично протащить в пересчеты новый параметр, можно где-нить в GlobalCache вести флажок, управляющий этим поведением, а также повесить обработчик в ttsNotifyAbort(), чтобы этот флажок вычищал. При наличии флажка пересчеты будут просто выводить предупреждения и прекращать работу, при отсутствии - выбрасывать исключения, как раньше. В конце вставки всех строк анализируете наличие предупреждений в инфологе, как в проверках целостности сделано, и принимаете решение о том, накатывать транзакцию или нет. После успешного накатывания транзакции не забываете удалить флажок из GlobalCache, чтобы пересчеты заработали, как раньше.
Цитата:
Сообщение от
IKA
2) по-моему, это принципиально неправильно, что , дожив до 2012, мы до сих пор не можем нормально отлавливать ошибки.

Это - by design, потому что предполагается, что если код выбрасывает исключение в транзакции, значит, в этой транзакции что-то пошло не так, и ее надо откатить. Это как остановка конвейера на японских заводах: каждый рабочий может это сделать при необходимости, но при этом каждый рабочий осознает всю полноту ответственности за такое решение. А когда можно "нормально отлавливать" любое и каждое исключение в транзакции, то получается, как с
запуском Челленджера (см. про уплотнительные кольца и предупреждения Morton Thiokol).
PS.
Цитата:
Сообщение от
IKA
В цикле вставляются записи в таблицу - должны либо вставиться все, либо ни одной. Т.о транзакция.
Вставляйте свои записи в RecordSortedList - тогда на момент вызова пересчетов можно будет обойтись без общей транзакции и отловить каждую ошибку в вашем try/catch, а в конце обработки, если ошибок не было, можно будет вставить все строки разом в одной транзакции (вариации на тему временной таблицы

)