Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN: Сихронный и асинхронный вызов серверного метода / 23 сообщений из 23, страница 1 из 1
05.10.2010, 10:33
    #36881669
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Добрый день, уважаемые!

Наблюдается весьма странная картина обработки синхронного и асинхронного вызова серверных методов различными браузерами.

Имеется следующая страница:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
Class TestApp.Test Extends %ZEN.Component.page
{

XData Style
{
<style type="text/css">
#background_layer {
	position: absolute;
	display: none;
	top: 0px;
	left: 0px;
	background-color: gray
}
</style>
}

XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html>
<div id="background_layer"></div>
</html>
<button caption="OK" onclick="zenPage.btnClick()"/>
</page>
}

Method btnClick() [ Language = javascript ]
{
	this.showBackgroundLayer()
	var res = this.ServerMethod()
	if (res) this.hideBackgroundLayer()
}

Method showBackgroundLayer() [ Language = javascript ]
{
	var divBackgroundLayer = document.getElementById('background_layer')
	divBackgroundLayer.style.width = document.body.scrollWidth;
	divBackgroundLayer.style.height = document.body.scrollHeight;
	divBackgroundLayer.style.filter = "alpha(opacity=80)";
	divBackgroundLayer.style.opacity =  0 . 3 ;
	divBackgroundLayer.style.display = "block";
}

Method hideBackgroundLayer() [ Language = javascript ]
{
	document.getElementById('background_layer').style.display = "none";
}

Method ServerMethod() as %Boolean [ ZenMethod ]
{
	h  3 
	q $$$OK
}

}


Задача: на время выполнения серверного метода "завешиваем" страницу серым фоном, в случае успешного завершения снимаем фон.

Проблема: наблюдается различное выполнение браузерами в зависимости от способа вызова серверного метода: синхронный или асинхронный.

Точнее: при синхронном вызове (метод ServerTest возвращает значение) Opera и Mozilla отрабатывают правильно (т.е. сначала происходит "завешивание", затем отрабатывается ServerMethod и в случае его успешного завершения "фон" снимается), а в случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod. Если же использовать асинхронный вызов (ServerMethod не возвращает значения), все вроде бы хорошо, но как в таком случае получить результат выполнения ServerMethod?

Вопрос: в чем может быть причина такого поведения в IE, Chrome и Safary? Как можно это обойти?
...
Рейтинг: 0 / 0
05.10.2010, 10:44
    #36881694
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
13-й Пилигрим,

М.б. через так обойти?
...
Рейтинг: 0 / 0
05.10.2010, 11:00
    #36881738
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
kolesov13-й Пилигрим,

М.б. через так обойти?

Если вы имели в виду embeded javascript , то так даже в Opera и FF перестало правильно работать
Код: 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.
Method btnClick() [ Language = javascript ]
{
	var res = this.ServerMethod()
	if (res) this.hideBackgroundLayer()
}

Method showBackgroundLayer() [ Language = javascript ]
{
	var divBackgroundLayer = document.getElementById('background_layer')
	divBackgroundLayer.style.width = document.body.scrollWidth;
	divBackgroundLayer.style.height = document.body.scrollHeight;
	divBackgroundLayer.style.filter = "alpha(opacity=80)";
	divBackgroundLayer.style.opacity =  0 . 3 ;
	divBackgroundLayer.style.display = "block";
}

Method hideBackgroundLayer() [ Language = javascript ]
{
	document.getElementById('background_layer').style.display = "none";
}

Method ServerMethod() as %Boolean [ ZenMethod ]
{
	&js< zenPage.showBackgroundLayer() >
	h  3 
	q $$$OK
}
...
Рейтинг: 0 / 0
05.10.2010, 11:11
    #36881770
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
13-й Пилигрим,

Имел ввиду "Running Background Tasks on the Server" - мы когда-то пробовали, работает...

А в Вашем случае вот так работает все:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ClientMethod btnClick() [ Language = javascript ]
{
	var divBackgroundLayer = document.getElementById('background_layer1')
	divBackgroundLayer.style.width = document.body.scrollWidth;
	divBackgroundLayer.style.height = document.body.scrollHeight;
	divBackgroundLayer.style.background = "red";
	window.setTimeout('var res = zenPage.ServerMethod(); if (res) zenPage.hideBackgroundLayer()', 0 );
}

Иногда очередь JS можно обмануть... Только я для IE и chrome смог проверить.
...
Рейтинг: 0 / 0
05.10.2010, 11:17
    #36881793
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Сорри, в первой строчке конечно background_layer, а не background_layer1 (это я пока тестил намусорил)
...
Рейтинг: 0 / 0
05.10.2010, 12:28
    #36882054
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
ещё вариант
Код: 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.
30.
/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
  <html>
    <div id="background_layer"/>
  </html>
  <button caption="OK" onclick="zenPage.backgroundLayer(true);zenPage.ServerMethod();"/>
</page>
}

ClientMethod backgroundLayer(b) [ Language = javascript ]
{
  var divBackgroundLayer = document.getElementById('background_layer');
  if (b) {
    divBackgroundLayer.style.width = document.body.scrollWidth;
    divBackgroundLayer.style.height = document.body.scrollHeight;
    divBackgroundLayer.style.filter = "alpha(opacity=80)";
    divBackgroundLayer.style.opacity =  0 . 3 ;
    divBackgroundLayer.style.display = "block";
  } else {
    divBackgroundLayer.style.display = "none";
  }
}

ClassMethod ServerMethod() [ ZenMethod ]
{
  h  3 
  &js<zenPage.backgroundLayer(false);>
}
...
Рейтинг: 0 / 0
05.10.2010, 16:36
    #36882978
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
13-й Пилигримв случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod
Всегда использовали преимущественно ИЕ, начиная с 6.0 - с такой проблемой не сталкивались. Хотя всегда использовал только синхронные вызовы кащейских методов.

Твой пример вот все никак не потестю... Заинтриговал.
...
Рейтинг: 0 / 0
13.10.2010, 14:46
    #36897130
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
krvsa13-й Пилигримв случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod
Всегда использовали преимущественно ИЕ, начиная с 6.0 - с такой проблемой не сталкивались. Хотя всегда использовал только синхронные вызовы кащейских методов.

Твой пример вот все никак не потестю... Заинтриговал.
Ну и как? Протестировал?
...
Рейтинг: 0 / 0
13.10.2010, 16:58
    #36897594
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
13-й Пилигрим , никак...
...
Рейтинг: 0 / 0
15.10.2010, 11:43
    #36900995
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
13-й ПилигримНу и как? Протестировал?
Сафари у меня нет... А вот в Хроме посмотрел.
Наши задачки тоже не дюже работают в Хроме... При нажатии на кнопки появляется много каких-то окошек... Но само действие так и не выполняется.
В ИЕ7, ФФ и Опере все отрабатывает.
...
Рейтинг: 0 / 0
18.11.2010, 06:39
    #36962993
mr.Partizan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Доброго всем дня!
Пытаюсь сделать описанные методы, получаю ошибку:
...
Рейтинг: 0 / 0
18.11.2010, 08:56
    #36963061
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.Partizan , где пример странички?
...
Рейтинг: 0 / 0
18.11.2010, 09:29
    #36963096
mr.Partizan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
krvsa mr.Partizan , где пример странички?

Пытаюсь сделать так:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html>
<div id="background_layer"/>
</html>
<spacer height="5"/>
<button caption="Выполнить" onclick="zenPage.Get();"/>
</page>
}

Method Get() [ ZenMethod ]
{
	&js< zenPage.showBackgroundLayer(); >
	h  3 
	&js< zenPage.hideBackgroundLayer(); >
}

Method showBackgroundLayer() As %Boolean [ Language = javascript ]
{
	var divBackgroundLayer = zenPage.getComponentById('background_layer')
	divBackgroundLayer.style.width = document.body.scrollWidth;
	divBackgroundLayer.style.height = document.body.scrollHeight;
	divBackgroundLayer.style.filter = "alpha(opacity=80)";
	divBackgroundLayer.style.opacity =  0 . 3 ;
	divBackgroundLayer.style.display = "block";
	
}

Method hideBackgroundLayer() As %Boolean [ Language = javascript ]
{
	zenPage.getComponentById('background_layer').style.display = "none";
	
}

}
...
Рейтинг: 0 / 0
18.11.2010, 11:55
    #36963427
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.Partizan , зачем вызывать ЗЕНовский метод, дабы потом из него вызывать скриптовые?
...
Рейтинг: 0 / 0
18.11.2010, 12:00
    #36963449
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Как вариант...

Код: plaintext
1.
2.
3.
4.
Method Get() [ Language = javascript ]
{
	zenPage.showBackgroundLayer();
	zenPage.hideBackgroundLayer(); 
}
...
Рейтинг: 0 / 0
18.11.2010, 12:09
    #36963475
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.Partizan , причем не рентабельно писать цсс-свойства в программке... Годаздо эффективнее подготовить несколько классовых селекторов в цсс, а потом только менять свойство className у самих хтмл-элементов.
...
Рейтинг: 0 / 0
18.11.2010, 12:37
    #36963565
mr.Partizan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
krvsa mr.Partizan , зачем вызывать ЗЕНовский метод, дабы потом из него вызывать скриптовые?

В ЗЕНовском методе есть еще код который подтягивает данные из формы + выполняется процедура на основе этих данных. На время выполнения этой процедуры и нужно "завесить" экран.
Может это как-то можно реализовать с помощью ЗЕНовского метода?
...
Рейтинг: 0 / 0
18.11.2010, 12:51
    #36963602
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.PartizanМожет это как-то можно реализовать с помощью ЗЕНовского метода?
Нет. Только скриптовым...
Но из скриптового зеновский вызывается просто.



Этот тест даёт ответ на твою проблему...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Method showBackgroundLayer() As %Boolean [ Language = javascript ]
{
	var o = document.getElementById('background_layer')
	alert(o)
	var divBackgroundLayer = zenPage.getComponentById('background_layer')
	alert(divBackgroundLayer)
	divBackgroundLayer.style.width = document.body.scrollWidth;
	divBackgroundLayer.style.height = document.body.scrollHeight;
	divBackgroundLayer.style.filter = "alpha(opacity=80)";
	divBackgroundLayer.style.opacity =  0 . 3 ;
	divBackgroundLayer.style.display = "block";
	
}
...
Рейтинг: 0 / 0
18.11.2010, 12:53
    #36963609
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
krvsaНо из скриптового зеновский вызывается просто.
Вот пример из нашей странички...

Код: 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.
/// Добавить элемент в таблицу
Method TblAdd() [ Language = javascript ]
{
	var ok=confirm('Вы действительно хотите добавить исполнителя?')
	if (!ok) {
		return false
	}
	var id=zenPage.getComponentById('cnItem').getModelId()
	if (id=='') {
		alert('Нет возможности определить ID работы...')
		return false
	}
	ok=zenPage.cTblAdd(id)
	zenPage.idItem=id
	zenPage.getComponentById('tpStage').executeQuery();
}

/// Добавить сзязаный элемент в таблицу
ClassMethod cTblAdd(Id) As %String [ ZenMethod ]
{
	s o1=##class(wrk.Job).%OpenId(Id)
	s o2=##class(wrk.Stage).%New()
	s o2.Job=o1
	d o2.%Save()
	d o2.%Close()
	d o1.%Close()
	q $$$OK
}
...
Рейтинг: 0 / 0
18.11.2010, 13:22
    #36963724
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.Partizan[нужно "завесить" экран.
На каждой зен-странице есть див с ид="zenModalDiv"... Используй его. Т.к. свой просто так еще и не расположишь как надо.
Пример засветки экрана:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
/// test
Class tmp.ZEN.test Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "wrk.ZEN.Set";

/// Displayed name of this page.
Parameter PAGENAME;

/// Domain used for localization.
Parameter DOMAIN = "webdev";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
#zenModalDiv {
	position: fixed;
	top:  0 ;
	left:  0 ;
	width:  100 %;
	height:  100 %;
	filter: alpha(opacity= 80 );
	opacity:  0 . 3 ;
	background-color: # 000000 ;
	display: none;
}
</style>
}

/// This XML block defines the contents of this page.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html>
<div id="background_layer">test</div>
</html>
<spacer height="5"/>
<button caption="Выполнить" onclick="zenPage.Get();"/>
</page>
}
Method Get() [ Language = javascript ]
{
	zenPage.showBackgroundLayer();
	//alert( 1 )
	//zenPage.hideBackgroundLayer(); 
}

Method showBackgroundLayer() As %Boolean [ Language = javascript ]
{
	document.getElementById('zenModalDiv').style.display = "block";
	
}

Method hideBackgroundLayer() As %Boolean [ Language = javascript ]
{
	document.getElementById('zenModalDiv').style.display = "none";
	
}
}

Но старые версии ИЕ отвратно работают с

Код: plaintext
position: fixed;

Как вариант заменть на

Код: plaintext
position: absolute;
...
Рейтинг: 0 / 0
19.11.2010, 14:25
    #36966008
mr.Partizan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Разобрался в чем было дело.
Нужно было писать ClientMethod а не Method для скриптовых методов, но студия 2008 CACHE "ругалась" при этом. После установки 2010 CACHE все заработало.

в итоге сделал так:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
	background: #C5D6D6;
	color: black;
	font-family: Verdana;
	font-size:  1 .5em;
	font-weight: bold;
	padding: 5px;
	border-bottom: 1px solid black;
	text-align: center;
}
div#progressbox {
	position: absolute;
	width: 500px;
	border: #cccccc 1px solid;
	color: black;
	font-weight: bold;
	font-size: 8pt;
	background-color: #F5F5F5;
	display: none;
	text-align: center;
	padding-top: 30px;
	padding-bottom: 30px;
}
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<form id="fmTest" name="fmTest">
<button caption="Выполнить" onclick="zenPage.Get();"/>
</form>
 <html>
 <div id="progressbox">
  Пожалуйста, подождите. Идет обработка запроса...<br/><br/>
 </div>
 </html>
 </page>
}
ClientMethod Get() [ Language = javascript ]
{
zenPage.showBackgroundLayer('fmTest');
var res = this.ServerMethod()
zenPage.hideBackgroundLayer('fmTest');
}

ClientMethod showBackgroundLayer(formName) As %Boolean [ Language = javascript ]
{
	document[formName].parentNode.parentNode.style.filter = "Alpha(opacity=25), blue()";
	document[formName].style.MozOpacity = "0.25";
	document[formName].style.opacity = "0.25";
	document.getElementById('progressbox').style.top = document.body.scrollTop + document.body.clientHeight /  2  -  100 ;
	document.getElementById('progressbox').style.left = document.body.offsetWidth /  2  -  250 ;
	document.getElementById('progressbox').style.display = "block";
	document.body.style.cursor = 'progress'
	return true
}
ClientMethod hideBackgroundLayer(formName) As %Boolean [ Language = javascript ]
{
	document[formName].parentNode.parentNode.style.filter = "";
	document[formName].style.MozOpacity = "1";
	document[formName].style.opacity = "1";
	document.getElementById('progressbox').style.display = "none";
	document.body.style.cursor = 'auto'
	return true
	
}
Method ServerMethod() as %Boolean [ ZenMethod ]
{
	h  3 
	q $$$OK
}


В итоге результат: в Opera и Mozilla завешивание происходит корректно, а вот в IE не совсем ((
...
Рейтинг: 0 / 0
19.11.2010, 16:33
    #36966336
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
mr.Partizan

Синхронный вариант
Class sqlru.test1 Extends %ZEN.Component.page
{
/// Отображаемое имя для нового приложения.
Parameter PAGENAME;
/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
#progressbox {
  position: absolute;
  width: 500px;
  border: #cccccc 1px solid;
  color: black;
  font-weight: bold;
  font-size: 8pt;
  background-color: #F5F5F5;
  display: none;
  text-align: center;
  padding-top: 30px;
  padding-bottom: 30px;
}
</style>
}
/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
<form id="fmTest" name="fmTest">
<button caption="Выполнить" onclick="zenPage.Get();"/>
 <html OnDrawContent="MyDraw" seed="40"/>
</form>
 <html id="progressbox">
  Пожалуйста, подождите. Идет обработка запроса...<br/><br/>
 </html>
 </page>
}

ClientMethod Get() [ Language = javascript ]
{
  zenPage.showBackgroundLayer('fmTest');
  //идея предложена  kolesov
  window.setTimeout('var res = zenPage.ServerMethod(); if (res) zenPage.hideBackgroundLayer("fmTest")',0);
}

ClientMethod showBackgroundLayer(formName) As %Boolean [ Language = javascript ]
{
  document[formName].parentNode.parentNode.style.filter = "Alpha(opacity=25), blue()";
  document[formName].style.MozOpacity = "0.25";
  document[formName].style.opacity = "0.25";
  var div=zen('progressbox').getEnclosingDiv();
  div.style.top = document.body.scrollTop + document.body.clientHeight / 2 - 100;
  div.style.left = document.body.offsetWidth / 2 - 250;
  div.style.display = "block";
  
  document.body.style.cursor = "progress";
}

ClientMethod hideBackgroundLayer(formName) As %Boolean [ Language = javascript ]
{
  document[formName].parentNode.parentNode.style.filter = "";
  document[formName].style.MozOpacity = "1";
  document[formName].style.opacity = "1";
  zen('progressbox').getEnclosingDiv().style.display = "none";
  
  document.body.style.cursor = "auto";
}

ClassMethod ServerMethod() As %Boolean [ ZenMethod ]
{
  hang 3
  quit $$$YES
}

Method MyDraw(pSeed As %String) As %Status
{
  set s=$replace($j("",pSeed)," ","O")
  for i=1:1:pSeed &html<#(s)#<br>>
  Quit $$$OK
}
}

Асинхронный вариант
Class sqlru.test2 Extends %ZEN.Component.page
{
/// Отображаемое имя для нового приложения.
Parameter PAGENAME;
/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
</style>
}
/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
<form id="fmTest" name="fmTest">
<button caption="Выполнить" onclick="zenPage.Get();"/>
</form>
 <html OnDrawContent="MyDraw" seed="40"/>
 </page>
}

ClientMethod Get() [ Language = javascript ]
{
  zen('fmTest').startProgressBar();
  zenPage.ServerMethod(); 
}

ClassMethod ServerMethod() [ ZenMethod ]
{
  &js<
  // по завершении выполнения серверного метода этот скрипт будет отправлен на клиент для выполнения
  var comp=zen('fmTest');
  comp.stopProgressBar();
  comp.refreshContents();
  >
  hang 3
}

Method MyDraw(pSeed As %String) As %Status
{
  set s=$replace($j("",pSeed)," ","O")
  for i=1:1:pSeed &html<#(s)#<br>>
  Quit $$$OK
}
}
...
Рейтинг: 0 / 0
22.11.2010, 09:33
    #36968961
mr.Partizan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN: Сихронный и асинхронный вызов серверного метода
Понял.
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN: Сихронный и асинхронный вызов серверного метода / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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