powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Трансляция Intersystems Cache` кода в JS .
25 сообщений из 38, страница 1 из 2
Трансляция Intersystems Cache` кода в JS .
    #39529426
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Уважаемые коллеги выношу на общий суд следующею технологию. Цель моего обращения, это получить конструктивную критику более опытного сообщества. В связи с этим прошу не задавать вопросы , наподобие “ Зачем это надо?... ” . Возьмём за константу факт “Это надо.”
Появилась необходимость хранить JS код и Cache` в одном месте, что позволит вести документацию разработке в одном формате (единый глобальный поиск в коде).Так же очень сильно раздражала реализация синхронных запросов при вызове класс-методов из JS кода. Еще хотелось бы хранить исходный код в одном месте, без применения внешних CSP файлов (js).
Имея на руках Cache` 2013 , идею и пул задач, решаемых моими коллегами я реализовал библиотеку HTML.CacheLib.
И так на что способна эта библиотека:
1) Хранение исходного кода JS в клиент-методе и передача его клиенту.
Создаем класс:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Class Demo.CacheLibTest003 Extends %CSP.Page
{
         ClassMethod OnPage() As %Status
         {
            &html<
                    <script src='HTML.CacheLib.cls' type='text/javascript' ></script>
                   <script type='text/javascript' >
                       alert(MyRead());
                 </script>
            >
           Quit $$$OK
      }

       /// получаем время 
       ClientMethod MyRead() As %String [ Language = javascript, WebMethod ]
       {
              return 'Время: /*( w $ZDT($h) )*/';
        }
}



Пояснения: В созданном классе присутствует вызов библиотеки <script src='HTML.CacheLib.cls' type='text/javascript' ></script>.
При вызове это страницы происходит вычитывание структуры класса из глобала ^oddDEF . Вычитываются методы у которых в свойствах указаны параметры WebMethod  и Language = javascript и передает содержимое этих методов клиенту. Если в тексте присутствуют скобки в виде символов /*( Однострочный Код Cache` )*/ , тогда содержимое скобок выполняется как однострочный код, и результат помещается вместо этих скобок. Описание клиент-метода тоже передается клиенту перед телом функции.
Код полученный из класса помещается в конец “HTML.Cache.cls” .
Если “HTML.Cache” обозначить как суперкласс нового класса User.TestJS , тогда можно будет подключать новый класс следующим образом <script src='User.TestJS.cls' type='text/javascript' ></script>. Он также будет интерпретирован в JS код. Этот метод позволить создавать JS библиотеки в Cache` классах.

2) Асинхронный вызов класс-метода Cache` из JS кода.
Создаем класс:
Код: 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.
Class Demo.CacheLibTest004 Extends %CSP.Page
{
       ClassMethod OnPage() As %Status
       {
        &html<
                <script src='HTML.CacheLib.cls' type='text/javascript' ></script>
                <script type='text/javascript' >
               
                 // функция для обработки результат 
                 var CallBackFun=function(txt){ alert(txt); }
                 
                 //Асинхронный запрос
                 runMethod('Demo.CacheLibTest004.CacheBlaBlaBla',CallBackFun,' Асинхронный запрос класс-метода '); 
              
                        //Синхронный запрос
                 var txt=runMethod('Demo.CacheLibTest004.CacheBlaBlaBla',' Синхронный запрос '); 
                 alert(txt);
               </script>
              >
           Quit $$$OK
       }

       /// Класс метод, который будем вызывать из JS
       ClassMethod CacheBlaBlaBla(msg)
       {
         w $zdt($h)_":"_msg
       }
}


Пояснения: Механизм вызова JS функции runMethod скопирован из "/csp/broker/cspxmlhttp.js" и"/csp/broker/cspbroker.js" , с небольшой модификацией для работы с асинхронными запросами. Думаю инженеры компании Intersystems могут взять на заметку данный метод, и в дальнейшем в новых релизах всё-таки внедрить асинхронные запросы. В JS не составит труда анализировать второй аргумент, и если он является функцией, тогда считать это асинхронным запросом и результат запроса передавать в аргументнуюу функцию. Мой метод является не очень защищенный, так как название вызываемого класс-метода, передается в нешифрованном виде.
3) Добавлена возможность динамического подключения CSS и JS библиотек
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 <script language="JavaScript"> 
                // Подключаем библиотеку JS из класса
              includeClass('HTML.js.WebGL.BabylonJS.babylon.cls','javascript'); 
               // Подключаем JS библиотеку из файла
              includeFile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js','javascript'); 
              // Подключаем JS библиотеку из файла
              includeFile('https://jQuery.min.js'); 
               // Подключаем CSS библиотеку из файла
              includeFile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css','css'); 
   </script>


Пояснение: Обращаться к вновь подключенным библиотекам можно будет сразу же после полной загрузке страницы.
4) Создание JS прототипов в Cache классе.(создание JS классов).
Создаем прототип:
Код: 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.
Class User.Prototyp Extends HTML.CacheLib
{
/// Альтернативное название прототипа. 
/// Если этого параметра нет, тогда имя прототипа
/// берется из имени класса “Prototyp”
Parameter ClassName = "ClassName";
/// Публичные переменные прототипа
Property Pole1 As %String [ InitialExpression = "Value1", Internal ];
Property Pole2 As %String [ InitialExpression = "Value2", Internal ];
Property Pole3 As %String [ Internal ];
/// Конструктор прототипа
ClientMethod prototyp(arg1 = "") As %String [ Internal, Language = javascript ]
{
   this.Pole1=arg1;
}
ClassMethod Test(Arg) As %String [ Internal, Language = cache ]
{
   w $zdt(+$h)_": "_Arg	
   q ""
}
ClientMethod Test3(arg1 = "") As %String [ Internal, Language = javascript ]
{
   alert(arg1);
}
}


Применение прототипа в CSP страницы :
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<html>
<head>
<title> Cache Server Page </title>
</head>
<body>
  <script src='HTML.CacheLib.cls' type='text/javascript' ></script>
  <script src='User.Prototyp.cls' type='text/javascript' ></script>
  <script  language="JavaScript">
      var edit=new ClassName('ArgClassName');// Создаем экземпляр прототипа
      alert(edit.Pole1); // обращение к переменной
      alert( runMethod('User.Prototyp.Test','dddddddddd') );
      alert(edit.Test('+++++++MSG2+++++'));// синхронный вызов функции
      retunFun=function(txt){ alert(txt); }
      edit.Test(retunFun,'-----MSG3----'); // асинхронный вызов
      edit.Test3('Args123')
  </script>
</body>
</html>


 
5) Создание собственного HTML элемента в Cache классе (работа с прототипами).
Создаем прототип HTML элемента:
Код: 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.
Class User.Prototyp2 Extends HTML.CacheLib
{
/// Название класса для создания элемента из JS
Parameter ClassName = "TestHtmlTag";
/// имя тэга <my-input>0</my-input>
Parameter tagName = "my-input";
Property timer As %Integer [ InitialExpression = 0, Internal ];
/// содержимое Тэга
Property innerHTML As %String [ InitialExpression = "Value1", Internal ];
/// JS Конструктор HTML элемента
ClientMethod prototyp2(arg1 = "") As %String [ Internal, Language = javascript ]
{
  this.Pole1=arg1;
}
/// запуск таймера
ClientMethod attachedCallback() As %String [ Internal, Language = javascript ]
{
   setInterval(this.tick.bind(this), 1000);
}
/// Функция срабатывает после создания элемента (инициализация)
ClientMethod createdCallback() As %String [ Internal, Language = javascript ]
{
   this.timer = 0;
}
/// функция инкремента
ClientMethod tick() As %String [ Internal, Language = javascript ]
{
    this.timer++;
    this.innerHTML = this.timer;
}

}


Создание HTML элемента в CSP файле
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<html>
<head>
<title> Cache Server Page </title>
</head>
<body>
  <script src='HTML.CacheLib.cls' type='text/javascript' ></script>
  <script src='User.Prototyp2.cls' type='text/javascript' ></script>
  <my-input>222222</my-input>
</body>
</html>


Пример взят с сайта: https://learn.javascript.ru/webcomponent-core

В библиотеке присутствуют и другие JS функции, которые на мой взгляд будут полезны. Но основное уже описал.
В итоге повторно озвучиваю пожелания к сообществу. Для дальнейшего развития необходимо конструктивная критика что на ваш взгляд сделано не правильно.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529483
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я как то сильно бегло прочитал, но не заметил "трансляции Caché кода в JS", как заявлено в названии темы.
То что вы изобрели, ничего нового не вижу. Но при этом подходы ваши я бы назвал уже несколько устаревшими.
Вы затрагиваете тему Веба, а он сейчас довольно быстро развивается и вы игнорируете некоторые новые возможности. И это касается не только JS/CSS, вы даже не все возможности Caché применяете.

И советую все таки перейти на более свежую версию Caché. Все таки на дворе 2017 год, а у вас 2013 версия.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529486
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вот тоже не совсем понял..?
Вроде все это есть в ZEN-технологии..?
Или там кардинально все не так..?
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529519
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Если бы я был уверен, что тут все отлично, то не стал бы подремать эту тему.
В описании действительности не слово не сказал о трансляции. Это мое упущение , библиотека предназначена для трансляции кода, от сюда и тема.

Функция трансляции присутствует в библиотеке. Суть работы этого метода: Сначала инициируются переменные в Cache , желательно в методе ProcessMethod=1, или глобальные переменные «%var» потом запускается метод
Код: html
1.
do ##class(HTML.CacheLib).DrawObj() 

он как раз и интерпретирует в JS код все инициированные переменные.

Множите хотя бы поверхностно озвучить (на ваш взгляд) какие технологии я упускаю.
P/s
Вопросу покупки современной версии Cache` увы не в моей компетенции, Работаю на том, что предоставил работодатель.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529528
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexKB,

Не могу ответить на ваш вопрос, потому, что в принципе не работал с ZEN-технологией, на практике. Чисто гипотетически вы правы, эти технологии похожи .
Если конечно ZEN поддерживает асинхронные запросы... Но опять же это все гипотетически.
В организации где я работаю не применяют эту технологию.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529539
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

Исправляю упущение...

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Class Demo.InterJS Extends %CSP.Page
{

      ClassMethod OnPage() As %Status [ ProcedureBlock = 0 ]
       {
           &html< <script src='HTML.CacheLib.cls' type='text/javascript' ></script>        >
           &html< <body></body>>
           s a=11111
          ; Создаем элемент INPUT и вешаем на него JS функцию
           s MyFun="function(){alert(222);}"
           s inp3=##class(%ZEN.proxyObject).%New()
           s inp3.parentElement="body"
           s inp3.tagName="input"
           s inp3.value=$h
           s inp3.onclick="MyFun"
           w "<script>"
           do ##class(HTML.CacheLib).DrawObj()
           w "</script>"
           Quit $$$OK
      }
}
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529550
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIA,
Понятно.
Я еще с 2007 версии как сел на ZEN, так пока что лучшего себе и не желаю.
Методы сервера с клиента можно вызывать как синхронно, так и асинхронно. Но Вам уже это неинтересно, поскольку корпоративные правила изменить одному работнику очень трудно, почти не возможно, имея даже семь пядей во лбу!
Но может классы ZEN Вам в чем то и помогут, при рассмотрении кода...
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529596
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример 2

Код: html
1.
2.
3.
4.
Class Demo.Elements.Style Extends %RegisteredObject
{
   Property background As %String;
}



Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Class Demo.Elements.element Extends %RegisteredObject
{
   Parameter NS = "http://www.w3.org/1999/xhtml";
   /// Название объекта JS (обязательно)
   Property tagName As %String [ InitialExpression = "div" ];
   /// Название родительского элемента (если пусто тогда объект помещается в 'body')
   Property parentElement As %DataType;
   Property value As %String;
   Property innerHTML As %String;
   Property onclick As %String;
   Property style As Demo.Elements.Style [ InitialExpression = {##class(Demo.Elements.Style).%New()} ];
}






Код: 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.
Class Demo.TestCacheLib3 Extends %CSP.Page
{

ClassMethod OnPage() As %Status [ ProcedureBlock = 0 ]
{
    // &html< <script src='HTML.CacheLib.cls' type='text/javascript' ></script>        >
     s a=11111
    ; Создаем элемент INPUT и вешаем на него JS функцию
     s MyFun="function(){alert(222);}"
     s inp3=##class(Demo.Elements.element).%New()
     s inp3.parentElement="body"
     s inp3.tagName="input"
     s inp3.value=$h
     s inp3.style.background="red"
     s inp3.onclick="MyFun"
     
     s obj=##class(%ZEN.proxyObject).%New()
     s obj.NS="http://www.w3.org/1999/xhtml"
     s obj.parentElement="body"
     s obj.tagName="input"
     s obj.value=$zdt($h)
     s obj.onclick="MyFun"
     
     w "<script>"
     do ##class(HTML.CacheLib).DrawObj()
     w "</script>"
     Quit $$$OK
}

}
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529609
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для доступа к библиотеке из любой области имен на сервере, скопировал HTML.CacheLib в %ZHTML.CacheLib

Подключении в HTML:
Код: html
1.
<script type="text/javascript" src="%25ZHTML.CacheLib.cls"></script> 



Дописал дописал пару примеров в описание класса.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529806
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIAВ связи с этим прошу не задавать вопросы , наподобие “ Зачем это надо?... ” . Возьмём за константу факт “Это надо.”
Тогда особо и обсуждать нечего... Разве, что "лизать" со всех сторон это "надо" и не более того.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529833
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

В принципе я получил ответ на свой вопрос можно считать вопрос закрыт.
Этот подход к написанию кода необходим в тех случаях, когда ZEN технология не применяется в компании, а очень хочется как-нибудь шаблонизировать типичные компоненты, чтобы не таскать из класса в класс один и тот же фрагмент кода, а написал в одном месте JS логику в cache структуре ( ну и связал её конечно же), Написал инструкцию в документации (Description) и в дальнейшем только вызывал или добавлял свои HTML компоненты.
Удобная форма переноса кода из проекта в проект. Выгрузил компоненты (классы) в xml , и загрузил в новом проекте, без каких либо настроек.
Так же такой подход помогает держать человеческое описание логики Cache и JS в одном месте. Это удобно в тех случаях, когда один модуль разрабатывает несколько человек.
Происходит постепенный отказ работы с внешними файлами (*.js,*.css).
Пожалуй, это основное.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529836
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIAВ принципе я получил ответ на свой вопрос можно считать вопрос закрыт.
Как говаривал наш завкафедры - ЧТД...
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529949
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
не будьте столь строги. Понятно, что революции в технологиях Intersystems человек не совершил, и на Нобелевскую премию эта разработка не тянет. Но тот факт, что есть еще люди, которые сами себе ставят какие-то новые (по их мнению) технические задачи в рамках технологии, решают их и получают от этого удовольствие является весьма отрадным и говорит о том, что опасности захиреть и закиснуть у сообщества все-таки нет.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39529964
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyчто опасности захиреть и закиснуть у сообщества все-таки нет.
Так пока это кто-то оплачивает не захиреем!
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530006
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIA,

Работодатель доверил вам разработку технологии, существующий аналог которой (Zen) доверия ему не внушает. Несмотря на то, что Zen худо-бедно поддерживается ISC, вам, похоже, доверяют больше :)

Соглашусь с EvLaUy: хорошо, что кто-то идёт своим путём и даже где-то против течения. Читая community, видишь много материалов с пропагандой переноса многих прикладных и сервисных функций за пределы COS: на Java, JS, даже на Python. Это в общем-то понятно: в ISC и к её партнёрам за последние несколько десятков лет пришло немало народу, которые энтузиастами M[umps] никогда не были, и им сподручнее "пилить" что-то снаружи. "Пусть M/Cache используется как база, а прикладной код мы реализуем на одном из "современных" языков" - такое нередко приходится читать, даже на comp.lang.mumps. А здесь - практически M-классика: давайте всем управлять из одного места. Респект.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530297
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Тут главное, чтобы не получилось так, как со мной...
На одном из предприятий, где я работал, шеф вызывает и говорит мне - Каше ведь все может, давай сделай так, чтобы Каше принимал данные от измерительных приборов, обрабатывал их вырабатывал команды управления на исполнительные механизмы, в соответствии с динамически изменяемыми алгоритмами, понятное дело архивировал, и отображал все это на LabView, прямо в его родных компонентах (осциллографы, вольтметры и все что там есть). А главное, чтобы программировать не в LabView, а в Каше. Чтобы из описаний, которые есть в Каше, строились экраны LabView и там все отображалось. И еще, чтобы программировать не на языке Каше, а на уровне технологических понятий, алгоритмы программировать либо в табличном виде, либо в виде блок-схем, второе лучше, но на первом этапе сойдет и таблицами.
И что вы думаете, когда были созданы первые работающие прототипы его желаний, когда он увидел, что все это можно реализовать, нужно только довести уровень прототипа до уровня реальной системы, он сказал - все это фигня, нам это не надо, будем и дальше писать все на С++.

Поэтому хочу пожелать, чтобы такого не случилось с автором темы!
А на Каше можно сделать очень много чего интересного, полезного, нужного - нужна только политическая воля руководства!
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530333
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,
Вы реально круты. Но такое случается со всеми программистами. Все мы пишем замечательные проги, которые в результате оказываются никому не нужны. Но ничего страшного в этом нет - зарплата-то идет. А вот если такое случилось, когда на себя работаешь, - тогда беда.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530470
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Открою тайну, в моем случае политической воли руководства в разработке не участвовала. Все строится на голом энтузиазме и классической человеческой лени. Разработка вилась в полулегальном состоянии. Главная цель облегчить себе жизнь в будущем. Именно по этому в библиотеке собрано много дополнительных функций.

Написав функцию в Cache я хотел к ней обращаться сразу же из JS по её имени и с аргументами. Подключив эту библиотеку я автоматически получаю такую возможность , не тратя времени на преобразование и вызов класс методов.

Пример такого вызова:

Код: 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.
Class User.CacheLibTest001 Extends %CSP.Page
{
   ClassMethod OnPage() As %Status
   {
      &html<
         <script src='HTML.CacheLib.cls' type='text/javascript' ></script> 
         <script language="javascript">
             alert( CacheMsg('Аргумент1') ) ;
             JSMsg('Сообщение 2')
         </script>
      >
      Quit $$$OK
    }
   /// Mетод Cache
   ClassMethod CacheMsg(arg) As %String [ Language = cache, WebMethod ]
  {
        w $ZDt($h)_":"_arg
        q ""
  }
  /// Метод JS
  ClassMethod JSMsg(arg) [ Language = "javascript", WebMethod ]
  {
       alert(arg);
   }
}
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530471
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
допустил небольшую ошибочку при написании


JSMsg должен объявятся как ClientMethod а не ClassMethod


Код с исправлением:
Код: 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.
Class User.CacheLibTest001 Extends %CSP.Page
{

ClassMethod OnPage() As %Status
{
 &html<
    <script src='HTML.CacheLib.cls' type='text/javascript' ></script>        
    <script language="javascript">
      alert( CacheMsg('Аргумент1') ) ;
      JSMsg('Сообщение 2')
   </script>
  >
  Quit $$$OK
}

/// Mетод Cache
ClassMethod CacheMsg(arg) As %String [ Language = cache, WebMethod ]
{
    w $ZDt($h)_":"_arg
    q ""
}

/// Метод JS
ClientMethod JSMsg(arg) [ Language = javascript, WebMethod ]
{
    alert(arg);
}

}
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530592
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIA,
может быть, Вам стОит опубликовать статью на habrahabr? Странно, что Евгений до сих пор не порекомендовал Вам это сделать. Но давать такие рекомендации - конечно же, его прерогатива, я пас.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530635
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyasnikovIA,

К сожалению не получалось написать раньше чуть более развернуто мои замечания.
Так вот, вы работаете с вебом, который развивается довольно быстро и JS ушел уже далеко вперед как и CSS.

Современный веб-проект, должен быть написан как минимум на JS2015 с модульностью. И для стилей лучше использовать SASS.
Я если честно не пробовал такую связку и писать при этом в Студии и все в классах. Для меня это выглядит несколько дико.

Проект который я начинал с нуля для Caché. Это Angular2/4 приложение, в качестве фронтенда и бекенд в виде REST на Caché. И нет никакой необходимости писать JS в Caché. Поверьте мне, не смешивать все в одном месте, гораздо эффективнее.

Бекенд и фронтенд должны быть раздельными, в этом реально есть смысл, даже если поддержкой занимается один человек.

Сейчас у меня есть еще один проект с ZEN, и я уже думаю как бы его сконвертировать во что-то более менее современное Angular/React/Vue
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530658
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorПоверьте мне, не смешивать все в одном месте, гораздо эффективнее.
В научном сообществе, когда человек говорит "более эффективно" или "менее эффективно", его обычно сразу спрашивают - какие критерии эффективности он имеет в виду. Иначе такие фразы - ни о чем, и будут проигнорированы. Возможно, что для Вашей задачи эффективнее не смешивать, а для задачи ТС-а - наоборот.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39530669
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyDAiMorПоверьте мне, не смешивать все в одном месте, гораздо эффективнее.
В научном сообществе, когда человек говорит "более эффективно" или "менее эффективно", его обычно сразу спрашивают - какие критерии эффективности он имеет в виду. Иначе такие фразы - ни о чем, и будут проигнорированы. Возможно, что для Вашей задачи эффективнее не смешивать, а для задачи ТС-а - наоборот.Данные выводы основаны на личном опыте.
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39531011
Sheonn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С современными подходами во фронтенде эта технология не согласуется. Писать код js и html в классах то еще "удовольствие".
То что не обновляются системные js библиотеки и вообще работа с js, html, по-моему говорит о том, что в интерсистемс перестали пытаться догнать веб. Т.е. делаем нужные вещи сами с подходящими инструментами.
И если уж хочется писать для браузера на COS, то транслировать его в WASM
...
Рейтинг: 0 / 0
Трансляция Intersystems Cache` кода в JS .
    #39531063
MyasnikovIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я обратил внимание на то, что чаще всего озвучиваются технологии , которые были стандартизированы не так давно не ранее 2015г. Некоторые из них находятся в стадии разработки. И поддерживаются не всеми браузерами. Все они очень интересные и конечно обладают большими плюсами. Но не будем забывать, что деятельность программиста состоит в предоставлении заказчику готовый программный продукт. Который стабильно работает, и развертывается на уже действующей компьютерной инфраструктуре. На пример на моей предыдущей работе в качестве стандарта был взят IE8. Для того, чтобы перейти на Angular версии выше 1.2 работодатель должен был вложить в обновление парка ПК, довольна приличные средства (большинство компьютеров на XP).Он отказался это делать, так как поставленные задачи вполне могли решатся и старыми средствами разработки. Конечно со временем произойдет обновление, но пока не будет заменен последний ПК оператора, технология не будет изменена «Скорость эскадры определяется скоростью самого тихоходного судна этой эскадры».

Конечно это сильно утрированный пример, но думаю многие сталкивались с нежеланием заказчиков вкладываться в развитие технологий , только по той причине, что они новые интересные, и открывают иные подходы для решения типичных задач. Работодатель будет «жмотится» до последнего, но из этого и состоит рынок а мы являемся частью этой деятельности.

Всем большое спасибо. Вы мне очень помогли. Благодаря вашим высказываниям, я примерно понял в каком направлении стоит развивать эту технологию. Конечно же не для нобелевской премии :) , а для себя ленивого.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Трансляция Intersystems Cache` кода в JS .
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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