powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов методов в триггере и отмена транзакции
6 сообщений из 6, страница 1 из 1
Вызов методов в триггере и отмена транзакции
    #38084324
Iworb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, есть класс с 2мя датами, можно ли написать какой-либо метод класса, который можно вызвать как с триггера, так и с %OnBeforeSave() ? И как при этом в триггере отменить транзакцию (во 2м случае понятно)?

Пример:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class Test.Period Extends %Persistent
{
Property A1 As %Date;
Property A2 As %Date;

ClassMethod check(A1 As %Date, A2 As %Date) As %Status
{
quit:(A1>A2) $$$ERROR("A1>A2")
quit $$$OK
}

Trigger BeforeIU [Event = INSERT/UPDATE]
{
//вызвать check
}

Method %OnBeforeSave(insert As %Boolean) As %Status [ Private, ServerOnly = 1 ]
{
	set status = ##class(Test.Period).check(..A1,..A2)
        quit status
}
}
...
Рейтинг: 0 / 0
Вызов методов в триггере и отмена транзакции
    #38084376
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Class sqlru.dates Extends %Persistent
{

Property A1 As %Date;

Property A2 As %Date;

ClassMethod check(A1 As %Date, A2 As %Date) As %Status
{
	quit:(A1>A2) $$$ERROR(5001,"A1>A2")
	quit $$$OK
}

Trigger BeforeIU [ Event = INSERT/UPDATE ]
{
	s %msg=..check({A1},{A2})
	if $$$ISERR(%msg) s sqlcode=$s(%oper="INSERT":-104,1:-105)
}

Method %OnBeforeSave(insert As %Boolean) As %Status [ Private, ServerOnly = 1 ]
{
	set status = ..check(..A1,..A2)
	quit status
}

}
...
Рейтинг: 0 / 0
Вызов методов в триггере и отмена транзакции
    #38084411
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще наверное нужно Time = BEFORE у триггера указать

Код: javascript
1.
2.
3.
Trigger BeforeIU [ Event = INSERT, Order = 1, Time = BEFORE] {
....
}



This keyword can take one of the following values:
AFTER — this trigger is fired after an event.
BEFORE — this trigger is fired before an event.
...
Рейтинг: 0 / 0
Вызов методов в триггере и отмена транзакции
    #38084412
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE забыла..

Код: sql
1.
2.
3.
Trigger BeforeIU [ Event = INSERT/UPDATE, Order = 1, Time = BEFORE] {
.....
}
...
Рейтинг: 0 / 0
Вызов методов в триггере и отмена транзакции
    #38084482
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка,

ЕМНИП в триггерах есть переменная %ok - она не возвращается но является статусом работы тригера.

А вот %msg то как раз просто текстовое описание ошибки
...
Рейтинг: 0 / 0
Вызов методов в триггере и отмена транзакции
    #38084503
Iworb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Спасибо, попробую сегодня. Судя по качеству кода, думаю проблем не возникнет.

Алёночка, Time = Before не обязательно, ибо оно по умолчанию ставится.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов методов в триггере и отмена транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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