Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Методы %OnAddToSaveSet() и %OnBeforeSave()  [new]
vassil
Member

Откуда: Хабаровск
Сообщений: 112
Может кто подскажет.

Если перед сохранением объекта я хочу дозаполнить какие-то свойства, то метод %OnBeforeSave() не всегда их заполняет, и в документации указано, что надо использовать метод %OnAddToSaveSet()

Но метод %OnAddToSaveSet() вызывается при каждом открытии объекта, не только пред сохранением.

А там тяжелые расчеты и сильно тормозит работу.

Как можно сделать, чтобы вычисления и заполнения свойств вызывалось только перед сохранением объекта?

Method %OnAddToSaveSet(depth As %Integer = 3, insert As %Integer = 0, callcount As %Integer = 0) As %Status 
{
	if ..cityString]"" {
		set ..city = ##class(ent.City).GetByAka(..tradingNetwork,..cityString)
  	}

  $$$QuitOnError(..updateRang())
  Quit $$$OK
}
11 фев 19, 03:41    [21806010]     Ответить | Цитировать Сообщить модератору
 Re: Методы %OnAddToSaveSet() и %OnBeforeSave()  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 945
vassil
А там тяжелые расчеты и сильно тормозит работу
Осознаю как это звучит, но возможно, стоит пересмотреть логику "тяжелых расчетов" "перед сохранением" и делать их после сохранения. Всякие там очереди обработки, состояния объектов и вот это всё, если расчеты-проверки не удается сделать легкими. Попробуйте рассуждение типа: сохранение информации в бд - только одно из действий в сценарии в "сохранение бизнес-объекта". Ну и с системными хуками неудобно работать (тестировать)
11 фев 19, 12:48    [21806284]     Ответить | Цитировать Сообщить модератору
 Re: Методы %OnAddToSaveSet() и %OnBeforeSave()  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 799
vassil
Но метод %OnAddToSaveSet() вызывается при каждом открытии объекта, не только пред сохранением.


Василий! Ну ты и напугал.... Я аж полез проверять. С какого перепуга при каждом открытии? Добавил s ^a=$zts в начало этого метода, открыл объект. Объект на памяти есть, а вот ^a <UNDEFINED> - думаю, нужно разбираться, почему он у тебя при каждом открытии вон чо ;)
11 фев 19, 16:42    [21806630]     Ответить | Цитировать Сообщить модератору
 Re: Методы %OnAddToSaveSet() и %OnBeforeSave()  [new]
vassil
Member

Откуда: Хабаровск
Сообщений: 112
kolesov,

Да я вот тоже сомневаюсь... буду разбираться где-то че-то цепляется...
11 фев 19, 16:54    [21806652]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить