powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как oID преобразовать в ID?
14 сообщений из 14, страница 1 из 1
Как oID преобразовать в ID?
    #36342475
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как oID преобразовать в ID? Т.е. именю значение свойства в некоем экземпляре, его нужно "правильно" передать в SQL.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/// Состав заполнить
ClassMethod cVersLoad(Id) As %String [ ZenMethod ]
{
	s o=##class(wrk.Vers).%OpenId(Id)
	s sql="Update wrk.Stage Set Vers=? Where VersBlock is NULL and Vers is NULL and Purpose=? and dEnd<=?"
	s ors=##class(%ResultSet).%New("%DynamicQuery:SQL")
	s ok=ors.Prepare(sql)
	s:ok ok=ors.Execute(Id,o.Purpose,o.dBrk)
	d ors.Close()
	d o.%Close()
	q $$$OK
}

Но o.Purpose равен "7@wrk.Purpose" ... Как ореф преобразовать в ID? Есть какие-то методы для этого?
Просто взять

Код: plaintext
s id=$p(o.Purpose,"@")

а вдруг потом что-то поменяют...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342491
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем sql-запрос

Код: plaintext
1.
2.
3.
Select
*
From
wrk.Vers

Показывает что свойство Purpose равно 1 (т.е. нужный мне ID). Т.е. не как не $p(o.Purpose,"@")...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342515
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
o.Purpose.%Id()
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342523
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit , спасибо.

И в след, вопрос...
Зная ореф как получить доступ к экземпляру?

Код: plaintext
1.
2.
// для ID
s o=##class(wrk.Vers).%OpenId(Id)
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342533
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну oref насколько я понимаю содержит номер обьекта по порядку в пределах процесса и через @ класс к которому этот объект принадлежит

на самом деле ID записи можно получить через %Id()
либо PropertyGetObjectId()
где Property любое объектное свойство
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342594
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To krvsa

Доступ к экземпляру можно получить по его ID или OID: Referring to an Object — OREF, OID, and ID .
Если у Вас есть OREF в некоторой переменной, то это и есть уже экземпляр некоторого класса.
Не путайте OREF и его строковое представление.
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SAMPLES>set t=##class(Sample.Person).%OpenId( 1 )
SAMPLES>w t
 2 @Sample.Person
SAMPLES>w $IsObject(t)
 1 
SAMPLES>w $IsObject("2@Sample.Person")
 0 
SAMPLES>
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342654
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНе путайте OREF и его строковое представление.

Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342710
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть еще такие функции:
имя_поляGetObjectId()
имя_поляSetObjectId(...)
они формируются автоматически для хранимого класса, при условии что "имя_поля" - это ссылка на другой класс
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36342719
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?
через "." (точку) в объектном доступе, и через "->" в SQL доступе
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36344322
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaservitНе путайте OREF и его строковое представление.

Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?
Не знаю, возможно ли это.
Попробуйте классы пакета %Debugger .

PS: с чем связана такая необходимость?
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36344445
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa >> Причем sql-запрос Показывает что свойство Purpose равно 1 (т.е. нужный мне ID).

Это потому что твоя версия каше умеет передовать в &SQL объекты - она там сама достает ID через .%Id()

>>Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?

Никак - номер в орефе - это номер счетчика открытых объектов, а не его ID.

Код: 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.
SAMPLES>set obj=##class(Sample.Person).%OpenId( 42 )
SAMPLES>write
obj=<OBJECT REFERENCE>[ 1 @Sample.Person]

SAMPLES>d $system.OBJ.Dump(obj)
+----------------- general information ---------------
|      oref value:  1 
|      class name: Sample.Person
|             OID: $lb("42","Sample.Person")
| reference count:  2  (system)
+----------------- attribute values ------------------
|     (%Concurrency) =  1 
|                DOB =  45867 
|  FavoriteColors( 1 ) = "Red"
|  FavoriteColors( 2 ) = "Green"
|               Home = $lb("1561 Madison Street","Fargo","KY", 58998 )
|               Name = "Murray,Richard Y."
|             Office = $lb("4113 Maple Place","Washington","WV", 60176 )
|                SSN = "850-84-2747"
|             Spouse = ""
+----------------- swizzled references ---------------
|           (none)
+-----------------------------------------------------
 
SAMPLES>set obj2=##class(Sample.Person).%OpenId( 12 )
SAMPLES>set obj3=##class(Sample.Person).%OpenId( 1 )
SAMPLES>write
obj=<OBJECT REFERENCE>[ 1 @Sample.Person]
obj2=<OBJECT REFERENCE>[ 2 @Sample.Person]
obj3=<OBJECT REFERENCE>[ 3 @Sample.Person]
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36344667
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitс чем связана такая необходимость?

Это был чисто теоретический интерес... Т.е. как бы в продолжение первого вопроса...
...
Рейтинг: 0 / 0
Как oID преобразовать в ID?
    #36344669
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnНикак

Ясно...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как oID преобразовать в ID?
    #38860823
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitkrvsaпропущено...


Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?
Не знаю, возможно ли это.Ptn>>Хорошо... Как имея строковое представление орефа получить доступ к экземпляру?

Никак - номер в орефе - это номер счетчика открытых объектов, а не его ID.Всё таки возможно:  s oref=$this

  s orefI=+oref   ; OREF в виде числа
  s orefS=oref_"" ; OREF в виде строки

  // восстанавливаем OREF
  s oref1=$zobjref(orefI)
  s oref2=$zobjref(orefS)

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


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