Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как обратиться к методу класса из другой области? / 13 сообщений из 13, страница 1 из 1
26.03.2012, 04:31
    #37722442
Denis S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Приветствую.

Как обратиться к методу класса, расположенного в другой области?
Например:

TEMP>do ##class(CObj.Container).FDemand("FFFF3344")

DO ##CLASS(CObj.Container).FDemand("FFFF3344")
^
<CLASS DOES NOT EXIST> *CObj.Container

Класс CObj.Container находится в другой области.

С глобалами такое возмножно:
TEMP>set ^["WORK"]GlobName("aa")="44",
а с классами можно работать подобным образом?
...
Рейтинг: 0 / 0
26.03.2012, 05:05
    #37722446
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
а если непосредственно перед вызовом метода сменить область, а затем восстановить исходную?
Код: html
1.
2.
3.
zn "другая область"
DO ##CLASS(CObj.Container).FDemand("FFFF3344")
zn "temp"
...
Рейтинг: 0 / 0
26.03.2012, 05:08
    #37722448
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
еще можно текущую область (до вызова метода) "запомнить" в переменную : set ns = $znspace
...
Рейтинг: 0 / 0
26.03.2012, 06:45
    #37722452
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
мы обычно так и делаем (переход в другую область, выполнение и возврат).
Учтите, данные будут тоже в другой области.
...
Рейтинг: 0 / 0
26.03.2012, 07:23
    #37722462
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
вот кусок работающего кода:
set ns = $namespace
set $namespace = namespaceAgp
$$$QuitOnError(##class(ext.Synchronization).Save(%this))
set $namespace = ns
quit $$$OK
...
Рейтинг: 0 / 0
26.03.2012, 07:49
    #37722471
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
м-да, работающий косяк :(, надо в область вовремя вернуться:
set ns = $namespace
set $namespace = namespaceAgp
set sc = ##class(ext.Synchronization).Save(%this) // в другой области
set $namespace = ns
$$$QuitOnError(sc)
quit $$$OK
...
Рейтинг: 0 / 0
26.03.2012, 10:41
    #37722693
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Кстати, есть возможность "ньючить" $namespace, что может помочь распрямить код и перестать бояться не вернуться "домой". Т.е., в примере от ser_shu:
Код: sql
1.
2.
3.
4.
5.
myfun() 
  new $namespace
  set $namespace = namespaceAgp
  $$$QuitOnError(##class(ext.Synchronization).Save(%this))
  quit $$$OK
...
Рейтинг: 0 / 0
26.03.2012, 16:01
    #37723351
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Alexey MaslovКстати, есть возможность "ньючить" $namespace, что может помочь распрямить код и перестать бояться не вернуться "домой".Красивая фича, но мозги снесет. Сразу мерещится procedureblock с заньюенными системными переменными. Кошмарных снов.
...
Рейтинг: 0 / 0
26.03.2012, 16:25
    #37723449
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
ser_shu,

а в чём кошмар? New системной переменной ничем отличается от new публичной переменной...
Просто сама переменная относительно новая, как-то тихо появилась. Что касается более старых, то "new $ecode" уже второе десятилетие используется ))
...
Рейтинг: 0 / 0
26.03.2012, 16:29
    #37723458
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Имел в виду "new $etrap", конечно.
...
Рейтинг: 0 / 0
27.03.2012, 02:47
    #37724493
Denis S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Переход в другой namespace и обратно занимает много времени.
Проверял на работе с глобалами, поэтому и не хочется менять область, а желательно именно вызывать из другой области.
...
Рейтинг: 0 / 0
27.03.2012, 09:33
    #37724682
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Denis S.Переход в другой namespace и обратно занимает много времени.
Проверял на работе с глобалами
вот тут поподробней, как проверяли, не совсем понятно ?
...
Рейтинг: 0 / 0
27.03.2012, 20:26
    #37726197
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обратиться к методу класса из другой области?
Denis S.Переход в другой namespace и обратно занимает много времени.
Проверял на работе с глобалами, поэтому и не хочется менять область, а желательно именно вызывать из другой области. Отображение пакетов

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


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