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

Код: 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.
...
<tablePane 
	id="tpMenu" 
	tableName="wrk.Menu" 
	valueColumn="ID"
	pageSize="20" 
	useSnapshot="true" 
	caption="Меню" 
	onselectrow='zenPage.Select(zenThis.getValue("ID"))'
	ondblclick='zenPage.Run(zenThis.getValue("ID"));' 
	sql="Select ID,Name From wrk.Menu Order by Prio"
>
	...
</tablePane>
...
<fieldSet legend="Переместить">
	<button 
		id="bUp" 
		caption="Выше" 
		onclick="zenPage.Up();" 
		controlClass="btn"
	/>
	<button 
		id="bDown" 
		caption="Ниже" 
		onclick="zenPage.Down();" 
		controlClass="btn"
	/>
</fieldSet>
...
/// Элемент вверх
Method Up() [ Language = javascript ]
{
	var cn=zenPage.getComponentById('cnMenu')
	var id = cn.getModelId();
	if (id=='') {
		alert('Нужно выбрать элемент...')
		return
	}
	zenPage.cUp(id)
	zenPage.getComponentById('tpMenu').executeQuery();
}

/// Перемещение элемента вверх
Method cUp(Id) [ ZenMethod ]
{
	s sql="Select ID From wrk.Menu as c Where c.Prio = (Select max(a.Prio) From wrk.Menu as a Where a.Prio < (Select b.Prio From wrk.Menu as b Where b.ID=?))"
	s ors=##class(%ResultSet).%New("%DynamicQuery:SQL")
	s ok=ors.Prepare(sql)
	s:ok ok=ors.Execute(Id)
	if ors.Next() {
		d UP
	}
	d ors.Close()
	q ok
UP // Перемещение элемента
	s id=ors.Get("ID")
	q:id=""
	d ##class(wrk.Menu).SwapPrio(id,Id)
	q
}
...

Так же есть классовый метод

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/// Обмен приоритетами
ClassMethod SwapPrio(Id1 As %String, Id2 As %String) As %String
{
	s o1=##class(wrk.Menu).%OpenId(Id1)
	s o2=##class(wrk.Menu).%OpenId(Id2)
	s val=o1.Prio
	s o1.Prio=o2.Prio
	s o2.Prio=val
	d o1.%Save()
	d o1.%Close()
	d o2.%Save()
	d o2.%Close()
}

В итоге элементы двигаются как нужно. Но часто появляется вот такое окно (см.вложение)... Как с этим бороться?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
ZEN "перемещение" екземпляров в tablePane
    #36276399
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Насколько я понял, зен говорит о том, что обновлять нечего (содержание таблицы не изменилось). Видимо вот здесь проблема:

Код: plaintext
1.
2.
	zenPage.cUp(id)
	zenPage.getComponentById('tpMenu').executeQuery();

вторая строка начала выполняться до завершения первой (для js это норма)

иногда выручает

Код: plaintext
1.
2.
	var temp = zenPage.cUp(id);
	zenPage.getComponentById('tpMenu').executeQuery();

наверно, поможет и


Код: plaintext
1.
2.
	var temp = zenPage.cUp(id);
	if (temp ||  1 = 1 ) zenPage.getComponentById('tpMenu').executeQuery();

наверняка выручит управление zenSynchronousMode, но тормозить будет...
...
Рейтинг: 0 / 0
ZEN "перемещение" екземпляров в tablePane
    #36276410
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov , спасибо! Поэксперементирую...
...
Рейтинг: 0 / 0
ZEN "перемещение" екземпляров в tablePane
    #36276476
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
var temp = zenPage.cUp(id);

Не шибко-то оно и помогает...
Если делать

Код: plaintext
if (temp ||  1 = 1 ) zenPage.getComponentById('tpMenu').executeQuery();

тот же эффект...
Совственно сам вызов

Код: plaintext
zenPage.getComponentById('tpMenu').executeQuery();

Не несет никакого криминала и я всегда делаю кнопку "Обновить" с вызовом этого метода, на тот случай если другие пользователи чего-то там наменяли, а после обновления это можно посмотреть.
Если изменений небыло вызов метода все равно проходит успешно. А вот с "перемещениями" получается такая вот фигня.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
ZEN "перемещение" екземпляров в tablePane
    #36276520
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дописал к методам

Код: plaintext
1.
2.
3.
4.
/// Перемещение элемента вверх
Method cUp(Id) As %String [ ZenMethod ]
...
/// Перемещение элемента вверх
Method cDown(Id) As %String [ ZenMethod ]

Применил как учил kolesov

Код: plaintext
1.
2.
3.
4.
var val=zenPage.cDown(id)
if (val== 1 ){
	zenPage.getComponentById('tpMenu').executeQuery();
}

Ошибка однозначно ушла и вроде как успевает перемещать.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN "перемещение" екземпляров в tablePane
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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