Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN <tablePane> фильтр по столбцу / 17 сообщений из 17, страница 1 из 1
20.12.2007, 23:45
    #35024946
Peter Zarubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Уважаемые коллеги!
Кто-нибудь юзал ZEN tablePane?
Столкнулся с такой проблемой: Обнаружил, что фильтр по столбцу, задаваемый в теге <column /> не работает, если к tablePane прикручен набор данных не из таблицы, а из запроса,задаваймый параметрами queryClass, queryName.
Ниже приведу тестовый пример:

1. Имею класс с данными:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Class Expenses.Day.Test Extends (%Persistent, %Populate)
{
Property Date As %Date [ Required, SqlFieldName = pDate ];
Property Currency As %Integer(VALUELIST = ",810,840");
Property SumExpenses As %Currency(FORMAT = "-");

Query Query1() As %SQLQuery
{
SELECT Currency,pDate,SumExpenses FROM Test
}

}


2. Задаю на странице ZEN 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.
<tableNavigatorBar tablePaneId="table" showPageSize="true" showFilter="false"/>
<spacer height="10"/>
<tablePane id="table" 
	caption="ОПЕРАЦИОННЫЕ ДНИ"
	useSnapshot="true"
	showFilters="true"
	showQuery="true"
	showZebra="true"
	pageSize="20"
	
        queryClass="Expenses.Day.Test"
	queryName="Query1"
        
	autoExecute="true"
	
	>
	
<column colName="pDate" width="auto" />
<column colName="Currency" 
 filterType="enum"
 filterEnum="810,840"
 filterEnumDisplay="RUR,USD"
 filterOp="="
 width="100"
 

/>
<column colName="SumExpenses" width="auto"/>

</tablePane>
<spacer height="10px;" />


При отображении страницы, если выбираю в фильтре значения, то таблица не обновляется!!

Обнаружил, что если прикрутить не Query1, а указать
вместо
Код: plaintext
1.
2.
queryClass="Expenses.Day.Test"
queryName="Query1"
указать
Код: plaintext
1.
tableName="Expenses_Day.Test"

то при таком варианте, фильтр работает. Есть ли решение, чтобы tablePane работал с Query?
Или, может быть я что-то позабыл указать?
...
Рейтинг: 0 / 0
20.12.2007, 23:50
    #35024951
Peter Zarubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Можно, конечно, переопределить метод filterChanged класса %ZEN.Component.tablePane, и вручную задавать параметры запроса, выполнять его и.т.п.

Это работа напильником, придется переписывать половину исходников tablePane, что не особенно "шоколадно"
...
Рейтинг: 0 / 0
21.12.2007, 04:13
    #35025042
logist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
> Столкнулся с такой проблемой: Обнаружил, что фильтр по столбцу,
> задаваемый в теге <column /> не работает, если к tablePane прикручен
> набор данных не из таблицы, а из запроса,задаваймый параметрами
> queryClass, queryName.
Дык, к такому запросу, насколько я помню, дополнительные условия нельзя
прикрутить. Только те, что определены в запросе. Поэтому фильтр и не работает.

Любви.
logist (Sergei Shutov)
Dimas ltd., Khabarovsk
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2007, 04:15
    #35025044
Tosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Почитайте справку о формировании собственных рекордсетов (сам не работал, но где-то об этом читал) - зэн не умеет фильтровать запросы в таком виде
...
Рейтинг: 0 / 0
08.01.2008, 00:33
    #35047604
Peter Zarubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
ToshПочитайте справку о формировании собственных рекордсетов (сам не работал, но где-то об этом читал) - зэн не умеет фильтровать запросы в таком виде

Получилось решить проблему через создание метода
Код: plaintext
1.
2.
3.
/// Create the result set used by the table pane.
/// <var>pInfo</var> holds details on how to create the query.
Method CreateRS(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet

В нем вручную создаю запрос, попутно считывая значения из фильтра

а в элементе <tablePane id="table" OnCreateResultSet="CreateRS" />
прописываю ссылку на этот метод, по которому он создает %ResultSet
...
Рейтинг: 0 / 0
16.01.2008, 08:35
    #35064268
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
2 Peter Zarubin

А содержимое метода не покажете? Как вы считываете значение из фильтра?


-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
16.01.2008, 21:40
    #35066809
Peter Zarubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Аленочка2 Peter Zarubin
А содержимое метода не покажете? Как вы считываете значение из фильтра?


В метод же передается переменная pInfo As %ZEN.Auxiliary.QueryInfo (pInfo и содержит значение фильтра)
В документации есть пример:

Код: 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.
Method CreateRS(Output tSC As %Status, 
                pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet
{
    Set tRS = ""
    Set tSC = $$$OK
    Set tSELECT = "ID,Name,Title"
    Set tFROM = "MyApp.Employee"
    Set tORDERBY = pInfo.sortColumn
    Set tSORTORDER = pInfo.sortOrder
    Set tWHERE = ""
    // Build WHERE clause based on filters
    If ($GET(pInfo.filters("Name"))'="") {
        Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ 
                "Name %STARTSWITH '" _ pInfo.filters("Name") _ "'"
    }
    If ($GET(pInfo.filters("Title"))'="") {
        Set tWHERE = tWHERE _ $SELECT(tWHERE="":"", 1 :" AND ") _ 
                "Title %STARTSWITH '" _ pInfo.filters("Title") _ "'"
    }
    Set sql = "SELECT " _ tSELECT _ " FROM " _ tFROM
    Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE
    Set:tORDERBY'="" sql = 
       sql _ " ORDER BY " _tORDERBY _ $SELECT(tSORTORDER="desc":" desc", 1 :"")
    Set tRS = ##class(%ResultSet).%New()
    Set tSC = tRS.Prepare(sql)
    Set pInfo.queryText = sql
    
    Quit tRS

http://localhost:57772/csp/docbook/DocBook.UI.Page.cls?KEY=GZEN_tables#GZEN_B9938
...
Рейтинг: 0 / 0
24.01.2008, 09:43
    #35083754
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Такой вопрос уже возник давно.
дал сигнал в WRC, ничего конкретного не ответили, но обещали в следующей версии исправить
есть еще вот такой вариант обхода:
<tablePane id="table"
pageSize="25"
useSnapshot="1"
tableName="имя таблицы"
showValueInTooltip="1"
rowSelect="false"
showFilters="true"
headerLayout="headersOnTop"
autoExecute="0"
showQuery="0">
<column colName="SEX"
colExpression="sex->Name"
header="Пол "
width="62"
hidden="false"
filterType="query"
filterQuery="SELECT Id,Kod FROM hndb.sex WHERE Id in (1,2)"
filterOp="="
filterValue="1"/>
</tablePane>
вроде работает
...
Рейтинг: 0 / 0
08.02.2008, 09:29
    #35118693
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
вчера прикинул вот такую схему:
))) работает !

<column colExpression="CASE idGorod WHEN '' THEN null WHEN null THEN null ELSE idGorod->idCity->Name END" colName="idGorod"
header="Город" width="170"
filterType="query"
filterQuery="SELECT idGorod,idGorod->idCity->Name FROM Таблица WHERE idGorod->idCity->Name NOT IN ('') AND idGorod is not null GROUP BY idGorod ORDER BY idGorod->idCity->Name"
filterOp="="
/>
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.02.2009, 12:09
    #35807733
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Так что? Так и нет рекомендаций по этому вопросу?

Код: plaintext
1.
2.
3.
<tablePane id="table" tableName="ver.Adhoc" sql="Select Name,Title From ver.Adhoc Order by Name">
   <column header="Элемент" colName="Name" filterType="query" filterQuery="Select Name,Title From ver.Adhoc where Name like ? Order by Name"/>
   <column header="Описание" colName="Title" filterType="text"/>
</tablePane>

Не фильтрует зараза...

А вот так работает

Код: plaintext
1.
2.
3.
<tablePane id="table" tableName="ver.Adhoc">
   <column header="Элемент" colName="Name" filterType="text"/>
   <column header="Описание" colName="Title" filterType="text"/>
</tablePane>

Кабы вместо "?" подсунуть значение из фильтра...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select
 Name,Title 
From
 ver.Adhoc 
where
 Name like ? 
Order by
 Name
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
17.02.2009, 12:13
    #35821819
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
попробуй передать параметр таким образом
Код: plaintext
1.
2.
3.
4.
Select Name,Title 
From ver.Adhoc 
where
 Name like :PARAMETER
Order by Name

у меня работает вот такой запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
Query ListOfCity(Year) As %SQLQuery
{
	SELECT ccrp,ccrp->idCity->Name AS TCityName FROM RTT.TOURCLAIM
	WHERE ccrp->idCity->Name IS NOT NULL 
		AND (YEAR(startDate)=:Year OR ((:Year IS NULL) AND ccrp->idCountry= 163 ))
	UNION SELECT '0','-любой город-' FROM RTT.TOURCLAIM ORDER BY  2 
}
вот в таком ракурсе для select:
Код: plaintext
1.
2.
3.
4.
5.
<select id="TourCity" showEmpty="false"
name="TourCity" label="Город" labelStyle=".ddd"
valign="middle"
queryClass="RTTXEN.CalendarTable" queryName="ListOfCity">
<parameter value="#(%page.Year)#"/>
</select>

таже самая конструкция вполне приемлима для tablePane
...
Рейтинг: 0 / 0
17.02.2009, 12:22
    #35821857
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
и вот еще что
filterQuery - это запрос который у тебя будет отображать элемент типа select в который по товоему filterQuery="..." будет внесен некий список.

список должен формироваться по принципу
SELECT поле_для_поиска, поле_для_отображения FROM мойСправочник

в то время как для tablePane запрос должен быть такого вида:
SELECT поле1, поле2 FROM мояТаблица

а когда сработает фильтр (выбор какого нибудь поле_для_отображения) запрос для tablePane будет таким:
SELECT поле1, поле2 FROM мояТаблица WHERE поле2=поле_для_поиска
...
Рейтинг: 0 / 0
23.02.2009, 12:04
    #35832331
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Ymka2007 , спасибо. При случае попробую твой вариант...
Пока же использовал вариант предложеный на форуме ИС. Там есть вариант генерации запроса после изменения значений в фильтрах...
...
Рейтинг: 0 / 0
24.02.2009, 11:48
    #35833679
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
krvsa - когда разберешься с происходимым процессом все сразу станет понятно, в нем ничего сложного )))
удачи
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.12.2012, 09:08
    #38081434
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
кто-нибудь разобрался как в filterQuery параметр передать ?
...
Рейтинг: 0 / 0
17.12.2012, 10:35
    #38081544
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Боже мой, Петя, какими судьбами? Вы же теперь психоаналитик. Решили посовмещать? Жаль, ZEN'ом никогда не пользовался, помочь ничем не могу. Удачи!
...
Рейтинг: 0 / 0
19.12.2012, 18:11
    #38085620
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN <tablePane> фильтр по столбцу
Аленочкакто-нибудь разобрался как в filterQuery параметр передать ?Не предусмотрено. Можете посмотреть исходный код класса %ZEN.Component.tablePane
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN <tablePane> фильтр по столбцу / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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