Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON + Cache / 24 сообщений из 24, страница 1 из 1
27.11.2013, 12:38
    #38479648
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Здравствуйте.
Появилась задача связать cache+jquery+JSON. Использую csp - страницу. Встала задача обмена данными между клиентской и серверной частью приложения.

Что удалось сделать на данный момент:
на основе примера из ветки форума http://www.sql.ru/forum/953179/jquery-json-ajax-cache
1) Удалось передать json объект и вернуть его.
2) Удалось возвратить из базы массив объектов json.

Возникло несколько трудностей:
1) Как вернуть с серверной части сложно-структурированные объекты (типа Лист в листе у вложенного листа есть еще 1 лист)? может есть какой нибудь метод обработки в JSON?
2) Не получается получить id-шник у списка объектов объявленных как relationship.
Например,Класс имеет ссылку сам на себя, у него есть некоторое поле в котором он хранит объекты этого же класса в виде отношений. Как получить ID у объекта в этом поле?

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

Заранее спасибо!
...
Рейтинг: 0 / 0
27.11.2013, 12:42
    #38479666
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Для начала укажите версию Cache.
на счет примеров, сейчас уже есть открытые проекты на Cache, смотрите в их сторону.
Например сервер вакансий
...
Рейтинг: 0 / 0
27.11.2013, 13:01
    #38479724
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Objectтипа Лист в листе, у вложенного листа есть еще 1 лист... может есть какой нибудь метод обработки в JSON?
JSON - ничего не знает о серверных структурах данных. Но вы можете написать свой парсер на javascript для разбора структуры $LISTBUILD
...
Рейтинг: 0 / 0
27.11.2013, 13:58
    #38479854
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Object 1) Как вернуть с серверной части сложно-структурированные объекты (типа Лист в листе у вложенного листа есть еще 1 лист)? может есть какой нибудь метод обработки в JSON?
JSON это формат объекта у JavaScript про кащейские листы он знать не знает...

New_Object 2) Не получается получить id-шник у списка объектов объявленных как relationship.
В этих свойствах хранятся не ИДшники, а орефы... Для получения ИД экземпляра нужно использовать метод

Код: vbnet
1.
<объект>.<свойство_relationship>.%Id()
...
Рейтинг: 0 / 0
27.11.2013, 15:05
    #38480018
sigmov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Код: vbnet
1.
<объект>.<свойство_relationship>.%Id()

Лучше
Код: vbnet
1.
<объект>.<свойство>GetObjectId()
...
Рейтинг: 0 / 0
27.11.2013, 15:10
    #38480032
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Object1) Как вернуть с серверной части сложно-структурированные объекты (типа Лист в листе у вложенного листа есть еще 1 лист)? может есть какой нибудь метод обработки в JSON?
JSON(List of List)demo.test.clsClass demo.test Extends %RegisteredObject
{

Property list As list Of %ListOfDataTypes;

ClassMethod GetObject(
  ByRef pParms As %String,
  Output obj As demo.test) As %Status
{
  s obj=..%New()
  
  s list1=##class(%ListOfDataTypes).%New()
  d list1.Insert(1)
  d list1.Insert(2)
  
  s list2=##class(%ListOfDataTypes).%New()
  d list2.Insert(5)
  d list2.Insert(6)
  d list2.Insert(7)

  s list3=##class(%ListOfDataTypes).%New()
  d list3.Insert(10)
  
  d obj.list.Insert(list1)
  d obj.list.Insert(list2)
  d obj.list.Insert(list3)

  q $$$OK
}

}
test.csp<html>
<head>
<title>JSON (List Of List)</title>
<script type="text/javascript" src="zenutils.js"></script>
<script type="text/javascript" src="zenCSLM.js"></script>
<script type="text/javascript">
function test()
{
  #(##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONFromObject("myJSON","demo.test","GetObject",,,"aeloq"))#  
  
  var str=ZLM.jsonEncode(myJSON);

  zenAlert("json(str)=",str,"\njson(obj)=",myJSON);
}
</script>
</head>

<body>
<button onclick="test();">test</button>
</body>
</html>
...
Рейтинг: 0 / 0
27.11.2013, 15:10
    #38480033
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
DAiMorДля начала укажите версию Cache.
на счет примеров, сейчас уже есть открытые проекты на Cache, смотрите в их сторону.
Например сервер вакансий

спасибо за ссылку. версия каше 2013.2
...
Рейтинг: 0 / 0
27.11.2013, 15:17
    #38480047
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Objectверсия каше 2013.2Обновитесь: такой версии уже нет и не будет.
...
Рейтинг: 0 / 0
27.11.2013, 15:28
    #38480080
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Object2) Не получается получить id-шник у списка объектов объявленных как relationship.
Например,Класс имеет ссылку сам на себя, у него есть некоторое поле в котором он хранит объекты этого же класса в виде отношений. Как получить ID у объекта в этом поле?См. соответствующие методы класса %Library.RelationshipObject .
...
Рейтинг: 0 / 0
27.11.2013, 15:52
    #38480137
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
krvsa,

В базе имеется такая структура:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
[
	{
		"id" : 0,
		"name" : "История",
		"subDiscs" : [{
				"id" : 1,
				"name" : "История часть 1",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 2,
				"name" : "История часть 2",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 3,
				"name" : "История часть 3",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 4,
				"name" : "История часть 4",
				"subDiscs" : [],
				"parent" : 0
			}
		],
		"parent" : null
	}, 
	{
		"id" : 5,
		"name" : "Математика",
		"subDiscs" : [],
		"parent" : null
	}
]


В javascript есть метод stringify которому достаточно передать лист верхнего уровня и он сгенерирует структуру, есть ли такая же штука в каше или надо будет парсить в ручную запросами к базе=)))
...
Рейтинг: 0 / 0
27.11.2013, 15:53
    #38480138
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
sigmovЛучше
Код: vbnet
1.
<объект>.<свойство>GetObjectId()


А чем %Id() провинился?
...
Рейтинг: 0 / 0
27.11.2013, 15:59
    #38480150
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_ObjectВ базе имеется такая структура:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
[
	{
		"id" : 0,
		"name" : "История",
		"subDiscs" : [{
				"id" : 1,
				"name" : "История часть 1",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 2,
				"name" : "История часть 2",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 3,
				"name" : "История часть 3",
				"subDiscs" : [],
				"parent" : 0
			}, {
				"id" : 4,
				"name" : "История часть 4",
				"subDiscs" : [],
				"parent" : 0
			}
		],
		"parent" : null
	}, 
	{
		"id" : 5,
		"name" : "Математика",
		"subDiscs" : [],
		"parent" : null
	}
]



В какой "базе"? Для Каше это не "структура"... Это тупо строка с символами или бинаристрим, что почти одно и то же...

New_ObjectВ javascript есть метод stringify которому достаточно передать лист верхнего уровня и он сгенерирует структуру, есть ли такая же штука в каше или надо будет парсить в ручную запросами к базе=)))
Строку придется разбирать самому...
Если конечно нет соответствующих классовых методов в том же ZEN-пакете...
...
Рейтинг: 0 / 0
27.11.2013, 16:14
    #38480179
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_ObjectВ javascript есть метод stringify, которому достаточно передать лист верхнего уровня и он сгенерирует структуру JSON.stringify сгенерирует строку
...
Рейтинг: 0 / 0
27.11.2013, 17:45
    #38480321
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Может есть смысл посмотреть в сторону разработок
Rob Tweed на сайте http://gradvs1.mgateway.com/main/ и не только.
Он вроде эту технологию предлагает и выдвигает упорно.
...
Рейтинг: 0 / 0
27.11.2013, 17:53
    #38480339
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Здесь все его статьи http://robtweed.wordpress.com/
...
Рейтинг: 0 / 0
27.11.2013, 19:09
    #38480495
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Спасибо всем за информацию, теперь стало немного понятнее. =))
...
Рейтинг: 0 / 0
27.11.2013, 19:11
    #38480500
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
krvsaА чем %Id() провинился?

Ругается что это Oref =)) %Id() это первое, что пришло в голову =)
...
Рейтинг: 0 / 0
30.11.2013, 16:47
    #38484482
VArtem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Смотрите, а вот если я открыл объект, у которого есть связи с другими объектами, а у тех тоже и тп:
s person = ##class(Person).%OpenId(1)
Если делаю так, то выводит чуть-ли не пол базы из-за связей:
d ##class(%ZEN.Auxiliary.jsonProvider).%ObjectToJSON(person)
Можно как-то ограничить глубину и что означает параметр pLevel в методе. Или создавать самому промежуточный объект (proxyObject) и его выводить...
...
Рейтинг: 0 / 0
01.12.2013, 10:14
    #38484850
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
VArtemМожно как-то ограничить глубину и что означает параметр pLevel в методе.
Так то может и есть тот самый ограничитель?
...
Рейтинг: 0 / 0
01.12.2013, 18:10
    #38485145
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Нет, pLevel используется для форматирования
Код: vbnet
1.
 Set tIndent="", $P(tIndent,tTab,pLevel+1)="" Write tLF_tIndent 
...
Рейтинг: 0 / 0
01.12.2013, 21:00
    #38485255
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
Добрый день! всем спасибо, за примеры отдельное спасибо!=) сделал все по образу и подобию=)
Возник новый вопрос чисто "косметический"=))) Хочу сделать добавление новых данных и тут же выгрузку их в клиентскую часть.

что работает:

У меня выгрузка из базы записана в javascript как в примере только по готовности страницы.

Код: javascript
1.
2.
3.
4.
   $(document).ready(function()
   {
     #(##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONFromObject("myJSON","demo.test","GetObject",,,"aeloq"))#
   });


все работает.

и продублировал этот же метод на кнопку добавления нового элемента. В результате данные в базу добавляются, но выгруженный список остается без изменений. стоит обновить страницу и все отображается нормально =) причем если 2 элемента все без изменений.

Следовательно вопрос, почему так? Как это исправить? P.S. вешать костыль принудительного обновления страницы не хочется =) или это будет не костыль? и только там можно исправить? Заранее спасибо=)
...
Рейтинг: 0 / 0
02.12.2013, 12:10
    #38485753
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
New_Object ,
Код получения JSON по требованиюdemo.test.clsClass demo.test Extends %RegisteredObject
{

Property list As list Of %ListOfDataTypes;

ClassMethod GetJSONStr() As %String
{
  #dim ex As %Exception.AbstractException

  s res=""
  
  s obj=..%New()
  
  s list1=##class(%ListOfDataTypes).%New()
  d list1.Insert(1)
  d list1.Insert(2)
  
  s list2=##class(%ListOfDataTypes).%New()
  d list2.Insert(5)
  d list2.Insert(6)
  d list2.Insert(7)

  s list3=##class(%ListOfDataTypes).%New()
  d list3.Insert(10)
  
  d obj.list.Insert(list1)
  d obj.list.Insert(list2)
  d obj.list.Insert(list3)

  
  try{
    $$$ThrowOnError(##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.stream,obj,,,1,"aeloq"))
    s res=stream.Read()
  }catch ex{
    d ex.Log()
  }
  q res
}

}
test.csp<html>
<head>
<title>JSON (List Of List)</title>
<script type="text/javascript" src="zenutils.js"></script>
<script type="text/javascript" src="zenCSLM.js"></script>
<script type="text/javascript">
function test()
{
  var str=#server(demo.test.GetJSONStr())#;  
  
  var myJSON=ZLM.jsonParse(str);

  zenAlert("json(str)=",str,"\njson(obj)=",myJSON);
}
</script>
</head>

<body>
<button onclick="test();">test</button>
</body>
</html>
...
Рейтинг: 0 / 0
02.12.2013, 12:13
    #38485758
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
VArtemИли создавать самому промежуточный объект (proxyObject) и его выводить...Или использовать SQL, если структура позволяет.
...
Рейтинг: 0 / 0
02.12.2013, 21:09
    #38486637
New_Object
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON + Cache
servit,

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


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