Visual Basic |
---|
Public Sub CommitTransaction() |
Транзакция - последовательность взаимосвязанных действий, рассматриваемых как единое целое. Другими словами, при открытии транзакции предполагается, что последующие действия должы быть либо выполнены все, либо не выполнено ни одно. Таким образом с помощью механизма транзакций обеспечивается логическая целостность данных в БД.
Для открытия и нормального завершения используются методы StartTransaction Метод - CommitTransaction Метод. В случае сбоя во время выполнения операции нормальное закрытие не будет произведено, и транзакция останется открытой (в том числе в случае аварийного завершения работы приложения) - по этой причине рекомендуется использовать механизм транзакций с большой осторожностью. В данной ситуации необходимо произвести перехват и обработку исключения (обработать событие OnScriptError Событие). Для закрытия транзакции в случае сбоя используются свойство IsActiveTransaction Свойство и метод AbortTransaction Метод, выполняющий откат произведенной операции.
Таким образом, если произошел сбой операции смены статуса (например, нет прав на смену статуса и т.п.), выполнится откат и все объекты вернутся к первоначальному состоянию.
Метод доступен для вызова всем пользователям TDMS.
Пример работы с транзакцией (VBScript) | ![]() |
---|---|
'================================================= Sub ChangeStatus(ObjCollection, NewStatusName) 'Открытие транзакции ThisApplication.StartTransaction 'Блок каскадных изменений For Each obj In ObjCollection Obj.Permissions = SysAdminPermissions For Each child In obj.ContentAll 'Если закомментировать след. строку кода, скорее всего это вызовет ошибку - ' у рядового пользователя могут отсутствовать права на смену статуса. ' Тогда "сработает" перехвать ошибки в OnScriptError, и произведенные ' изменения будут отменены child.Permissions = SysAdminPermissions child.StatusName = NewStatusName Next Obj.StatusName = NewStatusName Next 'Нормальное завершение транзакции ThisApplication.CommitTransaction End Sub '================================================= 'Если где-то произошла ошибка, перехватываем ее Sub OnScriptError(ScriptDescription, Object, Line, Char, ErrorDescription, Cancel) 'Если на момент ошибки транзакция была открыта, откатываем If ThisApplication.IsActiveTransaction Then ThisApplication.AbortTransaction End Sub '================================================= |