powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в ZEN использовать оператор косвенности "@"
6 сообщений из 6, страница 1 из 1
Как в ZEN использовать оператор косвенности "@"
    #36601809
fotopravka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Имеется следующая ситуация.
Имеем код, который в исполняемом коде Cache работает без проблем


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	 Set Em=##class(B.Gr).%OpenId( 1 )
	 Set EmKOD=Em.KOD 
              Set m4TKOD=EmKOD_"4t"

              Set lastID=##class(B.m4).%OpenId( 820 ) 
	 Set qqq="ww2=lastID."_m4TKOD,@qqq 
	 Set Em.Tc=ww2
	 Do Em.%Save()

В результате код работает. Проверено в Терминале.

Делаю то же самое в ZEN

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Class Gr.H1G1 Extends Gr.AbstraktHome
{
Parameter PAGENAME = "H1G1";
XData Proba [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="H1G1">
</pane>
}
	Method Tcena(pSeed As %String) [ ZenMethod ]
{
	 Set Em=##class(B.Gr).%OpenId( 1 )
	 Set EmKOD=Em.KOD 
              Set m4TKOD=EmKOD_"4t"

              Set lastID=##class(B.m4).%OpenId( 820 ) 
	 Set qqq="ww2=lastID."_m4TKOD,@qqq 
	 Set Em.Tc=ww2
	 Do Em.%Save()
	Quit $$$OK
}

И код не работает. Пишет, что не определен параметр lastID. В то же время, если поменять в этом коде одну строку (убрать её) то все работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	Method Tcena(pSeed As %String) [ ZenMethod ]
{
	 Set Em=##class(B.Gr).%OpenId( 1 )
	 Set EmKOD=Em.KOD 
              Set m4TKOD=EmKOD_"4t"

              Set lastID=##class(B.m4).%OpenId( 820 ) 

	 Set Em.Tc= 500 
	 Do Em.%Save()
	Quit $$$OK
}

убрал
Код: plaintext
Set qqq="ww2=lastID."_m4TKOD,@qqq 
и вместо ww2 подставил числовое значение равное 500 (любое число).
Все работает - запись идет в базу.
То есть методами тыка понял, что ZEN (методы) напрочь не хотят работать с операторами косвенности.
Проштудировал весь мануал по "оператору косвенности" - про исполняемый код Кэш есть инфа и все работает, а вот про ZEN нигде ни слова, что такое возможно или невозможно. В реальности оператор косвенности в ЗЕН не работает.

Может я чего не так делаю. Мануал по ZEN по этому вопросу вообще ни слова!
Народ, кто что знает? Возможно использование оператора косвенности "@" в ZEN или нет. И как можно поступить в данной ситуации.
Число зависит от загружаемой страницы (которая цепляет определенный элемент из базы). Так что простой ввод числа здесь не работает. Оператор косвенности в самый раз!
...
Рейтинг: 0 / 0
Как в ZEN использовать оператор косвенности "@"
    #36601858
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бросьте изобретение велосипедов, они же давно изобретены

давно уже есть $zobjXXX , функции
в этом коде вам нужна $zobjproperty

c 2010 версии, они переименованы
...
Рейтинг: 0 / 0
Как в ZEN использовать оператор косвенности "@"
    #36601862
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и кстати наверняка дело не в ZEN, в классах в принципе,
там по умолчанию стоит ProcedureBlock
этот параметр влияет на область видимости переменных, т.е. по умолчанию
будь то косвенность или код выполняемый через Xecute, внутри этого выполняемого кода не будут доступны внешние переменные и наоборот
чтобы заработало, нужно поставить на класс, или на метод [ ProcedureBlock = 0 ]
...
Рейтинг: 0 / 0
Как в ZEN использовать оператор косвенности "@"
    #36602128
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fotopravka,

Похожая проблема уже была .
...
Рейтинг: 0 / 0
Как в ZEN использовать оператор косвенности "@"
    #36605618
fotopravka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
ProcedureBlock не прошел. Не сработал (ни 1 ни 0).
...
Рейтинг: 0 / 0
Как в ZEN использовать оператор косвенности "@"
    #36605639
fotopravka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Прошло на ура и с минимальными исправлениями кода!!!

получил


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Class Gr.H1G1 Extends Gr.AbstraktHome
{
Parameter PAGENAME = "H1G1";
XData Proba [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="H1G1">
</pane>
}
	Method Tcena(pSeed As %String) [ ZenMethod ]
{
	 Set Em=##class(B.Gr).%OpenId( 1 )
	 Set EmKOD=Em.KOD 
              Set m4TKOD=EmKOD_"4t"
              Set lastID=##class(B.m4).%OpenId( 820 ) 
              Set ww2=$ZOBJPROPERTY(lastID,m4TKOD)
	 Set Em.Tc=ww2
	 Do Em.%Save()
	Quit $$$OK
}

Большое спасибо!

Я до этого сдулал немного другой код:

Код: plaintext
1.
Do Tcena^ZamTceni
Quit $$$OK

где
Код: plaintext
ZamTceni 
это выполняемый блок кода в ращделе программа (програмка по сути). Но получилось хуже - больше кода и обращение во вне.

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


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