powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / TS TRY CATCH TC или TRY TS TC CATCH ?
13 сообщений из 13, страница 1 из 1
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367041
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1
Код: plaintext
1.
2.
3.
4.
5.
6.
 try {
 TSTART  
 TCOMMIT
 }
 catch {
 TROLLBACK
 }
или
Вариант 2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 TSTART
 try {
  
 
 }
 catch {
 
 }
 IF ok TCOMMIT
 Else  TROLLBACK

Какой вариант благославляется, а какой не благославляется? Почему?
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367133
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вариант странный, зачем он?
Я бы делал trollback 1, иначе можете откатить чужую транзакцию.
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367134
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 ,

Например, в исходниках %SYS встречается только вариант №1 (с вариациями). Но возможно плохо искал.
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367139
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

да, надо TROLLBACK 1, но сейчас вопрос не в этом
спрашивая коллег, столкнулся с тем - что оба этих варианта коллеги отстаивают как логичные и богоугодные, вот решил коммьюнити спросить
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367162
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

Предлагаю спросить еще и это комьюнити - вдруг кто-то еще отстаивает вариант 2 и с аргументацией?
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367314
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

Наверное вкусовщина. Глазу и логике в отдельном блоке приятен первый вариант.

Второй вариант получается сам собой же при вызовах
Код: plaintext
1.
2.
3.
4.
5.
 TSTART

 SET ok = Вариант 1

 IF ok TCOMMIT
 Else  TROLLBACK
Что до аргументов, то Вариант 1 ловит исключение при выполнении TCOMMIT, а вот во втором варианте - нет.
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367342
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 ,

Кроме того - при прочих равных - во втором варианте выполняется дополнительное условие. Причём всегда.
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367527
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я за гибридный вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 TSTART
 Try {
    Set sc = ..doSomething()
 } Catch exception {
    Set sc = exception.AsStatus()
 }
 If ('sc) {
    TROLLBACK 1
 } Else {
    TCOMMIT
 }
 Quit sc
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367550
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petr0vi4444Я за гибридный вариант:Это второй вариант.

Здесь будет гораздо ценнее аргументация (вторая часть вопроса ТС).
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367702
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitЗдесь будет гораздо ценнее аргументация (вторая часть вопроса ТС).Во втором варианте единый блок обработки результата с типом %Status.
В первом варианте если в блоке Try не возникло исключения, но операция выполнилась неуспешно, после Catch нужно проверять результат и делать TROLLBACK в случае ошибки.
Это приводит к дублированию кода и если помимо TROLLBACK необходимо сделать ещё какие-нибудь операции, код становится слишком громоздским, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 TSTART
 Try {
    Set sc = ..save()
 } Catch exception {
    TROLLBACK 1
    Kill %objlasterror
    Do ##class(Log).addException(exception)
 }
 Quit:$D(exception) ..doSomethingIfError(exception.AsStatus())
 If ('sc) {
    TROLLBACK 1
    Kill %objlasterror
    Do ##class(Log).addError(sc)
    Quit ..doSomethingIfError(sc)
 }
 TCOMMIT
 Quit sc
P.S.Никак не пойму какими тэгами оформлять код
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367733
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petr0vi4444,

Непонятно, зачем вы это делаете. Почему бы в случае ошибки не выбросить исключение?
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367799
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petr0vi4444Во втором варианте единый блок обработки результата с типом %Status.
В первом варианте если в блоке Try не возникло исключения, но операция выполнилась неуспешно, после Catch нужно проверять результат и делать TROLLBACK в случае ошибки.Разве не проще сделать так, как сделано, например, в %SYSTEM.SQL?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Set sc = $$$OK
 Try {
    TSTART
    $$$ThrowOnError(..doSomething())
    TCOMMIT
 } Catch exception {
    TROLLBACK 1
    Set sc = exception.AsStatus()
 }
 Quit sc
P.S.Petr0vi4444Никак не пойму какими тэгами оформлять код
Вы и так оформляете правильными тегами.
...
Рейтинг: 0 / 0
TS TRY CATCH TC или TRY TS TC CATCH ?
    #39367880
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petr0vi4444,

Исходники оформлять нужно тегом [src], а у servit есть под рукой инструмент для корректной расскраски кода, что он и делает после публикации.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / TS TRY CATCH TC или TRY TS TC CATCH ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]