powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN, tablePane, column, FILTER ???
10 сообщений из 10, страница 1 из 1
ZEN, tablePane, column, FILTER ???
    #34906815
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите как правильно организовать следущее действие
необходимо в столбце воткнуть фильтр, который будет отрабатывать наличие или отсутствие записи в поле (т.е. осуществлять элементарную проверку DDD is null или DDD is not null)
и в дополнение (не обязательно) если DDD is not null, то в текстовом поле осуществлять возможность поиска по заданному значению (т.е. DDD % STARTSWITH 'Иван')
Заранее всем спасибо!
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #34909257
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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"
 />Вариантов много, это статический. Есть динамические.
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #34909265
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
}
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #34911005
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я извиняюсь, а можно приложить картинку с заголовком, шапкой, фильтрами и парой строк таблицы, для наглядности )))
а то так сразу вьехать не получается
спасибо
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #34911417
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
}

}
Писали студенты, так что не особо критикуйте.
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #34928467
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
но чуточку не то
с одним набором фильтров я справился!
сейчас разбираюсь, почему некоторые фильтры не работают на автомате (когда задается только имя класса и имена колонок)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ZEN, tablePane, column, FILTER ???
    #38396262
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, а возможно ли сделать фильтры колонок без фактического объявления колонок в коде? То есть у нас есть таблица, подгружаемая так: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 их создает сам. А возможно их создавать вместе с фильтрами?
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #38396487
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
}

}
Modifying Page Contents Prior to(-after) Display (см. пример ZENTest.DynamicComponentsTest )
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #38397328
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
ZEN, tablePane, column, FILTER ???
    #38397619
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин рано обрадовался - не работает. Фильтры так и не отображаются.
не очень понял что за параметр у таблицы такой refreshRequired=1. Компилятор на него ругается
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ZEN, tablePane, column, FILTER ???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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