powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Zen и массивы
9 сообщений из 9, страница 1 из 1
Zen и массивы
    #38132640
AngeL3252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как можно с помощью dataListBox в Zen вывести одномерный массив? (Пример желателен)
...
Рейтинг: 0 / 0
Zen и массивы
    #38132792
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngeL3252 ,
Class del.test Extends %ZEN.Component.page
{

/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <dataListBox queryClass="del.test" queryName="MyArray"/>
</page>
}

Query MyArray() As %Query(ROWSPEC = "Logical:%String,Display:%String")
{
}

ClassMethod MyArrayExecute(ByRef qHandle As %Binary) As %Status
{
  set qHandle("a")="asd"
  set qHandle("b")="qwe"
  set qHandle("c")="zxc"
  
  Quit $$$OK
}

ClassMethod MyArrayClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = MyArrayExecute ]
{
  Quit $$$OK
}

ClassMethod MyArrayFetch(
  ByRef qHandle As %Binary,
  ByRef Row As %List,
  ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = MyArrayExecute ]
{
  set Row=""
  set key=$o(qHandle(qHandle))

  if key="" {
    set AtEnd=1
  }
  else {
    set qHandle=key
    set Row=$LB(qHandle,qHandle(qHandle))
  }
  Quit $$$OK
}

}
...
Рейтинг: 0 / 0
Zen и массивы
    #38132809
AngeL3252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Спасибо огромное
...
Рейтинг: 0 / 0
Zen и массивы
    #38132821
AngeL3252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Выдает ошибку

ОШИБКА #5001: <UNDEFINED>zMyArrayFetch+2^del.test.1 *qHandle

SOURCE ELEMENT: del.test ()
...
Рейтинг: 0 / 0
Zen и массивы
    #38132858
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngeL3252 ,

Я использую Undefined =2, но Вам достаточно чуть изменить код:

   set qHandle=""
   set qHandle("a")="asd"
   ...
...
Рейтинг: 0 / 0
Zen и массивы
    #38132861
AngeL3252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую подробнее объяснить задачу.

В некотором классе с помощью следующего метода формируется массив conditions(i)Method constructConditions(conditions, nameOfSystem, domain, subdomain, id)
{
 s curentId = id
 &sql(SELECT countCond INTO :count FROM data.solutionsTables WHERE id = :curentId)
 s result=##class(%ResultSet).%New("%DynamicQuery:SQL")
 s sqlQ = "SELECT * FROM data.solutionsTables WHERE id = '"_curentId_"' systemName = '"_nameOfSystem_"' and pDomain = '"_domain_"' and pSubdomain = '"_subdomain_"'"
 s qstat = result.Prepare(sqlQ)
 s rest = result.Execute()
 d result.Next()
 s conditions = count
 for i = 1:1:count {
 s curentCond = $P(result.Get("p"_i),",",3)
 s curentCond = $E(curentCond,2,$L(curentCond))
 s conditions(i) = curentCond
 } 
 k result
}
Как его вывести на Zen страничке ( не принципиально, чтобы это был dataListBox )
...
Рейтинг: 0 / 0
Zen и массивы
    #38132894
AngeL3252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit ,

После изменения получила вот такую ошибку

ОШИБКА #5001: <METHOD DOES NOT EXIST>zGetInfo+4^%Library.ResultSet.1 *constructConditionsGetInfo,RTM.SystemStructure

SOURCE ELEMENT: del.test ()
...
Рейтинг: 0 / 0
Zen и массивы
    #38132914
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngeL3252После изменения получила вот такую ошибкуУ Вас ошибка в тексте запроса: перед "systemName =" не хватает "and".
AngeL3252Как его вывести на Zen страничке ( не принципиально, чтобы это был dataListBox )Если не принципиально, то соберите все значения в одну строку - если данных много, то по одному - и выведите через <html>.
Вы уверены что массив conditions у Вас виден вне constructConditions ?
Если выводить в самом constructConditions , то он должен быть с атрибутом ZenMethod .
Применительно к примеру выше можно сделать так:
Class del.test Extends %ZEN.Component.page
{

/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <dataListBox queryClass="del.test" queryName="MyArray">
    <parameter name="nameOfSystem" value="11"/>
    <parameter name="domain" value="22"/>
    <parameter name="subdomain" value="33"/>
    <parameter name="id" value="44"/>
  </dataListBox>
</page>
}

Query MyArray(
  nameOfSystem,
  domain,
  subdomain,
  id) As %Query(ROWSPEC = "Logical:%String,Display:%String")
{
}

ClassMethod MyArrayExecute(
  ByRef qHandle As %Binary,
  nameOfSystem,
  domain,
  subdomain,
  id) As %Status
{
   ; здесь вызываете или повторяете Ваш метод "constructConditions"
   
   set qHandle=""
   set qHandle("a")=nameOfSystem
  set qHandle("b")=domain
  set qHandle("c")=subdomain
  set qHandle("d")=id
  
  Quit $$$OK
}

ClassMethod MyArrayClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = MyArrayExecute ]
{
  Quit $$$OK
}

ClassMethod MyArrayFetch(
  ByRef qHandle As %Binary,
  ByRef Row As %List,
  ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = MyArrayExecute ]
{
  set Row=""
  set key=$o(qHandle(qHandle))

  if key="" {
    set AtEnd=1
  }
  else {
    set qHandle=key
    set Row=$LB(qHandle,qHandle(qHandle))
  }
  Quit $$$OK
}

}
Предвидя вопрос "Как передать программно параметры в метод", даю ссылку: 13696192

PS: я бы воспользовался параметризованным запросом вместо конкатенации:
 s result=##class(%ResultSet).%New("%DynamicQuery:SQL")
 s sqlQ = "SELECT * FROM data.solutionsTables WHERE id = ? and systemName = ? and pDomain = ? and pSubdomain = ?"
 s qstat = result.Prepare(sqlQ)
 s rest = result.Execute(curentId,nameOfSystem,pDomain,subdomain)
...
Рейтинг: 0 / 0
Zen и массивы
    #38133223
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngeL3252В некотором классе с помощью следующего метода формируется массив conditions(i)
...
Как его вывести на Zen страничке ( не принципиально, чтобы это был dataListBox )
В ЗЕНе достаточно компонентов, которые могут использовать запросы для показа данных. Например тот же tablePain

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<tablePane 
	id="tpSubject" 
	tableName="wrk.Subject" 
	valueColumn="ID"
	pageSize="20" 
	useSnapshot="true" 
	caption="Темы" 
	sql="
		Select ID,Name,Prio
		From wrk.Subject 
		Order by Prio
	"
	onselectrow='zenPage.Select(zenThis.getValue("ID"))'
	ondblclick='zenPage.Edit(zenThis.getValue("ID"));' 
>
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Zen и массивы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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