Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в ZEN использовать оператор косвенности "@" / 6 сообщений из 6, страница 1 из 1
27.04.2010, 23:03
    #36601809
fotopravka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ZEN использовать оператор косвенности "@"
Добрый день. Имеется следующая ситуация.
Имеем код, который в исполняемом коде 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
27.04.2010, 23:48
    #36601858
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ZEN использовать оператор косвенности "@"
бросьте изобретение велосипедов, они же давно изобретены

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

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

Похожая проблема уже была .
...
Рейтинг: 0 / 0
29.04.2010, 16:25
    #36605618
fotopravka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ZEN использовать оператор косвенности "@"
DAiMor,
ProcedureBlock не прошел. Не сработал (ни 1 ни 0).
...
Рейтинг: 0 / 0
29.04.2010, 16:32
    #36605639
fotopravka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ZEN использовать оператор косвенности "@"
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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в ZEN использовать оператор косвенности "@" / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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