Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как oID преобразовать в ID? / 14 сообщений из 14, страница 1 из 1
02.12.2009, 09:18
    #36342475
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
Как 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
02.12.2009, 09:25
    #36342491
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
Причем 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
02.12.2009, 09:36
    #36342515
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
Код: plaintext
o.Purpose.%Id()
...
Рейтинг: 0 / 0
02.12.2009, 09:39
    #36342523
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
servit , спасибо.

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

Код: plaintext
1.
2.
// для ID
s o=##class(wrk.Vers).%OpenId(Id)
...
Рейтинг: 0 / 0
02.12.2009, 09:44
    #36342533
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
ну 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
02.12.2009, 10:09
    #36342594
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
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
02.12.2009, 10:27
    #36342654
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
servitНе путайте OREF и его строковое представление.

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

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

PS: с чем связана такая необходимость?
...
Рейтинг: 0 / 0
02.12.2009, 18:56
    #36344445
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
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
02.12.2009, 22:54
    #36344667
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
servitс чем связана такая необходимость?

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

Ясно...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.01.2015, 15:49
    #38860823
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как oID преобразовать в ID?
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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как oID преобразовать в ID? / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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