powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CSP. JSON.
25 сообщений из 37, страница 1 из 2
CSP. JSON.
    #37825285
Darkhan Darkhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел в этом форуме статьи про JSON в CSP. Но ничего путного не нашел.
Есть ли в Cache адаптер JSON для CSP? Может у кого-то свои собственно ручно сделанные адаптеры. Поделитесь, плз.

Когда через Аякс посылаю запрос Cache: data: в формате JSON. Он понимает данные ввиде: "имя":"значение". Но не понимает массивы.

P.S. Если вопрос не слишком корректен не пинайте сильно, пожалуйста. Думаю смысл вопроса понятен.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825313
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan Darkhan , чем провинились гипперэвенты? Почему не используешь их?
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825319
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan Darkhan ,

Bill McCormickIf all you want is to mess with JSON then you can use the lowlevel APIs in the JSON Provider class. There are functions to convert arrays or objects in to JS that will instantiate a JSON object. And there are others that will take a JSON object from JS and convert it to an array in memory in COS. If that is all you are after have at it.

Источник: zen.component on csp.page %ZEN.Auxiliary.jsonProvider
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825332
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZEN JSON, работает только в одну сторону, и выводит JSON в текущий поток
попробуйте это , у себя использую его.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825447
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor, почему только в одну сторону? В коде класса %ZEN.Auxiliary.jsonProvider есть внутренние методы %ObjectToJSON и %ParseJSON. Правда нет уверенности, что реализация совпадает со стандартом
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825451
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan Darkhan, кстати метод %ArrayToJSON там тоже есть
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825492
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё много методов " Low Level JSON Support " можно найти в файле zenCSLM.js .
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825516
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокументацияThe Zen <jsonProvider> component provides a way to transport object data between a server and client , or between client and server , using JavaScript Object Notation (JSON) format.
Источник: Zen JSON Component


И ещё (ссылку приводил выше):
The jsonProvider component provides a way to transport object data between a server and client ( and vice versa ) using JavaScript Object Notation (so-called JSON format).
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825535
Darkhan Darkhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты.

Но мне нужно использовать это в CSP (не ZEN).
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825847
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan DarkhanНо мне нужно использовать это в CSP (не ZEN).
Так чем не угодили гиппер эвенты?
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825885
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDarkhan DarkhanНо мне нужно использовать это в CSP (не ZEN).
Так чем не угодили гиппер эвенты?
гипер евенты много чем могут не угодить, да и связь какая между JSON и HyperEvent ?

для гипер евентов нужно, держать настроенной область csp, а когда для безопасности хочется все прикрыть приходится выделываться.
при переходе с 2008 на 2010. возникла проблема, клиентам приходилось вымудрятся с настройкой IIS (Apache), да и мне самому на разработческой машине. настраивать так чтобы не пересекалась папка CSP для разных версий Cache, так как гиперевенты там не совместимы. И у меня в своем приложении тоже есть желание напрочь отказаться от использования гиперевентов.
а еще сложность отладки, сложно понять по вызову гиперевента куда он все таки уйдет (класс, метод)
в общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825923
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorв общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать.
Х/з за что ты так на них жлобанул...
...
Рейтинг: 0 / 0
CSP. JSON.
    #37825933
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorсвязь какая между JSON и HyperEvent ?
Суть одна... Передача/получение данных.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826099
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDAiMorсвязь какая между JSON и HyperEvent ?
Суть одна... Передача/получение данных.
тогда встречный вопрос,
как организовать передачу/возврат гиперевентами сложных структур данных:
объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826183
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не самый лучший способо, наверно, но я записью в текущее устройство вывода внутри гиперевента формирую яваскрипт.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826186
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorкак организовать передачу/возврат гиперевентами сложных структур данных:
объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки

Я делаю так.
С клиента передаю на сервер (гиперивентом) указатель на объект DOM (js).
Методом сервера (посредством &js<>) наполняю мой переданный js объект данными и поведением любой сложности, доступной в рамках js и DOM.
Возвращаю на клиент "пусто" (или ошибку, если что-то пошло не так).

В итоге, сразу после выполнения метода на стороне сервера имею на клиенте объект, содержащий сколь угодно сложную структуру (к примеру со свойством, представляющим из себя массив объектов, каждый из которых содержит набор массивов данных и т.д. и т.п. + измененное в соответствии с инструкциями сервера поведение объекта на странице - новые и измененные методы).

ЗЫ: Это не к тому, что JSON - плохо. Скорее наоборот - очень удачная идея, считаю. Так же как и вообще REST, который уже кажется всем показал, как нас смешно развели когда-то с xml, soap, wsdl etc. Ведь повелись в свое время - как кролики. Нет бы стандарты читать и использовать ;) И вообще, вот это "Суть одна... Передача/получение данных." наводит на размышления о том, почему клавиш 104, монитор квадратный, и рук две - "суть"-то одна - никем не доказано, что треугольный монитор не дает возможности работать с гуи... но, почему-то таковых не наблюдается, а вот изыски в изготовлении софта, в т.ч. способов "передачи/получения данных", изобилуют ;) Так что, имхо, суть далеко не одна...
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826451
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan DarkhanВсем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты.

Но мне нужно использовать это в CSP (не ZEN).
doublefint привёл некоторые методы из класса %ZEN.Auxiliary.jsonProvider , которые можно вызывать из CSP, например:
Пример на ZENClass SqlRu.test Extends %ZEN.Component.page
{

/// Comma-separated list of additional JS include files for the page.
Parameter JSINCLUDES As STRING = "zenCSLM.js";

XData Style
{
<style type="text/css">
/* establish size of finder */
#finder {
  border: 1px solid black;
  width: 900px;
  height: 400px;
  overflow-x: auto;
  overflow-y: hidden;
  background: rgb(180,190,200);
}

/* fix width/height of each finder column */
.finderColumn {
  width: 300px;
  height: 400px;
}
</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="" height="100%">
<jsonProvider id="json" OnGetArray="GetFinderArray"/>
<finderPane id="finder" ongetdata="return zen('json').getContentObject();"/>
<button caption="test" onclick="zenPage.test();"/>
</page>
}

ClientMethod test() [ Language = javascript ]
{
  zenAlert(ZLM.jsonEncode(zen('json').getContentObject()));
}

/// Provide the source data (as an array) that will drive the finder.
Method GetFinderArray(
  ByRef pParameters,
  Output pMetaData,
  Output pData) As %Status
{
  // The MetaData list specifies the names of the properties of the 
  // JavaScript objects and the order in which they appear within
  // nodes of the data array.
  Set pMetaData = $LB("name","title","supervisor","phoneNo")

  // create a random org chart
  Set d = 0
  For tDept = "Sales","Marketing","Engineering","HR","Finance" {
    // add top-level entry for each department
    Set d = d + 1
    Set pData(d) = $LB(tDept) // name, but no other properties

    // add executive to each dept
    Set tVPName = ##class(%PopulateUtils).Name()
    Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept)

    // add 2nd level managers
    For n = 1:1:($R(10)+2) {
      Set tMgrName = ##class(%PopulateUtils).Name()
      Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName)

      // add workers
      For w = 1:1:($R(25)+2) {
        Set tWkrName = ##class(%PopulateUtils).Name()
        Set tTitle = ##class(%PopulateUtils).Title()
        Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName)
      }

    }
  }
  Quit $$$OK
}

}
Аналог на CSP<CSP:CLASS INCLUDES="%callout">
<html>
<head>
<title></title>
<script type="text/javascript" src="zenutils.js"></script>
<script type="text/javascript" src="zenCSLM.js"></script>

<script language="cache" method="GetFinderArray" arguments="&pMetaData,&pData" returntype="%Status">
  
  
  new d,tDept,tVPName,n,tMgrName,tWkrName,tTitle
  
  // The MetaData list specifies the names of the properties of the 
  // JavaScript objects and the order in which they appear within
  // nodes of the data array.
  Set pMetaData = $LB("name","title","supervisor","phoneNo")

  // create a random org chart
  Set d = 0
  For tDept = "Sales","Marketing","Engineering","HR","Finance" {
    // add top-level entry for each department
    Set d = d + 1
    Set pData(d) = $LB(tDept) // name, but no other properties

    // add executive to each dept
    Set tVPName = ##class(%PopulateUtils).Name()
    Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept)

    // add 2nd level managers
    For n = 1:1:($R(10)+2) {
      Set tMgrName = ##class(%PopulateUtils).Name()
      Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName)

      // add workers
      For w = 1:1:($R(25)+2) {
        Set tWkrName = ##class(%PopulateUtils).Name()
        Set tTitle = ##class(%PopulateUtils).Title()
        Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName)
      }

    }
  }
  
  /*
  
  или
  
  Set pMetaData = $LB("name","rank","serialNo")
  Set pData(1) = $LB("Smith","Captain","444-33-2222")
  Set pData(1,1) = $LB("Jones","Corporal","333-22-3333")  
  */
  Quit $$$OK
</script>

  <script language="cache" method="SrvTest" returntype="%String">
  new format,tIO,tXDEV,export,tChunk
  
  do ..GetFinderArray(.pMetaData,.pData)
  
  // собираем в строку всё, что выводится через write
  
  set tIO=$IO,tXDEV="|XDEV|"_+$JOB,$ZT="Trap"
  Do {
    /// For $$$IsUnicode use UTF-8
    Open tXDEV:($ZF(-6,$$$XSLTLibrary,12):"":"S":/HOSTNAME="XSLT":/IOT=$S(($zcvt($get(format),"L")[",utf8")||$$$IsUnicode:"UTF8",1:"RAW"):/IBU=16384:/OBU=16384)
    Use tXDEV
    
    Quit:$$$ISERR(##class(%ZEN.Auxiliary.jsonProvider).%ArrayToJSON(.pMetaData,.pData))
    
    // Flush any remaining output
    Write *-3
    
    // Now read back a string (up to the maximum possible length, 32k or ~4MB for long strings)
    Set export = ""
    While (1) {
      #dim tChunk As %String
      Read tChunk:0
      Quit:'$L(tChunk)
      Set export = export _ tChunk
    }
    
  } While (0)

:Exit
  Close tXDEV
  Use tIO
  Quit export
:Trap
  Set $ZT=""
  Goto Exit
</script>

<script type="text/javascript">
function test()
{
  var str=#server(..SrvTest())#;
  var obj=ZLM.jsonParseObject(str);
  zenAlert("str=",str);
  zenAlert("obj=",obj);
  zenAlert("name=",obj.obj.children[0].name);

  /*
  
  можно ещё так
  
  var str2=ZLM.jsonEncode(obj,false);
  zenAlert("str2=",str2);
  */
}
</script>

</head>
<body>
  <button onclick="test();">test</button>
</body>
</html>

PS: в обратную сторону, думаю, справитесь самостоятельно.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826547
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor тогда встречный вопрос,
как организовать передачу/возврат гиперевентами сложных структур данных:
объект с несколькими свойствами, некоторые свойства которого могут быть массивами?

Передачу, например, так:

Код: html
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.
<!DOCTYPE html>
<html><head><title>HyperEvent</title></head><body>
<button type="button" id="call">#call#</button>
<button type="button" id="server">#server#</button>
<script type="text/javascript">
var $g=function(id){return document.getElementById(id) || "" };
var $bind=("v"=="\v") ? function(o,e,h){ o.attachEvent("on"+e,h)} : function(o,e,h){o.addEventListener(e,h,false);};

window.alertType=function( arg ){
		alert( typeof( arg ) + " = " + arg  );
};

$bind(window,"load",function(){
		
		$bind( $g("call"), "click", function(){
				#call(..wNowJS("window.parent.alertType"))#
		});
		
		$bind( $g("server"), "click", function(){
				alertType( eval(#server(..gNowJS())#) );
		});
	
});

</script></body></html>
<script runat="server" language="cache" method="wNowJS" arguments='jsfunc:%String="alert"' returnType="%String">
 w ";",jsfunc,"(",..gNowJS(),");"
 Q ""
</script>
<script runat="server" language="cache" method="gNowJS" returnType="%String">
 Q "{now: ['"_$zd($zu(188),3)_"'], status: true }"
 </script>



Возврат с помощью jsonProvider
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826965
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorтогда встречный вопрос,
как организовать передачу/возврат гиперевентами сложных структур данных:
объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
Тут можно вспомнить старинный анекдот:
- Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут...
- Не делайте так!

Любое большое и сложное можно разбить на много, много простых и маленьких...
...
Рейтинг: 0 / 0
CSP. JSON.
    #37826973
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Минусы:
- много обработки на клиенте,
- много обращений к серверу, которые будут нагружать шлюз.
...
Рейтинг: 0 / 0
CSP. JSON.
    #37827061
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDAiMorтогда встречный вопрос,
как организовать передачу/возврат гиперевентами сложных структур данных:
объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
Тут можно вспомнить старинный анекдот:
- Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут...
- Не делайте так!

Любое большое и сложное можно разбить на много, много простых и маленьких...
эмм, что может быть проще
на клиенте
Код: javascript
1.
2.
var ask = JSON.stringify(obj) // получили из любого сложного объекта JSON строку которую можно передать на сервер
var obj = JSON.parse(reply)  // получили из ответа сервера в формате JSON, любой сложный объект


на сервере
Код: sql
1.
2.
set obj = ##class(JSON).Decode(ask) // Получим объект Cache, с удобной многомерной структурой типа %ArrayOfDataTypes(объект со свойствами) или %ListOfDataTypes(массив)
set reply = ##class(JSON).Encode(obj) // сформируем JSON ответ, браузеру
...
Рейтинг: 0 / 0
CSP. JSON.
    #37827268
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorэмм, что может быть проще
Выглядит не плохо...
...
Рейтинг: 0 / 0
CSP. JSON.
    #37827446
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, *(если IE >= 8 ;)
...
Рейтинг: 0 / 0
CSP. JSON.
    #37827460
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, вот тут подробнее
...
Рейтинг: 0 / 0
CSP. JSON.
    #37827518
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , я пока обходился и без этого...
Но на заметочку возьму конечно.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CSP. JSON.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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