|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Доброго времени суток. Уважаемые коллеги выношу на общий суд следующею технологию. Цель моего обращения, это получить конструктивную критику более опытного сообщества. В связи с этим прошу не задавать вопросы , наподобие “ Зачем это надо?... ” . Возьмём за константу факт “Это надо.” Появилась необходимость хранить 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.
Пояснения: В созданном классе присутствует вызов библиотеки <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.
Пояснения: Механизм вызова 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.
Пояснение: Обращаться к вновь подключенным библиотекам можно будет сразу же после полной загрузке страницы. 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.
Применение прототипа в CSP страницы : Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
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.
Создание HTML элемента в CSP файле Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Пример взят с сайта: https://learn.javascript.ru/webcomponent-core В библиотеке присутствуют и другие JS функции, которые на мой взгляд будут полезны. Но основное уже описал. В итоге повторно озвучиваю пожелания к сообществу. Для дальнейшего развития необходимо конструктивная критика что на ваш взгляд сделано не правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 14:59 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Может я как то сильно бегло прочитал, но не заметил "трансляции Caché кода в JS", как заявлено в названии темы. То что вы изобрели, ничего нового не вижу. Но при этом подходы ваши я бы назвал уже несколько устаревшими. Вы затрагиваете тему Веба, а он сейчас довольно быстро развивается и вы игнорируете некоторые новые возможности. И это касается не только JS/CSS, вы даже не все возможности Caché применяете. И советую все таки перейти на более свежую версию Caché. Все таки на дворе 2017 год, а у вас 2013 версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:49 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
А я вот тоже не совсем понял..? Вроде все это есть в ZEN-технологии..? Или там кардинально все не так..? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:52 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
DAiMor, Если бы я был уверен, что тут все отлично, то не стал бы подремать эту тему. В описании действительности не слово не сказал о трансляции. Это мое упущение , библиотека предназначена для трансляции кода, от сюда и тема. Функция трансляции присутствует в библиотеке. Суть работы этого метода: Сначала инициируются переменные в Cache , желательно в методе ProcessMethod=1, или глобальные переменные «%var» потом запускается метод Код: html 1.
он как раз и интерпретирует в JS код все инициированные переменные. Множите хотя бы поверхностно озвучить (на ваш взгляд) какие технологии я упускаю. P/s Вопросу покупки современной версии Cache` увы не в моей компетенции, Работаю на том, что предоставил работодатель. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 16:25 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
AlexKB, Не могу ответить на ваш вопрос, потому, что в принципе не работал с ZEN-технологией, на практике. Чисто гипотетически вы правы, эти технологии похожи . Если конечно ZEN поддерживает асинхронные запросы... Но опять же это все гипотетически. В организации где я работаю не применяют эту технологию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 16:35 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
DAiMor, Исправляю упущение... Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 16:46 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIA, Понятно. Я еще с 2007 версии как сел на ZEN, так пока что лучшего себе и не желаю. Методы сервера с клиента можно вызывать как синхронно, так и асинхронно. Но Вам уже это неинтересно, поскольку корпоративные правила изменить одному работнику очень трудно, почти не возможно, имея даже семь пядей во лбу! Но может классы ZEN Вам в чем то и помогут, при рассмотрении кода... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 17:02 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Пример 2 Код: html 1. 2. 3. 4.
Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 17:56 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Для доступа к библиотеке из любой области имен на сервере, скопировал HTML.CacheLib в %ZHTML.CacheLib Подключении в HTML: Код: html 1.
Дописал дописал пару примеров в описание класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 18:12 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIAВ связи с этим прошу не задавать вопросы , наподобие “ Зачем это надо?... ” . Возьмём за константу факт “Это надо.” Тогда особо и обсуждать нечего... Разве, что "лизать" со всех сторон это "надо" и не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 09:09 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
krvsa, В принципе я получил ответ на свой вопрос можно считать вопрос закрыт. Этот подход к написанию кода необходим в тех случаях, когда ZEN технология не применяется в компании, а очень хочется как-нибудь шаблонизировать типичные компоненты, чтобы не таскать из класса в класс один и тот же фрагмент кода, а написал в одном месте JS логику в cache структуре ( ну и связал её конечно же), Написал инструкцию в документации (Description) и в дальнейшем только вызывал или добавлял свои HTML компоненты. Удобная форма переноса кода из проекта в проект. Выгрузил компоненты (классы) в xml , и загрузил в новом проекте, без каких либо настроек. Так же такой подход помогает держать человеческое описание логики Cache и JS в одном месте. Это удобно в тех случаях, когда один модуль разрабатывает несколько человек. Происходит постепенный отказ работы с внешними файлами (*.js,*.css). Пожалуй, это основное. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 09:38 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIAВ принципе я получил ответ на свой вопрос можно считать вопрос закрыт. Как говаривал наш завкафедры - ЧТД... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 09:40 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
krvsa, не будьте столь строги. Понятно, что революции в технологиях Intersystems человек не совершил, и на Нобелевскую премию эта разработка не тянет. Но тот факт, что есть еще люди, которые сами себе ставят какие-то новые (по их мнению) технические задачи в рамках технологии, решают их и получают от этого удовольствие является весьма отрадным и говорит о том, что опасности захиреть и закиснуть у сообщества все-таки нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 10:51 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
EvLaUyчто опасности захиреть и закиснуть у сообщества все-таки нет. Так пока это кто-то оплачивает не захиреем! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 11:03 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIA, Работодатель доверил вам разработку технологии, существующий аналог которой (Zen) доверия ему не внушает. Несмотря на то, что Zen худо-бедно поддерживается ISC, вам, похоже, доверяют больше :) Соглашусь с EvLaUy: хорошо, что кто-то идёт своим путём и даже где-то против течения. Читая community, видишь много материалов с пропагандой переноса многих прикладных и сервисных функций за пределы COS: на Java, JS, даже на Python. Это в общем-то понятно: в ISC и к её партнёрам за последние несколько десятков лет пришло немало народу, которые энтузиастами M[umps] никогда не были, и им сподручнее "пилить" что-то снаружи. "Пусть M/Cache используется как база, а прикладной код мы реализуем на одном из "современных" языков" - такое нередко приходится читать, даже на comp.lang.mumps. А здесь - практически M-классика: давайте всем управлять из одного места. Респект. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 11:29 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Alexey Maslov, Тут главное, чтобы не получилось так, как со мной... На одном из предприятий, где я работал, шеф вызывает и говорит мне - Каше ведь все может, давай сделай так, чтобы Каше принимал данные от измерительных приборов, обрабатывал их вырабатывал команды управления на исполнительные механизмы, в соответствии с динамически изменяемыми алгоритмами, понятное дело архивировал, и отображал все это на LabView, прямо в его родных компонентах (осциллографы, вольтметры и все что там есть). А главное, чтобы программировать не в LabView, а в Каше. Чтобы из описаний, которые есть в Каше, строились экраны LabView и там все отображалось. И еще, чтобы программировать не на языке Каше, а на уровне технологических понятий, алгоритмы программировать либо в табличном виде, либо в виде блок-схем, второе лучше, но на первом этапе сойдет и таблицами. И что вы думаете, когда были созданы первые работающие прототипы его желаний, когда он увидел, что все это можно реализовать, нужно только довести уровень прототипа до уровня реальной системы, он сказал - все это фигня, нам это не надо, будем и дальше писать все на С++. Поэтому хочу пожелать, чтобы такого не случилось с автором темы! А на Каше можно сделать очень много чего интересного, полезного, нужного - нужна только политическая воля руководства! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 16:25 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
AlexKB, Вы реально круты. Но такое случается со всеми программистами. Все мы пишем замечательные проги, которые в результате оказываются никому не нужны. Но ничего страшного в этом нет - зарплата-то идет. А вот если такое случилось, когда на себя работаешь, - тогда беда. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 16:55 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Открою тайну, в моем случае политической воли руководства в разработке не участвовала. Все строится на голом энтузиазме и классической человеческой лени. Разработка вилась в полулегальном состоянии. Главная цель облегчить себе жизнь в будущем. Именно по этому в библиотеке собрано много дополнительных функций. Написав функцию в 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 19:36 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
допустил небольшую ошибочку при написании 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 19:41 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIA, может быть, Вам стОит опубликовать статью на habrahabr? Странно, что Евгений до сих пор не порекомендовал Вам это сделать. Но давать такие рекомендации - конечно же, его прерогатива, я пас. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 10:07 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
MyasnikovIA, К сожалению не получалось написать раньше чуть более развернуто мои замечания. Так вот, вы работаете с вебом, который развивается довольно быстро и JS ушел уже далеко вперед как и CSS. Современный веб-проект, должен быть написан как минимум на JS2015 с модульностью. И для стилей лучше использовать SASS. Я если честно не пробовал такую связку и писать при этом в Студии и все в классах. Для меня это выглядит несколько дико. Проект который я начинал с нуля для Caché. Это Angular2/4 приложение, в качестве фронтенда и бекенд в виде REST на Caché. И нет никакой необходимости писать JS в Caché. Поверьте мне, не смешивать все в одном месте, гораздо эффективнее. Бекенд и фронтенд должны быть раздельными, в этом реально есть смысл, даже если поддержкой занимается один человек. Сейчас у меня есть еще один проект с ZEN, и я уже думаю как бы его сконвертировать во что-то более менее современное Angular/React/Vue ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 11:13 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
DAiMorПоверьте мне, не смешивать все в одном месте, гораздо эффективнее. В научном сообществе, когда человек говорит "более эффективно" или "менее эффективно", его обычно сразу спрашивают - какие критерии эффективности он имеет в виду. Иначе такие фразы - ни о чем, и будут проигнорированы. Возможно, что для Вашей задачи эффективнее не смешивать, а для задачи ТС-а - наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 11:45 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
EvLaUyDAiMorПоверьте мне, не смешивать все в одном месте, гораздо эффективнее. В научном сообществе, когда человек говорит "более эффективно" или "менее эффективно", его обычно сразу спрашивают - какие критерии эффективности он имеет в виду. Иначе такие фразы - ни о чем, и будут проигнорированы. Возможно, что для Вашей задачи эффективнее не смешивать, а для задачи ТС-а - наоборот.Данные выводы основаны на личном опыте. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 12:04 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
С современными подходами во фронтенде эта технология не согласуется. Писать код js и html в классах то еще "удовольствие". То что не обновляются системные js библиотеки и вообще работа с js, html, по-моему говорит о том, что в интерсистемс перестали пытаться догнать веб. Т.е. делаем нужные вещи сами с подходящими инструментами. И если уж хочется писать для браузера на COS, то транслировать его в WASM ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 18:16 |
|
Трансляция Intersystems Cache` кода в JS .
|
|||
---|---|---|---|
#18+
Я обратил внимание на то, что чаще всего озвучиваются технологии , которые были стандартизированы не так давно не ранее 2015г. Некоторые из них находятся в стадии разработки. И поддерживаются не всеми браузерами. Все они очень интересные и конечно обладают большими плюсами. Но не будем забывать, что деятельность программиста состоит в предоставлении заказчику готовый программный продукт. Который стабильно работает, и развертывается на уже действующей компьютерной инфраструктуре. На пример на моей предыдущей работе в качестве стандарта был взят IE8. Для того, чтобы перейти на Angular версии выше 1.2 работодатель должен был вложить в обновление парка ПК, довольна приличные средства (большинство компьютеров на XP).Он отказался это делать, так как поставленные задачи вполне могли решатся и старыми средствами разработки. Конечно со временем произойдет обновление, но пока не будет заменен последний ПК оператора, технология не будет изменена «Скорость эскадры определяется скоростью самого тихоходного судна этой эскадры». Конечно это сильно утрированный пример, но думаю многие сталкивались с нежеланием заказчиков вкладываться в развитие технологий , только по той причине, что они новые интересные, и открывают иные подходы для решения типичных задач. Работодатель будет «жмотится» до последнего, но из этого и состоит рынок а мы являемся частью этой деятельности. Всем большое спасибо. Вы мне очень помогли. Благодаря вашим высказываниям, я примерно понял в каком направлении стоит развивать эту технологию. Конечно же не для нобелевской премии :) , а для себя ленивого. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 19:29 |
|
|
start [/forum/topic.php?fid=39&msg=39530471&tid=1556309]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 143ms |
0 / 0 |