powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
6 сообщений из 6, страница 1 из 1
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37458057
Oleg_VG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Возникла необходимость написать метод на COS, добавляющий элемент в конец списка объектов Cache:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ClassMethod AddItemToCacheList(clsProperty As %String, list As %Library.ListOfObjects, insertItem As %Library.ObjectIdentity) As %Status
{
	Set propName = "MyApp."_clsProperty
	Set oref = ##class(propName).%Open(list)//набросал примерно, компилятор тут ругается
	Do oref.InsertObject(insertItem)
	Quit $$$OK
}

Как задать параметры для отлаживаемого метода в Cache Studio, если list имеет тип %Library.ListOfObjects, хранящихся персистентно, причем это пользовательские типы?
Заранее спасибо!
...
Рейтинг: 0 / 0
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37458303
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_VG ,
Как вариант, напишите еще один метод, который создаст объект и вызовет нужный метод.

По поводу приведенного кода: Если имя класса заранее не известно, то конструкцией ##class() пользоваться нельзя, используйте $zObjClassMethod(<имя_класса>,<имя_метода>).
Также не совсем понятен Ваш способ "приведения" и зачем это делается. list сам по себе является объектом и InsertObject можно вызвать непосредственно для него. Единственный случай (который я знаю), который требует явного приведения - это использование полученного списка в SOAP-запросах. В этом случае нужно создавать отдельный класс, унаследованный от %ListOfObjects, с переопределенным параметром ELEMENTTYPE (пример реализации есть в области SAMPLES - класс Sample.ListOfPersonIdentification и его использование в SOAP-методах).
...
Рейтинг: 0 / 0
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37459131
Oleg_VG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подробную подсказку - насчет вспомогательного метода (или даже кода для получения oid или oref объекта list в этом методе) - то в моем случае это единственно возможный нормальный вариант. А по поводу приведения - опираясь на раздел справки "Using Objects with Caché ObjectScript" -> "Modifying Objects" - "Modifying List Properties" - "Populating Lists of Persistent Objects" ( http://docs.intersystems.com/cache20111/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_objcos#GOBJ_ModifyingObjects ) собирался таким образом получить oref на list, а потом уже добавить к list элемент. Однако реализовать все оказалось сложнее.
...
Рейтинг: 0 / 0
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37459205
Oleg_VG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, а проблема возникла вообще вдалеке - когда я в своем приложении на C# попытался добавить элемент к объекту типа CacheListOfObjects (такой тип появляется в прокси классах .NET, которые генерит Caché Object Binding Wizard for .NET в VS), то выяснилось, что добавлять можно только объекты типа System.Object, а не пользовательский тип, созданный в Cache. Привести такой объект к типу System.Object не удалось, поэтому решил это реализовать на стороне сервера.
...
Рейтинг: 0 / 0
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37459415
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_VGДа, а проблема возникла вообще вдалеке - когда я в своем приложении на C# попытался добавить элемент к объекту типа CacheListOfObjects <...>Теперь суть проблемы ясна.

Итак:

Class dot.test Extends %Persistent
{

Property field1 As %Integer;

ClassMethod Test(Param1 As %ListOfObjects) As %Integer
{
  q Param1.Count()
}
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using(var conn = new CacheConnection(@"Pooling=false;server=localhost;port=1972;namespace=USER;uid=_system;pwd=SYS;"))
{
  conn.Open();
  var list = new CacheLibListOfObjects(conn);
  for (var i = 1; i <= 10; i++)
  {
    var obj = new dot.test(conn) {field1 = i};
    list.Add(obj);
  }
  MessageBox.Show(dot.test.Test(conn, list).ToString()); //выведется 10
}
...
Рейтинг: 0 / 0
Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
    #37459844
Oleg_VG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное за помощь, я сам еще долго бы искал решение. Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как отладить метод в Cache Studio, входной параметр которого имеет объектный тип?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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