powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Пользовательские запросы
3 сообщений из 3, страница 1 из 1
Пользовательские запросы
    #33183107
Mr N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не смог разобраться с созданием пользовательских запросов. В документации Cache примеров реализации запроса нету (или не нашёл). Если кто-нибудь сталкивался с созданием запросов, поделитесь, пожалуйста, исходным кодом.
...
Рейтинг: 0 / 0
Пользовательские запросы
    #33183593
Механизатор из Подмосковья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты про запросы, текст которыx формируется "на клиенте" в зависимости от того, что указал юзверь ?
Тогда, к примеру, так:

/// в любом классе сделай следующий метод:
================== begin ==================
classmethod getAnyData(tableName as %String, fieldList as %String="", topRowsQty as %Integer=0, whereCond as %String="", ordbyList as %String="") {

// системный класс %ResultSet даёт возможность достучаться до запросов, которые ты либо заранее сделал в базе, либо (как сейчас)
// которые "делает" пользователь; документация по этому классу здесь:
// http://127.0.0.1:1972/apps/documatic затем войти в %Library и там найти %ResultSet
s qrAnyData=##class(%ResultSet).%New("%DynamicQuery:SQL")
// начинаем наращивать select-выражение тем, что получено "с клиента":
s sqlExpr="select "_$Case(topRowsQty>0, 1:"top "_topRowsQty, :"")_$Case(fieldList="", 1:"*", :fieldList)
s sqlExpr=sqlExpr_" from "_tableName_" "
s sqlExpr=sqlExpr_$Case(whereCond="", 1:"", :" where "_whereCond)
s sqlExpr=sqlExpr_$Case(ordbyList="", 1:"", :" order by "_ordbyList)
// результат: sqlExpr = "select top 30 ID,tabNomer,Name,address,phone,INN from SomeTable where address %startswith 'МОСК%' order by Name,INN" etc.

d qrAnyData.Prepare( sqlExpr ) // надо делать, если запрос заранее неизвестен, т.е. его нет в БД
d qrAnyData.Execute() // что-то типа выхода на первую строку результата

// Обязательно добавь команду, задающую режим обработки результатов запроса перед передачей "на клиента": иначе не будут работать преобразования LogicalToDisplay для числовых полей и "НА КЛИЕНТЕ" числа будут не выровненными (я с этим столкнулся):
s qrAnyData.RuntimeMode=2

// чем обрабатывать результат - личное дело каждого, но чтобы проверить его в терминале,
// можно вернуть список значений во всех полях с каким-нить разделителем (например, CHR(9))
s result="" // результат: наращиваемый список значений всех полей
s delimeter=$C(9) // разделитель возвращаемых значений (например) = chr(1)
while qrAnyData.Next() {
for xColIdx=1:1:qrAnyData.GetColumnCount() {
s result=result_qrAnyData.GetData(xColIdx)_delimeter
}
s result=result_$C(13)_$C(10) // добавляем для наглядности CR/LF
}
q result
}
===================== end ==================
ЗЫ-1. Я этот текст проверил запросе с обычным условием (отработал Ok) и на "заковыристом": отобрать строки по условию "поле Name содержит двойные кавычки", т.е. на таком:
select * from peopleList where $find(Name,'"')>0
В терминале такой запрос надо давать так:
w ##class(someClass).getAnyRows("peopleList","*",0,"$find(name, '""')>0")
(отработал также нормально)

ЗЫ-2.
Не хочешь держать в классе -- можешь сделать в отдельном .mac-файле, тогда так:
getAnyRows(tableName, fieldList="", topRowsQty=0, whereCond="", ordbyList="") PUBLIC {...(далее по тексту, см. ниже)... }
вызов этой утилиты в Терминале (пусть она будет в файле "yourfile.mac"):
w $$getAnyRows^yourfile(..... параметры....)

Только я не знаю, как обращаться к такой утилите "с клиента".
...
Рейтинг: 0 / 0
Пользовательские запросы
    #33183641
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеются в виду запросы классов не на основе SQL.

User-Written Class Queries

Высылаю Вам небольшой документ на эту тему.

Обратитесь к консультанту InterSystems, который работает с Вашей организацией.
Он пришлет Вам дополнительные примеры.

Вадим
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Пользовательские запросы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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