powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как создать глобал с заданным именем?
17 сообщений из 17, страница 1 из 1
Как создать глобал с заданным именем?
    #38901847
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот скажем, есть функция, которая получает в качестве аргумента имя глобала. Method createGlobal(globalName As %String) {
   set ^(globalName)("test") = 1
}Как создать глобал с именемем указанным в globalName?
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901866
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В вашем примере правильный синтаксис:Method createGlobal(globalName As %String) {
   set @$name(globalName)@("test") = 1
}Надеюсь, что это лишь пример, и вы не будете дёргать подобную функцию для создания каждого узла глобала?
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901870
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
 s globalName="test"
 s globalName="^"_globalName
 s @globalName=1
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901874
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslovчто это лишь пример, и вы не будете дёргать подобную функцию для создания каждого узла глобала?

Мне нужен способ благодаря которому я смогу работать с глобалом зная его имя с помощью переменной globalName.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901876
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu s @globalName=1
Спасибо, попробую.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901877
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно записать куда-нибудь узлы (типа в array или $lb) и потом по этим узлам установить значение?
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901916
CEH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder,
Я согласен, что вы мало чему научитесь если будете спрашивать ответов по-крупинке и не пробуя найти эти ответы в документации. Я знаю как много знающих людей на этом форуме, но их надо заинтересовать более весомыми вопросами.
Мой ответ вам читайте здесь:
http://www.mumps.cz/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_vzreference
Это общий ответ не зная на какой версии вы работаете.

Знающим и активным форумчанам предлагаю начать отдельную тему для учащихся.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38901928
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder,

Тут Евгений Каратаев недавно ссылку на свою книгу выкладывал. Читайте: 17272466 , раздел косвенность и про функцию $name не забудьте посмотреть.
jxcoderА как можно записать куда-нибудь узлы (типа в array или $lb)
Почитайте про команды set и merge, про функцию $piece (особенно об особенностях использования функции в левой и правой части выражения). Также, почитайте про функции $order, $data, $get.
Думаю этого, пока, будет достаточно.
P.S.: Голые ссылки не используйте.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38902998
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.,

что-то так и не понял как ее использовать в этой задаче. Можете еще намекнуть или примерчик какой-нибудь написать?
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38903180
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderчто-то так и не понял как ее использовать в этой задаче.
В какой конкретной задаче? В этой 17372568 ?
Если честно, то из описания, не совсем понятно чего Вы хотите. Если хотите из элементов какого-либо списка сделать узлы какой-либо индексной переменной, то $lb или $p Вам в помощь. Например:
через $piece
 ;=============================================================================
 ; Тест
 ;=============================================================================
TEST
 N i,list,dlm,len,node,data
 D INIT
 F i=1:1:len {
   S node=$P(list,dlm,i)
   I node'="" {
     W !,"Input data for "_node,!
     R data
     S array(node)=data
   }
 }
 W !!,"Content of array:",!
 ZW array
 Q
 ;=============================================================================
 ; Тестовый список узлов через разделитель
 ;=============================================================================
INIT
 S dlm="|"
 S $P(list,dlm,1)="node1"
 S $P(list,dlm,2)="node2"
 S $P(list,dlm,3)="node3"
 S len=$L(list,dlm)
 Q
 ;=============================================================================

с использование списков
 ;=============================================================================
 ; Тест
 ;=============================================================================
TEST
 N i,list,len,node,data
 D INIT
 F i=1:1:len {
   S node=$LG(list,i)
   I node'="" {
     W !,"Input data for "_node,!
     R data
     S array(node)=data
   }
 }
 W !!,"Content of array:",!
 ZW array
 Q
 ;=============================================================================
 ; Тестовый список узлов в $list
 ;=============================================================================
INIT
 S $LI(list,1)="node1"
 S $LI(list,2)="node2"
 S $LI(list,3)="node3"
 S len=$LL(list)
 Q
 ;=============================================================================

Про array вообще не понятно. Раз у Вас уже есть какая-то индексная переменная, так и пройдитесь по её узлам да заполните нужными значениями. Например:
 ;=============================================================================
 ; Тест
 ;=============================================================================
TEST
 N array,node,data
 D INIT
 S node=""
 F  {
   S node=$O(array(node))
   Q:node=""
   W !,"Input data for "_node,!
   R data
   S array(node)=data
 }
 W !!,"Content of array:",!
 ZW array
 Q
 ;=============================================================================
 ; Тестовый массив
 ;=============================================================================
INIT
 S array("node1")=""
 S array("node2")=""
 S array("node3")=""
 Q
 ;=============================================================================
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38903272
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.,

У меня есть функция, которой передается на вход экземпляр класса A.
У этого класса есть два наследника: AB, AC.

Эти классы имеют различное сохранение данных в глобал.

Скажем для AB надо сохранить данные так:

Код: sql
1.
("a", "subtype", "b", "field1") = <значение поля field1>



а для AC надо сохранить данные вот так:

Код: sql
1.
2.
("a", "subtype", "c", "field2") = <значение поля field2>
("a", "subtype", "c", "status") = <значение поля status>



вот я и подумал, что было бы круто иметь ссылку на глобал или каким-то образом формировать список ключей и значений (массив) и потом пройтись по нему и записать данные в глобал.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38903368
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderссылку на глобал
Ссылка на глобал - есть строка с именем глобала [плюс может содержать не просто имя глобала, но и узлы].
НО!!! В ручную такую строку не формируйте, просто есть вероятность допустить ошибку, пользуйтесь функцией $NAME.
jxcoderЭти классы имеют различное сохранение данных в глобал
Позвольте поинтересоваться, а чем Вам не угодили разработки компании InterSystems, в частности класс %Persistent? Вам ведь придётся самому реализовывать методы работы с данными (запись/чтение/удаление/копирования из/в глобал), самому обеспечивать целостность данных, индексацию, и т.д. Т.е. Вам предстоит сделать работу, которая давно проделана за Вас. Или мы говорим не о классах Cache?
jxcoderиметь ссылку на глобал или каким-то образом формировать список ключей и значений (массив) и потом пройтись по нему и записать данные в глобал.
См. примеры выше.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38904453
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.,

Я думаю, что пока не дошел до этой стадии.

Мне пока проще работать с глобалами напрямую и самостоятельно реализовать функции сохранения и поиска.Method writeToGlobal(node As %String, ab As %AB) {
   set @node@("b", "field1") = ab.<значение поля field1>
}Method writeToGlobal(node As %String, ac As %AC) {
   set @node@("b", "field2") = ac.<значение поля field2>
   set @node@("c", "status") = <значение поля status>
}Вызов:
writeToGlobal($name(^myglobal("a", "subtype")), ab)writeToGlobal($name(^myglobal("a", "subtype")), ac)
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38905864
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderМне пока проще работать с глобалами напрямую и самостоятельно реализовать функции сохранения и поискаПроще потратить время на изучение стандартных возможностей из коробки, чем привыкать к такому стилю написания кода, а потом мучительно переучиваться и заодно переписывать код.
Подавляющая часть Ваших вопросов решается настройкой схемы хранения : вполне можной обойтись стандартным %CacheStorage, а если его мало - %CacheSQLStorage или %CustomStorage.
Работа с существующими глобалами через объекты и SQL

Остались несколько вопросов по Вашей схеме:
  • приведите структуру хранения для класса A
  • не заметил, где именно у Вас в структуре хранения фигурирует ID объекта конкретного класса?
  • каким образом Вы будете хранить/использовать индексы по Вашим полям для ускорения поиска?
  • предусматривается ли Вами в дальнейшем доступ к этим классам/данным через SQL?
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38909257
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

servitприведите структуру хранения для класса A

Она различная для разных подклассов класса A.

servitне заметил, где именно у Вас в структуре хранения фигурирует ID объекта конкретного класса?

Данные хранятся в привычной манере:

Код: sql
1.
2.
3.
4.
^myglobal=1
^myglobal(1)=...
...
^myglobal(1)=...



servitкаким образом Вы будете хранить/использовать индексы по Вашим полям для ускорения поиска?

Еще не думал об этом.

servitпредусматривается ли Вами в дальнейшем доступ к этим классам/данным через SQL?

Нет.
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38909364
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderservitприведите структуру хранения для класса AОна различная для разных подклассов класса A.Это понятно, что у AB и AC она различная, о чём Вы писали выше.
Я спросил именно про класс A, но никак не про его потомков.
Или он у Вас не хранится, т.е. - абстрактный?
jxcoderservitне заметил, где именно у Вас в структуре хранения фигурирует ID объекта конкретного класса?Данные хранятся в привычной манере:Т.е. ID у Вас передаётся в writeToGlobal в самом node?
Приведите, пожалуйста, полностью пример глобала с данными, например, для класса AB. Двух объектов (записей) будет достаточно.А то покаjxcoderMethod writeToGlobal(node As %String, ac As %AC) {
   set @node@( "b" , "field2") = ac.<значение поля field2>
   set @node@("c", "status")  =  < значение поля status>
}не вяжется сjxcoderа для AC надо сохранить данные вот так:

Код: sql
1.
2.
("a", "subtype", "c", "field2") = <значение поля field2>
("a", "subtype", "c", "status") = <значение поля status>

jxcoderservitкаким образом Вы будете хранить/использовать индексы по Вашим полям для ускорения поиска?Еще не думал об этом.Если данные предполагается не просто хранить мёртвым грузом, но и обрабатывать, и их ожидается много, то лучше озаботиться этим сейчас, чем потом. Потом это может быть и наверняка будет "дороже" .
...
Рейтинг: 0 / 0
Как создать глобал с заданным именем?
    #38909520
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

servitЯ спросил именно про класс A, но никак не про его потомков.
Или он у Вас не хранится, т.е. - абстрактный

Класс A действительно абстрактный.

servitТ.е. ID у Вас передаётся в writeToGlobal в самом node?

Да, передается в node .

Я пытаюсь реализовать свою идею сохранения JSON данных в Cache, так как реализация, предоставляемая InterSystems меня не устраивает. Мне нужно нечто большее, чем дает готовая реализация.

Общая идея сохранения JSON: JSON в Cache?

servitЕсли данные предполагается не просто хранить мёртвым грузом, но и обрабатывать, и их ожидается много, то лучше озаботиться этим сейчас, чем потом. Потом это может быть и наверняка будет "дороже" .

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


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