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

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

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

Код: 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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36881694
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й Пилигрим,

М.б. через так обойти?
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36881738
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36881770
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36881793
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, в первой строчке конечно background_layer, а не background_layer1 (это я пока тестил намусорил)
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36882054
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё вариант
Код: 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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36882978
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й Пилигримв случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod
Всегда использовали преимущественно ИЕ, начиная с 6.0 - с такой проблемой не сталкивались. Хотя всегда использовал только синхронные вызовы кащейских методов.

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

Твой пример вот все никак не потестю... Заинтриговал.
Ну и как? Протестировал?
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36897594
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й Пилигрим , никак...
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36900995
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й ПилигримНу и как? Протестировал?
Сафари у меня нет... А вот в Хроме посмотрел.
Наши задачки тоже не дюже работают в Хроме... При нажатии на кнопки появляется много каких-то окошек... Но само действие так и не выполняется.
В ИЕ7, ФФ и Опере все отрабатывает.
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36962993
mr.Partizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня!
Пытаюсь сделать описанные методы, получаю ошибку:
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963061
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr.Partizan , где пример странички?
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963096
mr.Partizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963427
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr.Partizan , зачем вызывать ЗЕНовский метод, дабы потом из него вызывать скриптовые?
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963449
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант...

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

В ЗЕНовском методе есть еще код который подтягивает данные из формы + выполняется процедура на основе этих данных. На время выполнения этой процедуры и нужно "завесить" экран.
Может это как-то можно реализовать с помощью ЗЕНовского метода?
...
Рейтинг: 0 / 0
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963602
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963609
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36963724
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36966008
mr.Partizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался в чем было дело.
Нужно было писать 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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36966336
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ZEN: Сихронный и асинхронный вызов серверного метода
    #36968961
mr.Partizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял.
Спасибо!
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN: Сихронный и асинхронный вызов серверного метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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