Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN. Как сочетать фильтры и внешние параметры? / 17 сообщений из 17, страница 1 из 1
19.11.2009, 15:56
    #36320109
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Есть табличка... В ней есть фильтры... Есть метод который генерит SQL-запрос в сочетании с фильтрами.

Код: 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.
80.
81.
82.
83.
84.
<tablePane 
	id="tpJob" 
	tableName="wrk.Job" 
	valueColumn="ID"
	pageSize="50" 
	useSnapshot="true" 
	caption="Работы" 
	onselectrow='zenPage.Select(zenThis.getValue("ID"))'
	ondblclick='zenPage.Edit(zenThis.getValue("ID"));' 
	OnCreateResultSet="CrtSQL"
>
	<column 
		header="Id" 
		colName="ID" 
		hidden="true"
	/>
	<column 
		header="Название" 
		colName="Name" 
		filterType="text"
	/>
	<column 
		header="Исполнители" 
		colName="Member" 
		width="200px"
		filterType="query"
		filterQuery="Select Name From wrk.Member Order by Name"
	/>
	<column 
		header="Завершение" 
		colName="Brk" 
		width="120px"
	/>
	<column 
		header="Квартал" 
		colName="Kvartal" 
		width="130px"
	/>
	<column 
		header="Ok" 
		colName="Ok" 
		width="40px"
		filterType="enum"
		filterEnum="Да,Нет"
	/>
</tablePane>
...
/// Построение запроса для отображения таблицы
Method CrtSQL(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet
{
	Set tRS = ""
	
	Set tSC = $$$OK
	Set tSELECT = "ID,Name,"
	Set tSELECT = tSELECT_"wrk.Job_AllMember(ID) as Member,"
	Set tSELECT = tSELECT_"wrk.sys_Month(dEnd,1) as Brk,"
	Set tSELECT = tSELECT_"wrk.Plan_KvrToStr(Plan->ID) as Kvartal,"
	Set tSELECT = tSELECT_"Case wrk.Job_Ok(ID) "
	Set tSELECT = tSELECT_"When 1 Then 'Да' "
	Set tSELECT = tSELECT_"End as Ok"
	Set tFROM = "wrk.Job as a"
	Set tWHERE = ""
	Set tORDER = "dCreate Desc,Member"
	// строим критерии отбора по фильтрам
	If $g(pInfo.filters("Name"))'="" {
		Set tWHERE = tWHERE_"Name [ '"_pInfo.filters("Name")_"' "
	}
	If $g(pInfo.filters("Member"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		Set tWHERE=tWHERE_"EXISTS (Select * From wrk.Stage as b Where b.Job=a.ID And b.Member->Name='"_ pInfo.filters("Member")_"')"
	}
	If $g(pInfo.filters("Ok"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		s ok=0
		s:pInfo.filters("Ok")="Да" ok=1
		Set tWHERE=tWHERE_"wrk.Job_Ok(ID)="_ok
	}
	Set sql = "SELECT " _ tSELECT _ " FROM " _ tFROM
	Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE
	Set:tORDER'="" sql = sql _ " ORDER BY " _tORDER
	Set tRS = ##class(%ResultSet).%New()
	Set tSC = tRS.Prepare(sql)
	Set pInfo.queryText = sql
	Quit tRS
}

С этим вроде все ясно...
Но есть другая табличка и там уже есть внешний параметр

Код: 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.
..
/// Id элемента
Property idItem As %ZEN.Datatype.id(ZENURL = "id");
..
<tablePane 
	id="tpJob" 
	tableName="wrk.Job" 
	valueColumn="ID"
	pageSize="60" 
	useSnapshot="true" 
	caption="Работы" 
	sql="
		Select 
			ID,
			wrk.Job_AllMember(ID) as Members,
			Name,
			wrk.sys_Month(dEnd,1) as Break,
			Case wrk.Job_Ok(ID) 
			When 1 Then 'Да'
			End as Ok
		From wrk.Job
==>		Where Plan->ID=?
		Order by dEnd,Members
	"
	onselectrow='zenPage.Select(zenThis.getValue("ID"))'
	ondblclick='zenPage.Edit(zenThis.getValue("ID"));' 
>
	<parameter 
		id="pIdJob"
		value="#(%page.idItem)#"
	/>
	<column 
		header="Id" 
		colName="ID" 
		hidden="true"
	/>
	<column 
		header="Исполнители" 
		colName="Members" 
		width="200px"
	/>
	<column 
		header="Название работы" 
		colName="Name" 
	/>
	<column 
		header="Завершение" 
		colName="Break" 
		width="120px"
	/>
	<column 
		header="Ok" 
		colName="Ok" 
		width="30px"
	/>
</tablePane>

Как в методе (аналоге CrtSQL) получить доступ к значению параметра?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
19.11.2009, 16:38
    #36320257
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
тут тебе лучше всего расписать sql по колонкам, тогда будет все работать
...
Рейтинг: 0 / 0
19.11.2009, 16:45
    #36320301
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Как это

Ymka2007расписать sql по колонкам

?
Я с таким подходом еще не знаком... Примерчик можно?
...
Рейтинг: 0 / 0
19.11.2009, 17:18
    #36320445
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
смотри ZENTest.TableTest.cls
...
Рейтинг: 0 / 0
19.11.2009, 20:16
    #36320850
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ну это только завтра...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
20.11.2009, 09:00
    #36321428
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ymka2007смотри ZENTest.TableTest.cls

Что-то

Код: plaintext
Method CreateRS(...)

Там вообще не используется... Как там используют

Код: plaintext
<parameter id="P1" value="B"/>

что-то тоже не нашел... Искал "P1" (нет совсем) и "?" (попадались в скрипте и url)...

Но мыслишка промелькнула вот какая... Если я сделаю скрытый столбец и в него запишу фильтрацию по параметру - наверное это будет "оно"? Что-то типа такого...

Код: plaintext
1.
2.
3.
4.
5.
6.
<column 
	colName="myCol" 
	filterType="text"
	filterOp="="
	filterValue="#(%page.idItem)#"
/>
...
Рейтинг: 0 / 0
20.11.2009, 11:05
    #36321729
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Такое

Код: plaintext
filterValue="#(%page.idItem)#"

не получилось. Там наверное можно использовать только скаларное значение...
В итоге сделал вот так

Код: 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.
/// Построение запроса для отображения таблицы
Method CrtSQL(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet
{
	Set tRS = ""
	
	Set tSC = $$$OK
	Set tSELECT = "ID,"
	Set tSELECT = tSELECT_"wrk.Job_AllMember(ID) as Member,"
	Set tSELECT = tSELECT_"Name,"
	Set tSELECT = tSELECT_"wrk.sys_Month(dEnd,1) as Brk,"
	Set tSELECT = tSELECT_"Case wrk.Job_Ok(ID) "
	Set tSELECT = tSELECT_"When 1 Then 'Да' "
	Set tSELECT = tSELECT_"End as Ok"
	Set tFROM = "wrk.Job as a"
	Set tWHERE = ""
	Set tORDER = "dEnd,Member"
	// строим критерии отбора по фильтрам
	Set tWHERE = tWHERE_"Plan = "_%page.idItem
	If $g(pInfo.filters("Name"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		Set tWHERE = tWHERE_"Name [ '"_pInfo.filters("Name")_"' "
	}
	If $g(pInfo.filters("Member"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		Set tWHERE=tWHERE_"EXISTS (Select * From wrk.Stage as b Where b.Job=a.ID And b.Member->Name='"_ pInfo.filters("Member")_"')"
	}
	If $g(pInfo.filters("Ok"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		s ok= 0 
		s:pInfo.filters("Ok")="Да" ok= 1 
		Set tWHERE=tWHERE_"wrk.Job_Ok(ID)="_ok
	}
	Set sql = "SELECT " _ tSELECT _ " FROM " _ tFROM
	Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE
	Set:tORDER'="" sql = sql _ " ORDER BY " _tORDER
	Set tRS = ##class(%ResultSet).%New()
	Set tSC = tRS.Prepare(sql)
	Set pInfo.queryText = sql
	Quit tRS
}
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
20.11.2009, 12:28
    #36321997
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
1. убираешь описание sql из tablepane
2. все колонки прописываешь в колонках (colName="field1", если вычисляемое, то через colExprestion="field1->Name" c обязательным указанием параметра colName="f1")
3. в tablepane устанавливаешь:
а) tableName="твоя таблица"
б) showQuery="1" (для отладки)
в) maxRows="сколько надо"
г) orderByClause="dEnd,Members"
д) whereClause="#(%page.idItem)#"
4. запускаещь в браузер и смотришь
...
Рейтинг: 0 / 0
20.11.2009, 12:36
    #36322027
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ymka2007 , вполне исчерпывающе! Спасибо...
...
Рейтинг: 0 / 0
20.11.2009, 12:38
    #36322032
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
для ТР помоему 4 способа задания запроса
...
Рейтинг: 0 / 0
20.11.2009, 12:55
    #36322081
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ymka2007 д) whereClause="#(%page.idItem)#"

Вот это не совсем понял... Т.е. это вроде условия отбора записей для всей таблицы... Но условия-то как такового нет.
Может нечто вроде этого?

Код: plaintext
whereClause="FileName=#(%page.idItem)#"
...
Рейтинг: 0 / 0
20.11.2009, 12:57
    #36322093
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
да
...
Рейтинг: 0 / 0
20.11.2009, 12:58
    #36322099
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Plan->ID=#(...)#
...
Рейтинг: 0 / 0
20.11.2009, 13:00
    #36322101
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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.
<tablePane id="tablePlayer" name="tabpl"
caption="Список зарегистрированных игроков РТТ"
tableName="RTT.PLAYER"
autoExecute="true"
headerLayout="headersOnTop"
initialExecute="false"
orderByClause="fullFIO"
showZebra="true"
useKeys="true"
useSnapshot="true"
pageSize="10" maxRows="5000"
showQuery="0"
onupdate="zenPage.OnRefresh(zenThis);"
onrefresh="zenThis.setProperty('selectedIndex',-1);"
onselectrow="zenPage.rowSelected();"
onkeypress="return zenPage.tabPLKeyPress(event);"
valueColumn="tplID"
showRowSelector="true">
<column colExpression="ID" colName="tplID" hidden="true" width="50"/>
<column colName="anketaRegNum" header="Рег. номер" width="60"
filterType="text" 
filterOp="="/>
<column colName="fullFIO" header="ФИО" style="text-align: left;" 
filterType="text" 
filterOp="%STARTSWITH"/>
<column	colExpression="TO_CHAR(dOb,'dd/mm/yyyy')" colName="dOb" header="Дата рождения" width="70"/>
<column colExpression="idCCRPmg->idCity->Name" colName="City" width="200"
header="Город"
filterType="text"
filterOp="%STARTSWITH"/>
</tablePane>
...
Рейтинг: 0 / 0
20.11.2009, 13:00
    #36322102
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ага, понятно.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
20.11.2009, 15:53
    #36322701
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Ymka2007 , а если я джоины использую? Их как писать? Так

Код: plaintext
tableName="wrk.Task as a INNER JOIN wrk.Job as b ON (a.ID=b.Task)LEFT OUTER JOIN wrk.Stage as c ON (b.ID=c.Job)"
...
Рейтинг: 0 / 0
20.11.2009, 15:57
    #36322717
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZEN. Как сочетать фильтры и внешние параметры?
Работает!
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN. Как сочетать фильтры и внешние параметры? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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