Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN - Сохранение объектного свойства / 3 сообщений из 3, страница 1 из 1
08.08.2008, 10:02
    #35477800
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN - Сохранение объектного свойства
Интересный эффект:

У объекта есть свойство (prop) - ссылка на объект (класса subclass). Это свойство должно быть всегда - т.е. при создании экземпляра должна сразу появляться возможность заполнять свойства, относящиеся к экземпляру subclass.

subclass - не встроенный


Код: plaintext
1.
2.
3.
4.
5.
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock =  1 , ServerOnly =  1  ]
{
 s prop= ##class(subclass).%New()
 s r%Prop = prop
 Quit $$$OK
}

В терминале отрабатывает замечательно:

Код: plaintext
1.
2.
ZN>s a = ##class(topclass).%New()
ZN>w a.%Save()
 1 
Сохранились оба объекта

В ZEN-е при выполнении save() на контроллере сохраняется только экземпляр topclass

Добавил в %OnBeforeSave строку:

Код: plaintext
if (insert) d ..prop.%Save()

В терминале опять все ок, а в ZENе ругается на то, что prop INVALID OREF

Коллеги, не сталкивались с подобным поведением? Может есть способ решить проблему?
...
Рейтинг: 0 / 0
08.08.2008, 16:02
    #35478923
Socratdv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN - Сохранение объектного свойства
А зачем так усложнять заполнение свойств в %OnNew:
Код: plaintext
1.
2.
3.
4.
5.
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock =  1 , ServerOnly =  1  ]
{
 s prop= ##class(subclass).%New()
 s r%Prop = prop
 Quit $$$OK
}
Не правильней ли так сделать?
Код: plaintext
1.
2.
3.
4.
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock =  1 , ServerOnly =  1  ]
{
 d ..propNewObject()
 Quit $$$OK
}
Или хотя бы так:
Код: plaintext
1.
2.
3.
4.
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock =  1 , ServerOnly =  1  ]
{
 s ..prop= ##class(subclass).%New()
 Quit $$$OK
}
...
Рейтинг: 0 / 0
09.08.2008, 02:49
    #35479589
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN - Сохранение объектного свойства
SocratdvА зачем так усложнять

В чем усложнение-то? Я привел последний испробованный вариант - проблема видимо в том, что ZEN при выполнении controller.save() по какой-то причине не хочет сохранять экземпляр subclass, на который ссылается prop.

И кстати, d ..propNewObject() - имхо, некрасиво как-то... из серии когда вместо
s ..a = "Вася"
рисуют
d ..aSet("Вася")
При чтении такого кода нет его нативного понимания ;)
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN - Сохранение объектного свойства / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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