Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Помогите плз... Очень важно! Необходимо прописать хранение экземпляров класса типа 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, подскажите, плз... Заранее огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 17:40 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
В каше есть, редактор хранения, в этом редакторе полагаю можно сделать то что ты хочешь добратся до него можно, в инспекторе выбрав, Storage, в свойствах Storage по умолчанию, выбери Data Nodes, по кнопке с троеточием откроется мастер хранения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 18:00 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
DAiMor, Да, с помощью этого мастера хранения можно добавить к определению способа хранения внутри тега Data тег Structure: <Structure>subnode</Structure> Однако при компиляции класса возникает ошибка... Пишет "Неправильная структура схемы хранения" Да и в мастере уже видно, что что-то не так. Если до изменения было: Имя узла Глобальная ссылка AddressState (ID)=$LB(Street,Number) То после изменения: Имя узла Глобальная ссылка AddressState (ID)= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 19:09 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Еще можно в студии сделать "показывать структуру хранения" Правда когда руками правишь - там не все очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 21:52 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., Пробовал в студии. Куда только не вставлял... Та же ошибка. Поэтому и написал сюда, может кто это использовал или знает, где можно узнать (кроме Class Definition Reference). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 23:16 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter, может поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 00:00 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Приложите, пожалуйста, попробую глянуть. А то так не очень понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 08:58 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 09:15 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов. Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт. Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 09:28 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
krvsaб1.ф1 и б1.а2 Читать как "б1.а1 и б1.а2"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 09:30 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
вот еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 11:27 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
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. Да, кажется это то, что нужно. Огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 13:43 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
krvsaX_ShooterНеобходимо прописать хранение экземпляров класса типа SerialObject в дочерних узлах Хранение типа стораж можно указать только для хранимых классов типа персистент. Т.к. в описании явно нужно указывать именя глобалов. Так же при описании предлагается выбирать только свойства данного класса. Выбрать какие-то "дальние" свойства которые есть у свойства типа "другой класс" построитель не даёт. Т.ч. если у тебя есть класс А сериалобжект со свойствами а1 и а2, класс Б со свойством б1 типа класс А - ты не сможешь расписать б1.ф1 и б1.а2 по узлам глобала в котором хранится класс Б. Да, пока разбирался с этим уже столкнулся. Жаль, конечно. Вообще бы красота получилась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 13:48 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter , я бы вообще не очень-то уповал на этот сторадж... Думается мне он был разработан в рамках "акции" - "мы можем описать как класс любое ваше хранение, переходите быстрей с МСМ на Каше". Нам так это вообще никак не помогло. Из-за дюже извращенного способа хранения данных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 15:10 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
krvsa, Для класса типа сериалобжект, судя по всему, нельзя прописать структуру хранения, подобную той, которая описана в вашем примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 20:45 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter , хранение прописывается только у хранимых классов. Там ведь сразу глобал нужно указывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 21:37 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
krvsa, Т.е. получается, как ни крути, а такие объекты могут храниться в глобале, соответствующего к/л персистентному классу, только в виде списка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 22:16 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter , я не совсем понял вопрос... Хранение можно указать только хранимому классу. Т.е. персистент... Причем в описании хранения будут присутствовать только свойства описваемого класса. Их "сложный" тип вообще не учитывается при описании. Для удобства помощи со стораджом лучше приводить пример класса и потом на глобалах показать какхочется "завернуть" хранение. Т.о. можно получить некий вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 23:33 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
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 вовсе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 23:54 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Хранение по умолчанию для 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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 23:55 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Значит я правильно понял... И сразу писал - нет в диалоге стораджа вариантов со свойствами типа "другой класс". Выбирать и манипульровать можно только свойствами описываемого класса. Сам сторадж изначально (личное мнение) делался не для "ломания классов"... А наоборот. Делания классов из произвольного хранения данных в неких глобалах. На переходный период с МСМ на Каше. Смысла переделывать хранение стандартного класса нет никакого. Это всегда объясняли специалисты ИС. В твоём случае я бы сделал класс "Адрес" хранимым, а его экземпляры ссылались бы на Персон... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 08:36 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
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. PS: такой вариант задания схемы возможен только в "ручном" режиме. Стандартная схема хранения встраиваемого класса в любом случае останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 09:13 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servitтакой вариант задания схемы возможен только в "ручном" режиме Спасибо, буду знать! Пока только с "интерфейсом" имел дело... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 09:25 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servit, Спасибо, теперь все вышло. А я то пытался сделать это в описании самого класса Address... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 12:19 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
krvsaservitтакой вариант задания схемы возможен только в "ручном" режиме Спасибо, буду знать! Пока только с "интерфейсом" имел дело... Кстати, с использованием интерфейса это тоже можно. Если не выбирать в выпадающем списке имя нужного свойства, а писать руками, например Adr.Street. А в поле для задания индекса глобала можно писать прямо: "Adr","Street" одной строкой, тогда получается как раз то, что показал servit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 12:23 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_ShooterКстати, с использованием интерфейса это тоже можно. Если не выбирать в выпадающем списке имя нужного свойства, а писать руками Ясно, учту... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 12:44 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooterservit, Спасибо, теперь все вышло. А я то пытался сделать это в описании самого класса Address... А нет, не вышло... servit, у Вас класс нормально компилится? Просто у меня компилятор ругается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 14:13 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter, Компилируется без ошибок и данные сохраняются как задумано (Caché 2010.2.FT5). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 15:12 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter[quot X_Shooter] Просто у меня компилятор ругается. наверное, на имя свойства с точкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 16:19 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooter, Проверил в Caché 5.0.21 - компилируется без ошибок и сохраняет данные согласно Вашим требованиям. PS: не используйте мастер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 16:58 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servit, У меня стояла Cache 2008.1.0, там делал через местер и выскакивала ошибка. Только что скачал Cache 2010.1.3. Сделал в ней то же самое через мастер - ошибки нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 17:36 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Правда при компиляции автоматически создается узел PersonDefaultData и туда помещается Adr: <Data name="PersonDefaultData"> <Value name="1"> <Value>Adr</Value> </Value> </Data> и никак его не уберешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 17:38 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
X_Shooterи никак его не уберешь... Так ведь это свойствоесть в классе... Надо же его куда-то девать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2010, 09:20 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
кто-нибудь сталкивался - у меня в Storage прописалось расчетное свойство (причем только одно из нескольких)? я думала это только для хранимых свойств? наткнулась случайно: расчетное свойство было создано, когда мы еще были на 2009 версии каше..сейчас 2010, а так не замечала чтобы расчетные св-ва прописывались в структуру хранения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2011, 10:03 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Аленочка , Есть тип вычисляемых полей, которые хранятся в БД: Two Types of Computed SQL Fields Скорее всего у Вас используется именно такой (Triggered computed) тип поля или на момент первой компиляции класса это поле было невычисляемым, поэтому и осталось в схеме хранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2011, 11:03 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servit , вычисляемое свойство самое обычное, по системе контроля верий проверила - свойство изначально было добавлено как вычисляемое, т.е. ранее оно не было хранимым В урезанном варианте: Property Category As cls.MyClass [ Calculated, SqlComputeCode = { s {Category}=##class(cls.MyClass).GetCategory({ID}) }, SqlComputed ]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2011, 01:41 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Аленочка , Создал и скомпилировал следующий класс: Class User.Test Extends %Persistent { Property name As %String(MAXLEN = 2000); Property rowCount As %Integer; Property Category As User.Test [ Calculated, SqlComputeCode = {s {Category}=##class(User.Test).%OpenId({ID})}, SqlComputed ]; } Потом проверил схему хранения на наличие свойства Category для разных версий Caché: 5.0.21 - отсутствует ; 2009.1.1 - отсутствует ; 2011.2.0 - отсутствует ; Если у Вас есть подозрение на баг конкретной версии СУБД, то проверить можно просто: сделайте резервную копию класса, удалите схему хранения и перекомпилируйте класс заново. PS: проверьте, есть ли данные в глобале в позиции вычисляемого свойства согласно схеме хранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2011, 10:59 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Аленочка, может быть свойство Category прописано в абстрактном суперклассе и наследуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 06:41 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
ser_shuАленочка, может быть свойство Category прописано в абстрактном суперклассе и наследуется? нет не наследуется. свойство уникально в рамках одного класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 08:38 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servit Если у Вас есть подозрение на баг конкретной версии СУБД, то проверить можно просто: сделайте резервную копию класса, удалите схему хранения и перекомпилируйте класс заново. сделала копию класса, пересла полностью свое вычисляемое св-во в том же виде + 1 хранимое дя теста в структуре хранения все ок! прям загадка века какая-то ;) возможности проделать то же самое в 2009 версии уже нет..к сожалению.. по поводу просмотра данных в глобалах - как правильно задать маску для выборки в портале управления, если класс у меня наследуется ? предок класс - doc.Line (глобал один ^doc.LineD), мой конечный класс с вычисляемым св-вом предположим называется doc.aa.bb.Line ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 08:52 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Аленочкав структуре хранения все ок! прям загадка века какая-тоКак я писал выше, такое бывает, когда разработчики "временно" меняют что-то в классе. Например, можно добавить свойство в класс, скомпилировать его, удалить это свойство и снова скомпилировать класс. В схеме хранения останется фантом. Кто-то потом может долго гадать откуда он взялся. Аленочкавозможности проделать то же самое в 2009 версии уже нет..к сожалению..Уверен, что ситуация не изменилась бы. См. мой предыдущий пост. Аленочкапо поводу просмотра данных в глобалах - как правильно задать маску для выборки в портале управления, если класс у меня наследуется ?Можно поступить проще: сделать временно вычисляемое поле обычным хранимым и потом выполнить простой SQL запрос: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 09:26 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
servit В схеме хранения останется фантом. Кто-то потом может долго гадать откуда он взялся. да, похоже что так и есть. а если я хочу удалить этот "фантом" из структуры хранения - стоит ли мне это делать? порядковый номер этого св-ва = 6, после него идут другие св-ва по порядку 7,8 и т.д. я так понимаю с удалением чего-то из структуры хранения в Каше есть свои тонкости..? ну и тогда уже по ходу задам вопрос: если я хочу избавиться от некого хранимого св-ва которое года 2 назад мне было нужным, а сейчас нужным быть перестало (собственно как и данные которые оно хранит), какие есть способы быстро и безболезненно от него избавиться ? т.е. "грохнуть" и свойство в классе и хранимые в глобале данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 09:46 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Аленочка , Если данных ещё нет, то можно безболезненно удалить поле из схемы хранения, сдвинув остальные поля. Если данные уже есть, то лучше поле не удалять, а обнулить, то есть: вместо ^global(ID)=$LB(%%CLASSNAME,field1,Category,field3) должно получиться ^global(ID)=$LB(%%CLASSNAME,field1,,field3) Но перед этим нужно не забыть обнулить поле либо через запрос, либо программно: update my.Class set Category=null Потом вновь создаваемые поля в схеме хранения можно помещать на место таких пустот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 10:17 |
|
||
|
Способ хранения для класса
|
|||
|---|---|---|---|
|
#18+
Лучше систему хранения не трогать. Если есть старые данные, их можно обнулить, а в целом, влиянием дырки на размер хранения и быстродействие можно пренебречь. Если данных нет совсем, проще структуру хранения совсем грохнуть, она пересоздастся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 10:25 |
|
||
|
|

start [/forum/search_topic.php?author=relizx&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
99ms |
get tp. blocked users: |
2ms |
| others: | 727ms |
| total: | 972ms |

| 0 / 0 |
