Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Способ хранения для класса / 25 сообщений из 45, страница 1 из 2
03.08.2010, 17:40
    #36773611
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
Помогите плз... Очень важно!

Необходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала, где хранится объект, полем которого является экземпляр данного класса.
Это, как я понял, можно задать через способе хранения класса. В документации (Class Definition Reference) нашел, что есть ключевое слово Structure внутри элемента StorageData, которое может принимать значение node, subnode, <пустая строка>:
- (empty string)—data is stored as a multiple values within a node.
- node—data is stored as a single value within a node.
- subnode—data is stored within repeating subnodes.
По умолчанию - listnode.

Только про то, как и где прописывать - ниче не написано...
Может кто разбирался с этим Storage, подскажите, плз...

Заранее огромное спасибо!
...
Рейтинг: 0 / 0
03.08.2010, 18:00
    #36773648
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
В каше есть, редактор хранения, в этом редакторе полагаю можно сделать то что ты хочешь
добратся до него можно, в инспекторе выбрав, Storage, в свойствах Storage по умолчанию, выбери Data Nodes, по кнопке с троеточием откроется мастер хранения
...
Рейтинг: 0 / 0
03.08.2010, 19:09
    #36773801
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
DAiMor,

Да, с помощью этого мастера хранения можно добавить к определению способа хранения внутри тега Data тег Structure:
<Structure>subnode</Structure>

Однако при компиляции класса возникает ошибка...
Пишет "Неправильная структура схемы хранения"
Да и в мастере уже видно, что что-то не так. Если до изменения было:
Имя узла Глобальная ссылка
AddressState (ID)=$LB(Street,Number)
То после изменения:
Имя узла Глобальная ссылка
AddressState (ID)=
...
Рейтинг: 0 / 0
03.08.2010, 21:52
    #36773983
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
Еще можно в студии сделать "показывать структуру хранения"
Правда когда руками правишь - там не все очевидно.
...
Рейтинг: 0 / 0
03.08.2010, 23:16
    #36774052
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
Блок А.Н.,

Пробовал в студии. Куда только не вставлял... Та же ошибка.
Поэтому и написал сюда, может кто это использовал или знает, где можно узнать (кроме Class Definition Reference).
...
Рейтинг: 0 / 0
04.08.2010, 00:00
    #36774085
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter, может поможет
...
Рейтинг: 0 / 0
04.08.2010, 08:58
    #36774275
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
Приложите, пожалуйста, попробую глянуть.
А то так не очень понятно.
...
Рейтинг: 0 / 0
04.08.2010, 09:15
    #36774292
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала
Что-то типа такого?

Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
/// 
Class tmp.tmp Extends %Persistent [ StorageStrategy = NewStorage1 ]
{

Property prm1 As %String;

Property prm2 As %String;

<Storage name="NewStorage1">
<Data name="Node1">
<Attribute>prm2</Attribute>
<Value name="1">
<Value>prm1</Value>
</Value>
</Data>
<Data name="Node2">
<Attribute>prm2</Attribute>
<Structure>node</Structure>
<Subscript>"prm2"</Subscript>
</Data>
<Data name="tmpDefaultData">
<Subscript>"1"</Subscript>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^tmp.tmpD</DataLocation>
<DefaultData>tmpDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>ID</IdLocation>
<IndexLocation>^tmp.tmpI</IndexLocation>
<SequenceNumber> 3 </SequenceNumber>
<StreamLocation>^tmp.tmpS</StreamLocation>
<Type>%CacheStorage</Type>
</Storage>
}
...
Рейтинг: 0 / 0
04.08.2010, 09:28
    #36774311
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах
Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов.
Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт.

Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б.
...
Рейтинг: 0 / 0
04.08.2010, 09:30
    #36774315
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsaб1.ф1 и б1.а2
Читать как "б1.а1 и б1.а2"...
...
Рейтинг: 0 / 0
04.08.2010, 11:27
    #36774601
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
вот еще
...
Рейтинг: 0 / 0
04.08.2010, 13:43
    #36775034
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsaX_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах, а не в виде списка в узле глобала
Что-то типа такого?

Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
/// 
Class tmp.tmp Extends %Persistent [ StorageStrategy = NewStorage1 ]
{

Property prm1 As %String;

Property prm2 As %String;

<Storage name="NewStorage1">
<Data name="Node1">
<Attribute>prm2</Attribute>
<Value name="1">
<Value>prm1</Value>
</Value>
</Data>
<Data name="Node2">
<Attribute>prm2</Attribute>
<Structure>node</Structure>
<Subscript>"prm2"</Subscript>
</Data>
<Data name="tmpDefaultData">
<Subscript>"1"</Subscript>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^tmp.tmpD</DataLocation>
<DefaultData>tmpDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>ID</IdLocation>
<IndexLocation>^tmp.tmpI</IndexLocation>
<SequenceNumber> 3 </SequenceNumber>
<StreamLocation>^tmp.tmpS</StreamLocation>
<Type>%CacheStorage</Type>
</Storage>
}


Да, кажется это то, что нужно. Огромное спасибо!
...
Рейтинг: 0 / 0
04.08.2010, 13:46
    #36775044
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
doublefintX_Shooter, может поможет

Это тоже, чувствую, сильно пригодится. Премного благодарен.
...
Рейтинг: 0 / 0
04.08.2010, 13:48
    #36775052
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsaX_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах
Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов.
Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт.

Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б.

Да, пока разбирался с этим уже столкнулся. Жаль, конечно. Вообще бы красота получилась...
...
Рейтинг: 0 / 0
04.08.2010, 15:10
    #36775302
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter , я бы вообще не очень-то уповал на этот сторадж... Думается мне он был разработан в рамках "акции" - "мы можем описать как класс любое ваше хранение, переходите быстрей с МСМ на Каше".

Нам так это вообще никак не помогло. Из-за дюже извращенного способа хранения данных...
...
Рейтинг: 0 / 0
05.08.2010, 20:45
    #36778247
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsa,

Для класса типа сериалобжект, судя по всему, нельзя прописать структуру хранения, подобную той, которая описана в вашем примере?
...
Рейтинг: 0 / 0
05.08.2010, 21:37
    #36778305
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter , хранение прописывается только у хранимых классов. Там ведь сразу глобал нужно указывать.
...
Рейтинг: 0 / 0
05.08.2010, 22:16
    #36778335
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsa,

Т.е. получается, как ни крути, а такие объекты могут храниться в глобале, соответствующего к/л персистентному классу, только в виде списка?
...
Рейтинг: 0 / 0
05.08.2010, 23:33
    #36778409
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter , я не совсем понял вопрос...

Хранение можно указать только хранимому классу. Т.е. персистент... Причем в описании хранения будут присутствовать только свойства описваемого класса. Их "сложный" тип вообще не учитывается при описании.

Для удобства помощи со стораджом лучше приводить пример класса и потом на глобалах показать какхочется "завернуть" хранение.
Т.о. можно получить некий вариант.
...
Рейтинг: 0 / 0
05.08.2010, 23:54
    #36778440
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
krvsa,

Пример.
Класс 1:

Class Temp.Person Extends %Persistent [ StorageStrategy = NewStorage1 ]
{
Property Name As %String;

Property Phone As %String;

Property Adr As Address;
}

Класс 2:

Class Temp.Address Extends %SerialObject [ StorageStrategy = NewStorage1 ]
{
Property City As %String;

Property Street As %String;
}

Можно ли сделать в глобале вот так:
^Temp.PersonD(1,"Name")="John Smith"
^Temp.PersonD(1,"Phone")="235-05-45"
//до сих пор все понятно
//но адрес хочу хранить так:
^Temp.PersonD(1,"Adr","City")="NewYork"
^Temp.PersonD(1,"Adr,"Street")="Park Avenue"

/*
Т.е. не просто ^Temp.PersonD(1,"Adr")=$lb("NewYork","Park Avenue"),
а прям поддеревом
*/


В способе хранения сериалобжектов есть тег State, который отвечает за содержимое и соответствует одному тегу Data. Т.е. поля класса Address нельзя разносить в разные теги Data и описывать для каждого Subscript и Structure.

**Создавать новый способ хранения через мастер и модифицировать его через инспектор не получается, так как у классов сериалобжект способ хранения имеет тип %Library.CacheSerialState, а не Storage вовсе...
...
Рейтинг: 0 / 0
05.08.2010, 23:55
    #36778442
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
Хранение по умолчанию для Address:

<Storage name="Default">
<Data name="AddressState">
<Value name="1">
<Value>State</Value>
</Value>
<Value name="2">
<Value>City</Value>
</Value>
<Value name="3">
<Value>Street</Value>
</Value>
<Value name="4">
<Value>Zip</Value>
</Value>
</Data>
<State>AddressState</State>
<StreamLocation>^Temp.AddressS</StreamLocation>
<Type>%Library.CacheSerialState</Type>
</Storage>
...
Рейтинг: 0 / 0
06.08.2010, 08:36
    #36778615
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//но адрес хочу хранить так:
^Temp.PersonD( 1 ,"Adr","City")="NewYork"
^Temp.PersonD( 1 ,"Adr,"Street")="Park Avenue"

/*
Т.е. не просто ^Temp.PersonD(1,"Adr")=$lb("NewYork","Park Avenue"), 
а прям поддеревом
*/

Значит я правильно понял...
И сразу писал - нет в диалоге стораджа вариантов со свойствами типа "другой класс". Выбирать и манипульровать можно только свойствами описываемого класса.

Сам сторадж изначально (личное мнение) делался не для "ломания классов"... А наоборот. Делания классов из произвольного хранения данных в неких глобалах. На переходный период с МСМ на Каше.

Смысла переделывать хранение стандартного класса нет никакого. Это всегда объясняли специалисты ИС.

В твоём случае я бы сделал класс "Адрес" хранимым, а его экземпляры ссылались бы на Персон...
...
Рейтинг: 0 / 0
06.08.2010, 09:13
    #36778654
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
X_Shooter,

Если Вам это действительно очень надо, то это возможно. Правда, как справедливо заметил krvsa , непонятно зачем:
Код: plaintext
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.
27.
28.
29.
<Storage name="Default">
<Data name="personName">
<Attribute>Name</Attribute>
<Structure>node</Structure>
<Subscript>"Name"</Subscript>
</Data>
<Data name="personPhone">
<Attribute>Phone</Attribute>
<Structure>node</Structure>
<Subscript>"Phone"</Subscript>
</Data>
<Data name="personAdrCity">
<Attribute>Adr.City</Attribute>
<Structure>node</Structure>
<Subscript>"Adr","City"</Subscript>
</Data>
<Data name="personAdrStreet">
<Attribute>Adr.Street</Attribute>
<Structure>node</Structure>
<Subscript>"Adr","Street"</Subscript>
</Data>
<DataLocation>^Temp.PersonD</DataLocation>
<DefaultData>personDefaultData</DefaultData>
<ExtentSize> 100000 </ExtentSize>
<IdLocation>^Temp.PersonD</IdLocation>
<IndexLocation>^Temp.PersonI</IndexLocation>
<StreamLocation>^Temp.PersonS</StreamLocation>
<Type>%Library.CacheStorage</Type>
</Storage>

PS: такой вариант задания схемы возможен только в "ручном" режиме. Стандартная схема хранения встраиваемого класса в любом случае останется.
...
Рейтинг: 0 / 0
06.08.2010, 09:25
    #36778672
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
servitтакой вариант задания схемы возможен только в "ручном" режиме
Спасибо, буду знать! Пока только с "интерфейсом" имел дело...
...
Рейтинг: 0 / 0
06.08.2010, 12:19
    #36779052
X_Shooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способ хранения для класса
servit,

Спасибо, теперь все вышло. А я то пытался сделать это в описании самого класса Address...
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Способ хранения для класса / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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