powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поместить в коллекцию все экземпляры объекта, [WebMethod]
15 сообщений из 15, страница 1 из 1
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150057
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, как в Cache' реализовать метод, используя коллекции объектов, который бы возвращал все экземпляры объекта?
Задача такая у меня: используя вебсервисы отправить с сервера Cache' на клиент (реализуется на Adobe Flex) список объектов, используя в качестве контейнера xml или коллекции объектов. Нужно с коллекциями реализовать, но если кто нибудь подскажет как с xml сделать - буду очень рад.
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150215
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите, какой xml Вы хотите получить
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150252
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно вернуть список объектов - пример во вложении. Если просто xml - пишете этот xml в строку или в поток и возвращаете.
Разница в том, что хотите получить на клиенте. Список объектов на клиенте можно автоматически десериализовать, а строку в которой передается xml - нельзя.
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150253
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150316
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если чушь сморозил насчет xml, сильно не пинайте. У меня в задании написано, что нужно отправить список объектов сервера на клиент. Вот я и думаю,как же это реализовать? Если некий метод типа GetAll() что бы получить все экземпляры объекта? Может быть нужно в цикле отправлять клиенту по одному экземпляру объекта, пока все не закончатся? ТОлько как узнать сколько их в таблице?

Все очень примитивно:есть класс Studentik1
Class MainApp.Studentik1 Extends (%Persistent, %Populate, %XML.Adaptor)
{

Property Name As %String;

}
Нужен метод который вернет все записи из таблицы... Предполагаю что можно сделать так

Method GetAllStudents() As %ListOfObjects [ WebMethod ]
{
Set stud = ##class(%ListOfObjects).%New()
// бежим по всем экземплярам и добавляем в листофобджект
Quit stud
}
только вот как это реализовать.
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150334
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrew_tswЕсли нужно вернуть список объектов - пример во вложении. Если просто xml - пишете этот xml в строку или в поток и возвращаете.
Разница в том, что хотите получить на клиенте. Список объектов на клиенте можно автоматически десериализовать, а строку в которой передается xml - нельзя.
Спасибо пошел изучать. Не критично в чем передавать список объектов, желательно конечно в ListOfObjects. Клиент у меня пишется на Flex.
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150357
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dampir_sanekУ меня в задании написано, что нужно отправить список объектов сервера на клиент. Вот я и думаю,как же это реализовать?
Вот примеры из доки...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
/// Get all saved people; technique  1  for the doc
Method GetPeople1() As %XML.DataSet [ WebMethod ]
{
    set dataset=##class(%XML.DataSet).%New()
    set dataset.ClassName="Sample.Person"
    set dataset.QueryName="GetPeople"
    Quit dataset
}

Код: plaintext
1.
2.
3.
4.
5.
/// Get all saved people; technique  2  for the doc
Method GetPeople2() As %XML.DataSet [ WebMethod ]
{
    set dataset=##class(%XML.DataSet).%New("Sample.Person:GetPeople")
    Quit dataset
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/// Get all saved people; technique  3  for the doc
Method GetPeople3() As %XML.DataSet [ WebMethod ]
{
    set dataset=##class(%XML.DataSet).%New("%DynamicQuery:SQL")
    set mysql = "SELECT Name,DOB FROM Sample.Person"
    set status=dataset.Prepare(mysql)
    if $$$ISERR(status) do ..StatusError(status)
    Quit dataset
}
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150361
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150426
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаю про эти примеры, уже все с датасетами перепробовал. Но читаем внимательно сноску

The WSDL schema and XML format of %XML.DataSet are in proprietary Microsoft dataset format . Only Caché or .net web clients will understand this format. To output results of a query so that a Java-based Web client can work with it, use a %ListOfObjects subclass; there is an example in SOAP.Demo in the Samples namespace.

умен клиент на Flex, там просто невозможно присоединить WSDL где есть dataset... ну не понимает он его. Вот и мучаюсь через листофобджект.
andrew_tsw в твоем примере как вернуть все объекты??

s list = ##class(%ListOfObjects).%New()
s item = ##class(USER.TestClass).%New()
s item.A = "A1"
s item.B = "B1"
do list.Insert(item) // тут ведь только один возвращается...
q list
Или может я что то реально не догоняю...

Есть класс Studentik1, заполненный Populate. там 10 записей = 10 Name'ов, как мне в ListOfObjects получить все Name?? Мне их нужно в DataGrid в клиенте отобразить...
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150434
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dampir_sanek , как вариант - запрашивать данные порциями, пока они не закончатся...
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150479
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa dampir_sanek , как вариант - запрашивать данные порциями, пока они не закончатся...
Да, вот чего и не могу понять как делать... Вот как рассуждаюб вижу этот метод:

Method GetAllStudents() As %ListOfObjects [ WebMethod ]
{
s list = ##class(%ListOfObjects).%New()
s item = ##class(MainApp.Studentik1).%New()
s item.Name = ##class(MainApp.Studentik1).%OpenId(
do {
s item.Name = ##class(MainApp.Studentik1).%OpenId(
do list.Insert(item)
if item.Name '= "" do list.Insert(item)
s i=i+1
} while Item.Name '= ""
q list
}
что то типа такого, пока Name определен, вставляем его в список, иначе выход и возвращаем список
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150528
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Method GetAllStudents() As %ListOfObjects [ WebMethod ]
{
s list = ##class(%ListOfObjects).%New()
s item = ##class(MainApp.Studentik1).%New()
s query = ##class(%ResultSet).%New("%DynamicQuery:SQL")
do query.Prepare("SELECT ID, NAME FROM MainApp.Studentik1")
do query.Execute()
while (query.Next()) {
s id = query.Data("ID")
s item = ##class(MainApp.Studentik1).%OpenId(id)
do list.Insert(item)
}
q list
}

Сделал вот так! Но при нажатии на Service Description вылазит окошко,

CSP error occurred

Error: Class must be XML enabled.
ErrorNo: 6361
CSP Page: /csp/user/MainApp.MyServ.CLS
Namespace: USER
Class: MainApp.MyServ

Как исправить подскажите?
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150550
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dampir_sanekДа, вот чего и не могу понять как делать...
Я бы это рассматривал так:
- Запрос на сервер (первый)
- Запускается джоб, который будет выбирать нужные данные из класса. Джоб тот должен иметь некий идентификатор
- Сервер возвращает экземпляр класса и идентификатор джоба
- Клиент забирает данные, если ответ не "пустой" - делает запрос на сервер с указанием идентификатора джоба
- Сервер, используя идентификатор джоба, выдаёт следующий экземпляр класса либо "пусто", если данных больше нет
- Клиент разбирает данные. Если ответ "пуст" - они кончились... Если нет - шлет запрос с идентификатором джоба...
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37150714
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dampir_sanekНо при нажатии на Service Description вылазит окошко,

CSP error occurred

Error: Class must be XML enabled.
ErrorNo: 6361
CSP Page: /csp/user/MainApp.MyServ.CLS
Namespace: USER
Class: MainApp.MyServ

Как исправить подскажите?
Попробуйте вместо %ListOfObjects использовать свой класс (как это показано в примере SOAP.Demo):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Class MainApp.ListOfStudentik1 Extends %Library.ListOfObjects [ ClassType = serial, ProcedureBlock ]
{

/// The type (class name) of the elements stored in the collection.
Parameter ELEMENTTYPE = "MainApp.Studentik1";

}
...
Рейтинг: 0 / 0
Поместить в коллекцию все экземпляры объекта, [WebMethod]
    #37151394
dampir_sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Turk Спасибо огромнейшее! Сработало!!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поместить в коллекцию все экземпляры объекта, [WebMethod]
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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