powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / получить ID
23 сообщений из 23, страница 1 из 1
получить ID
    #37711182
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые знатоки Cache !
Созрел у меня вопрос на который я как то не нашел внятный ответ в документации и по этому вынужден обеспокоить вас ....

Как открыть класс с помощью %openId(id) при том что id Неизвестен ?
Вариант с %openId( -не прокатывает т.к. ID могут начинаться с 10000000456348563874653-значения...
Или более корректный вопрос - как программно определить возможно существующий ID чтобы хотябы открыть существующий класс и обратится к его существующим данным?
...
Рейтинг: 0 / 0
получить ID
    #37711184
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069 Как открыть класс с помощью %openId(id) при том что id Неизвестен ?
А что вообще известно про тот экземпляр класса?

alex171069как программно определить возможно существующий ID
ИД он кагбэ есть всегда у экземпляра...

Твоя проблема пока непонятна...
...
Рейтинг: 0 / 0
получить ID
    #37711196
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не совсем поняла. Вам нужно взять первую попавшуюся id в классе и попробовать открыть экземпляр класса по id ?

Ну можно как-то так: &sql(SELECT TOP 1 ID INTO :CLSID FROM my.Class)
 if SQLCODE=0,CLSID'="" {
   set Obj = ##class(my.Class).%OpenId(CLSID)
   if $ISOBJECT(Obj) { w "Удача"} else { w "Неудача"}
 }
или просьба уточнить что вы конретно имели ввиду...
проверить на существование id в классе так же можно с помощью %ExistsId(13213535). Вернет 1, если экземпляр с таким id найден, и 0 в обратном случае
...
Рейтинг: 0 / 0
получить ID
    #37711198
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыла в начале объявить переменную CLSID: set CLSID="" - в начале кода
либо тут еще можно воспользоваться функцией $get(CLSID)
...
Рейтинг: 0 / 0
получить ID
    #37711201
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю проблему ...
Есть некий класс - известно, что в нем есть данные которые надо оттуда извлечь.
Для того что бы извлечь данные из класса надо знать ID ... для успешной работы метода OpenId(
Вот как раз ID я и не знаю посмотрел в глобал класса - там начинается записи с ID = 126913080
И при этом начинаться он может с любой ID т.к. эти данные тестовые.
Так вот и спрашиваю я "как определить ID для открытия объекта ?
Иными словами говоря как выполнить метод
s tick = ##class(Tickets.EBTicket).%OpenId(?)
если в %OpenId(?) непонятно, что подставлять.
...
Рейтинг: 0 / 0
получить ID
    #37711210
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл добавить без использования sql запросов....
...
Рейтинг: 0 / 0
получить ID
    #37711215
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну выберите данные запросом. Может быть, и открывать объект не придется.
...
Рейтинг: 0 / 0
получить ID
    #37711216
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex171069Да, забыл добавить без использования sql запросов....
Код: vbnet
1.
2.
3.
 N ID,tick
 S ID=$o(^Tickets.EBTicketD(""))
 I ID'="" s tick = ##class(Tickets.EBTicket).%OpenId(ID)
...
Рейтинг: 0 / 0
получить ID
    #37711228
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения, что значит команда N ID,tick ?
...
Рейтинг: 0 / 0
получить ID
    #37711239
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Кажется работает.
Вот только что за команда N ID, tick - немного не ясно..!
Но все равно спасибо!!!
...
Рейтинг: 0 / 0
получить ID
    #37711243
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что мои вопросы многим кажутся глупыми.
Но я только осваиваю Cache по этому много еще не знаю...
Спасибо, что ответили на мои вопросы.
...
Рейтинг: 0 / 0
получить ID
    #37711252
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
N- new
S - set
I - if

загляните в хелп ;)
...
Рейтинг: 0 / 0
получить ID
    #37711258
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох да, как же мог забыть про New() !
До сих пор не могу привыкнуть к сокращенным командам ... непривычно это несколько ...
Прошу прощения ...
...
Рейтинг: 0 / 0
получить ID
    #37711291
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему без использования запросов?
Чем использование запросов хуже использования глобалов?
...
Рейтинг: 0 / 0
получить ID
    #37711486
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант set stm=##class(%SQL.Statement).%New() ;"новый" класс запросов - с Cache 2010 и выше
 #; Используем тот факт, что у наследников %Persistent 
 #; определен запрос Extent и в нем только одно поле - ID
 set sc=stm.%PrepareClassQuery("your.className","Extent") Quit:'sc
 set rs=stm.%Execute() Quit:rs.%SQLCODE'=0
 for { Quit:'rs.%Next()
  w !, "ID: ",rs.%GetData(1)
  #; ID могут идти не по возрастанию
  #; делаем что-нить
 }
...
Рейтинг: 0 / 0
получить ID
    #37712358
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069без использования sql запросов....
Секта какая-то? Вера не позволяет?
...
Рейтинг: 0 / 0
получить ID
    #37712777
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaalex171069без использования sql запросов....
Секта какая-то? Вера не позволяет?
Мож институт? (в смысле студент института). Дано задание и поставлено условие: "БЕЗ SQL!!!"
...
Рейтинг: 0 / 0
получить ID
    #37712779
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069Вот только что за команда N ID, tick - немного не ясно..!
alex171069Ох да, как же мог забыть про New() !
alex171069,

кстати, не путайте вот это New
Код: sql
1.
N var1,var2


и вот это New(). Т.к. в первом случае это команда, а во втором - это функция/метод.
...
Рейтинг: 0 / 0
получить ID
    #37715081
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9491962

PS: уже более 7000 просмотров.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
получить ID
    #38713497
ilson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, случайно наткнулся на такое вот чудо [Embedded SQL]. Метод в стандартном классе Sample.Person. Переменной testID1 присвоено очень неверное значение. Cache 2014.1 (Build 603U). Такой баг вряд ли кому-нибудь помешает, но мало ли.ClassMethod Test() As %Status
{
  set (testID1,testID2) = ""
  
  &sql(SELECT ID INTO :testID1
     FROM Sample.Person
     WHERE ID = 'Tadadamm') 
  
  w !,"testID1="_testID1_"|"
  
  &sql(SELECT ID INTO :testID2
     FROM Sample.Person)
  
  w !,"testID2="_testID2_"|"
  
  quit $$$OK
}Результат:

Код: plaintext
1.
2.
do ##class(Sample.Person).Test()
testID1=Tadadamm|
testID2=1|
...
Рейтинг: 0 / 0
получить ID
    #38713509
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLCODE проверяете? Если SQLCODE не равен нулю, то неважно, что оказалось в хост-переменных. Это не баг.
...
Рейтинг: 0 / 0
получить ID
    #38755172
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilsonТакой баг вряд ли кому-нибудь помешает, но мало ли.Нет здесь бага.ДокументацияIn SELECT ... INTO and DECLARE ... SELECT ... INTO statements, the output host variables in the INTO clause are modified if SQLCODE equals 0 (when a valid row is returned), and may have been modified even when SQLCODE is not 0, that is, when no new row was returned.
...
Рейтинг: 0 / 0
получить ID
    #38757370
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069Здравствуйте уважаемые знатоки Cache !
Созрел у меня вопрос на который я как то не нашел внятный ответ в документации и по этому вынужден обеспокоить вас ....

Как открыть класс с помощью %openId(id) при том что id Неизвестен ?
Вариант с %openId( -не прокатывает т.к. ID могут начинаться с 10000000456348563874653-значения...
Или более корректный вопрос - как программно определить возможно существующий ID чтобы хотябы открыть существующий класс и обратится к его существующим данным?

Кстати если не по ID а по свойству - есть еще прекрасные методы IndexOpen("property value") - для открытия объекта по имени.
Например если ID не знаешь, а фамилию знаешь.

Если есть уникальные индексы по свойствам в классе, такие методы генерируются автоматически.

Пример:

Код: plaintext
1.
2.
3.
4.
SAMPLES>s p=##class(Sample.Person).SSNKeyOpen("434-13-7443")
SAMPLES>w p    
2@Sample.Person
SAMPLES>
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / получить ID
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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