powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN <tablePane> фильтр по столбцу
17 сообщений из 17, страница 1 из 1
ZEN <tablePane> фильтр по столбцу
    #35024946
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые коллеги!
Кто-нибудь юзал 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
ZEN <tablePane> фильтр по столбцу
    #35024951
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, конечно, переопределить метод filterChanged класса %ZEN.Component.tablePane, и вручную задавать параметры запроса, выполнять его и.т.п.

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

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

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


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

Аленочка тм
...
Рейтинг: 0 / 0
ZEN <tablePane> фильтр по столбцу
    #35066809
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка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
ZEN <tablePane> фильтр по столбцу
    #35083754
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вопрос уже возник давно.
дал сигнал в 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
ZEN <tablePane> фильтр по столбцу
    #35118693
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вчера прикинул вот такую схему:
))) работает !

<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
Период между сообщениями больше года.
ZEN <tablePane> фильтр по столбцу
    #35807733
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что? Так и нет рекомендаций по этому вопросу?

Код: 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
ZEN <tablePane> фильтр по столбцу
    #35821819
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй передать параметр таким образом
Код: 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
ZEN <tablePane> фильтр по столбцу
    #35821857
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и вот еще что
filterQuery - это запрос который у тебя будет отображать элемент типа select в который по товоему filterQuery="..." будет внесен некий список.

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

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

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


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