|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Народ подскажите как правильно организовать следущее действие необходимо в столбце воткнуть фильтр, который будет отрабатывать наличие или отсутствие записи в поле (т.е. осуществлять элементарную проверку DDD is null или DDD is not null) и в дополнение (не обязательно) если DDD is not null, то в текстовом поле осуществлять возможность поиска по заданному значению (т.е. DDD % STARTSWITH 'Иван') Заранее всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2007, 11:21 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Ymka2007Народ подскажите как правильно организовать следущее действие необходимо в столбце воткнуть фильтр, который будет отрабатывать наличие или отсутствие записи в поле (т.е. осуществлять элементарную проверку DDD is null или DDD is not null) и в дополнение (не обязательно) если DDD is not null, то в текстовом поле осуществлять возможность поиска по заданному значению (т.е. DDD % STARTSWITH 'Иван') Заранее всем спасибо! <tablePane id="TableDiagnostics" maxRows="1000" pageSize="16" useSnapshot="1" useKeys="true" valueColumn="ID" height= "430" showFilters="true" showRowNumbers="false" autoExecute="true" width="900" showQuery="false" tableName="ASTUE_Data.Diag" filtersDisabled="false" onselectrow="zenPage.RowSelected(zenThis);" OnCreateResultSet="CreateRS" > <column colName="ID" hidden="true" /> <column id="between" colName="DateMsg" width="90" header="Дата" filterOp="BETWEEN" filterType="date" /> <column colName="TimeMsg" width="73" header="Время" style="text-align:center;"/> <column colName="TextMsg" width="450" header="Текст сообщения" /> <column id="CodMsg" colName="CodMsg" width="220" header="Код сообщениея" OnDrawCell="DrawS" filterType="enum" filterEnum="1,2,3,4,5,6,7,8,9,10,11,1001" filterOp="="/> <column colName="Channel" width="70" header="Номер канала" filterType="text" style="text-align:center;" /> <column id="Category" colName="Category" width="133" header="Категория" style="text-align:center;" filterType="enum" filterEnum="1,2,3,4" filterEnumDisplay="Состояние УСПД,Связь со счетчиками,Связь с УСПД,Превышение лимитов" filterOp="=" OnDrawCell="DrawCat" />Вариантов много, это статический. Есть динамические. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 09:33 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Ymka2007Народ подскажите как правильно организовать следущее действие необходимо в столбце воткнуть фильтр, который будет отрабатывать наличие или отсутствие записи в поле (т.е. осуществлять элементарную проверку DDD is null или DDD is not null) и в дополнение (не обязательно) если DDD is not null, то в текстовом поле осуществлять возможность поиска по заданному значению (т.е. DDD % STARTSWITH 'Иван') Заранее всем спасибо! Тут немного динамики. Причем можно встраивать методы класса чтобы выполнять любую изощренную фильтрацию. Такжа происходит настройка фильтров прямо из справочников на момент создания страницы. Method CreateRS(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet { Set tRS = "" Set tSC = $$$OK Set tSELECT = "ID,DateMsg,TimeMsg,TextMsg,CodMsg,Channel,Category" Set tFROM = "ASTUE_Data.Diag" Set tWHERE = "" // строим критерии отбора по фильтрам Set tWHERE = "ASTUE_Data.Diag_MyData(Channel,CodMsg)=1 " If ($GET(pInfo.filters("DateMsg"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "DateMsg BETWEEN {d '" _ $P(pInfo.filters("DateMsg"),",",1) _ "'}" _ " AND {d '" _ $P(pInfo.filters("DateMsg"),",",2) _ "'}" } If ($GET(pInfo.filters("Channel"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "Channel %STARTSWITH '" _ pInfo.filters("Channel") _ "'" } If ($GET(pInfo.filters("CodMsg"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "CodMsg = '" _ pInfo.filters("CodMsg") _ "'" } If ($GET(pInfo.filters("Category"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "Category = '" _ pInfo.filters("Category") _ "'" } Set sql = "SELECT TOP 1000 " _ tSELECT _ " FROM " _ tFROM Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE Set tRS = ##class(%ResultSet).%New() Set tSC = tRS.Prepare(sql) Set pInfo.queryText = sql Quit tRS } /// ClassMethod %OnBeforeCreatePage() As %Status Method %OnAfterCreatePage() As %Status { set between=%page.%GetComponentById("between") set h=$P($H,",",1) set between.filterValue=$ZD(h-1,3)_","_$ZD(h,3) set k=1 set i=1 set CodMsg=%page.%GetComponentById("CodMsg") set Category=%page.%GetComponentById("Category") set value="" for { set value=$O(^SPR("CodMessages",value)) quit:value="" set values=$G(^SPR("CodMessages",value)) set $P(filterenum,",",k)=value set $P(filterenumDisplay,",",k)=values set k=k+1 } set value="" for { set value=$O(^SPR("CodCategory",value)) quit:value="" set values=$G(^SPR("CodCategory",value)) set $P(filterenum1,",",i)=value set $P(filterenumDisplay1,",",i)=values set i=i+1 } set CodMsg.filterEnum=filterenum set CodMsg.filterEnumDisplay=filterenumDisplay set Category.filterEnum=filterenum1 set Category.filterEnumDisplay=filterenumDisplay1 Quit $$$OK } Method RowSelected(table) [ Language = javascript ] { } Method DrawNumberChanel(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { &html<#(%query(pName))#:#(%query("SubNumberChanel"))#> Quit $$$OK } Method DrawS(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { set i=%query(pName) set ind=$G(^SPR("CodMessages",i)) &html<#($S(i:ind,1:""))#> Quit $$$OK } Method DrawCat(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { set i=%query(pName) set ind=$G(^SPR("CodCategory",i)) &html<#($S(i:ind,1:""))#> Quit $$$OK } ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 09:38 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Я извиняюсь, а можно приложить картинку с заголовком, шапкой, фильтрами и парой строк таблицы, для наглядности ))) а то так сразу вьехать не получается спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 17:02 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Ymka2007Я извиняюсь, а можно приложить картинку с заголовком, шапкой, фильтрами и парой строк таблицы, для наглядности ))) а то так сразу вьехать не получается спасибо /// Created using the page template: Default Class ASTUE.Administrate.Diagnostics Extends %ZEN.Component.page { /// Class name of application this page belongs to. Parameter APPLICATION = "ASTUE.ENERGY"; /// Displayed name of this page.<tablePane id="Table" maxRows="1000" pageSize="25" useSnapshot="1"/> Parameter PAGENAME; /// Domain used for localization. Parameter DOMAIN; /// This Style block contains page-specific CSS style definitions. XData Style { <style type="text/css"> #scroll { height:530; width: 800; overflow-x: auto; overflow-y: auto; border: 1px solid darkblue; } </style> } /// <button caption=" " id="Active" hidden="false" onclick="zenPage.changeState();" /> /// 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 height="5"/> <label align="center" containerStyle="font-size:18px; font-weight:bold;" value="Диагностика работы системы АСТУЭ" /> <html height="10"/> <tableNavigator tablePaneId="TableDiagnostics"/> <pane id="scroll"> <tablePane id="TableDiagnostics" maxRows="1000" pageSize="16" useSnapshot="1" useKeys="true" valueColumn="ID" height= "430" showFilters="true" showRowNumbers="false" autoExecute="true" width="900" showQuery="false" tableName="ASTUE_Data.Diag" filtersDisabled="false" onselectrow="zenPage.RowSelected(zenThis);" OnCreateResultSet="CreateRS" > <column colName="ID" hidden="true" /> <column id="between" colName="DateMsg" width="90" header="Дата" filterOp="BETWEEN" filterType="date" /> <column colName="TimeMsg" width="73" header="Время" style="text-align:center;"/> <column colName="TextMsg" width="450" header="Текст сообщения" /> <column id="CodMsg" colName="CodMsg" width="220" header="Код сообщениея" OnDrawCell="DrawS" filterType="enum" filterEnum="1,2,3,4,5,6,7,8,9,10,11,1001" filterOp="="/> <column colName="Channel" width="70" header="Номер канала" filterType="text" style="text-align:center;" /> <column id="Category" colName="Category" width="133" header="Категория" style="text-align:center;" filterType="enum" filterEnum="1,2,3,4" filterEnumDisplay="Состояние УСПД,Связь со счетчиками,Связь с УСПД,Превышение лимитов" filterOp="=" OnDrawCell="DrawCat" /> <!-- OnDrawCell="DrawStatus" --> </tablePane> </pane> </page> } Method CreateRS(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet { Set tRS = "" Set tSC = $$$OK Set tSELECT = "ID,DateMsg,TimeMsg,TextMsg,CodMsg,Channel,Category" Set tFROM = "ASTUE_Data.Diag" Set tWHERE = "" // строим критерии отбора по фильтрам Set tWHERE = "ASTUE_Data.Diag_MyData(Channel,CodMsg)=1 " If ($GET(pInfo.filters("DateMsg"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "DateMsg BETWEEN {d '" _ $P(pInfo.filters("DateMsg"),",",1) _ "'}" _ " AND {d '" _ $P(pInfo.filters("DateMsg"),",",2) _ "'}" } If ($GET(pInfo.filters("Channel"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "Channel %STARTSWITH '" _ pInfo.filters("Channel") _ "'" } If ($GET(pInfo.filters("CodMsg"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "CodMsg = '" _ pInfo.filters("CodMsg") _ "'" } If ($GET(pInfo.filters("Category"))'="") { Set tWHERE = tWHERE _ $SELECT(tWHERE="":"",1:" AND ") _ "Category = '" _ pInfo.filters("Category") _ "'" } Set sql = "SELECT TOP 1000 " _ tSELECT _ " FROM " _ tFROM Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE Set tRS = ##class(%ResultSet).%New() Set tSC = tRS.Prepare(sql) Set pInfo.queryText = sql Quit tRS } /// ClassMethod %OnBeforeCreatePage() As %Status Method %OnAfterCreatePage() As %Status { set between=%page.%GetComponentById("between") set h=$P($H,",",1) set between.filterValue=$ZD(h-1,3)_","_$ZD(h,3) set k=1 set i=1 set CodMsg=%page.%GetComponentById("CodMsg") set Category=%page.%GetComponentById("Category") set value="" for { set value=$O(^SPR("CodMessages",value)) quit:value="" set values=$G(^SPR("CodMessages",value)) set $P(filterenum,",",k)=value set $P(filterenumDisplay,",",k)=values set k=k+1 } set value="" for { set value=$O(^SPR("CodCategory",value)) quit:value="" set values=$G(^SPR("CodCategory",value)) set $P(filterenum1,",",i)=value set $P(filterenumDisplay1,",",i)=values set i=i+1 } set CodMsg.filterEnum=filterenum set CodMsg.filterEnumDisplay=filterenumDisplay set Category.filterEnum=filterenum1 set Category.filterEnumDisplay=filterenumDisplay1 Quit $$$OK } Method RowSelected(table) [ Language = javascript ] { } Method DrawNumberChanel(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { &html<#(%query(pName))#:#(%query("SubNumberChanel"))#> Quit $$$OK } Method DrawS(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { set i=%query(pName) set ind=$G(^SPR("CodMessages",i)) &html<#($S(i:ind,1:""))#> Quit $$$OK } Method DrawCat(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status { set i=%query(pName) set ind=$G(^SPR("CodCategory",i)) &html<#($S(i:ind,1:""))#> Quit $$$OK } } Писали студенты, так что не особо критикуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 19:08 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Спасибо! но чуточку не то с одним набором фильтров я справился! сейчас разбираюсь, почему некоторые фильтры не работают на автомате (когда задается только имя класса и имена колонок) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2007, 14:49 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Друзья, а возможно ли сделать фильтры колонок без фактического объявления колонок в коде? То есть у нас есть таблица, подгружаемая так:Method GetRS(Output sc As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet { set dict=##class(AWGW.Ref.Vozr.Dict).%OpenId(..DictId) set sql="select " for i=1:1:dict.Columns.Count() { s sql=sql_"" } set sc = $$$OK set Top=pInfo.rows s sql="select * from "_dict.TmpClsName set rs = ##class(%ScrollableResultSet).%New("%DynamicQuery.SQL") set sc = rs.Prepare(sql) set pInfo.queryText = sql quit rs }Число колонок в такой таблице неизвестно, RS их создает сам. А возможно их создавать вместе с фильтрами? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 16:01 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
feanorcheg , Динамически можно создать всё что угодно. НапримерClass demo.test Extends %ZEN.Component.page { XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title=""> <button caption="test" onclick="zenPage.Test(zen('tp'));"/> <tablePane id="tp"/> </page> } Method Test(tp As %ZEN.Component.tablePane) [ ZenMethod ] { set col=tp.%AddColumn() set col.colName="Caption2" set col.filterOp="=" set col.filterType="text" set col.filterValue="test2" set tp.OnCreateResultSet="GetRS" set tp.refreshRequired=1 } Method GetRS( Output sc As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet { set colName=pInfo.columns(1) set sql="select * from (select -1 ID, 1 Caption1, 'test1' Caption2 union select -2,2,'test2') where "_colName_pInfo.filterOps(colName)_"?" set rs = ##class(%ResultSet).%New() set tSC = rs.Prepare(sql) set pInfo.queryText = sql set pInfo.parms(1)=pInfo.filters(colName) quit rs } } ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 20:28 |
|
ZEN, tablePane, column, FILTER ???
|
|||
---|---|---|---|
#18+
Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2013, 09:43 |
|
|
start [/forum/topic.php?fid=39&msg=38397328&tid=1557067]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 161ms |
0 / 0 |