powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как буферизировать вывод сообщений через произвольный глобал (но не ^SPOOL)?
4 сообщений из 4, страница 1 из 1
Как буферизировать вывод сообщений через произвольный глобал (но не ^SPOOL)?
    #39652982
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Уважаемые коллеги подскажите, пожалуйста, как можно буферизировать выводимое сообщение через произвольный глобал.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 
  ; Запись 
   open 2:($job)
   use 2:($job)
   w "Сообщение, попадающее в буфер (Глобал ^SPOOL)",!
   close 2:($job)
   ; Чтение
   s ind="",LastJobId=$job
   for {
     s ind=$o(^SPOOL(LastJobId,ind)) 
     q:ind=""
     continue:ind=2147483647
     w ind_": "_^SPOOL(LastJobId,ind)
     k ^SPOOL(LastJobId,ind)
   } 


Уточнение вопроса: Существует ли механизм выбора произвольного глобала в место ^SPOOL Область применения :
Запущен процесс через JOB c внутреннем бесконечным циклом . Из другого процесса передаются команды Cache` $system.Event.Signal ( http://www.sql.ru/forum/1293117/podkluchitsya-k-deystvuushhemu-processu-cherez-veb-zapros-zapustit-komandu-i-otkluchitsya
) .
Результат выполнения забираем из глобала.
Если этот механизм реализовать через ^SPOOL , тогда при переключении области имен, результат выполнения будет помещен в новую область, а Повторное подключение будет производится в старую область , в которой ^SPOOL не заполнен.
В прикреплённом файле пример реализации JS библиотеки (пример применения) , позволяющая работать пользователю в рамках одного процесса. Все запросы (#server()# и #call()# )отправленные с вэб страницы , будут выполнены в одном и том же процессе. Подход не совсем стандартный, и я уверен, что найдутся критики , но суть поднятой темы не в этом.
Стоит упомянуть, что реализация завязана на ^SPOOL , от чего хотелось бы уйти.
Буду очень признателен любой помощи в решении этой задачи.
...
Рейтинг: 0 / 0
Как буферизировать вывод сообщений через произвольный глобал (но не ^SPOOL)?
    #39653203
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В силу своей ограниченности не могу понять главного - ЗАЧЕМ? Ну пиши просто в какой тебе удобно глобал, если хочется. Зачем ТАК извращаться?
Тут даже выражение "зачем делать просто, если можно сложно" не достаточно полно описывает ситуацию. Это оверинжиниринг, доведенный до абсурда.
...
Рейтинг: 0 / 0
Как буферизировать вывод сообщений через произвольный глобал (но не ^SPOOL)?
    #39653323
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIA,

Можно описать как-бы свой девайс, в обработчиках указать что именно, в какой глобал...
Cache': перехват текущего устройства
...
Рейтинг: 0 / 0
Как буферизировать вывод сообщений через произвольный глобал (но не ^SPOOL)?
    #39654055
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо всем, кто откликнулся на мой вопрос. Как публично так и в приватных сообщениях. Для того, чтобы опробовать все предложенные варианты понадобится не много времени. Но уже готово одно решение, которое удовлетворяет запросам, озвученным в теме.

Я переработал и немного упростил библиотечку, которая позволяет работать пользователю через ВэбБраузер в рамках одного процесса ($JOB). Конечно это еще не конечный вариант, и понадобится доработка, но в целом суть останется прежней.
Кому интересно могут посмотреть вложенный файл с библиотекой и примером применения. Но если коротко , то на данный момент применил следующий вариант:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    * * *
    set %LastIO=$IO
    set %XDEV="|XDEV|"_+$j
    open %XDEV:($ZF(-6,$$$XSLTLibrary,12):"":"S":/HOSTNAME="XSLT":/IOT=$s($$$IsUnicode:"UTF8",1:"RAW"):/IBU=32768:/OBU=32768)
    u %XDEV
    * * *
     w "Вывод команд, выполнение класс методов , и т. д.",!
    * * *
   // Чтение в буфер
    write *-3
      for {
         read %ReadUserBuffer:0
         quit:'$l(%ReadUserBuffer)
         set @..#GlobalMessage@(%ClientIP,%ParentClass,"buff")=$i(@..#GlobalMessage@(%ClientIP,%ParentClass,"buff"))
         set @..#GlobalMessage@(%ClientIP,%ParentClass,"buff",@..#GlobalMessage@(%ClientIP,%ParentClass,"buff"))=%ReadUserBuffer
      }
      k %ReadUserBuffer
      
    


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


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