|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
Доброго времени суток. Решил поделиться с коллегами наболевшим. Долгое время раздражала отсутствие интерактивности при работе в Cache' через вэб технологию. Что это значит: Допустим нам надо выполнить очень большой SQL запрос, поместить результат в EXEL (xml) файл. , и по окончанию закачать его на сторону клиента, причем самое гадкое в том, что клиент очень желает видеть процесс создания этого файла. А еще веселье в том, что у клиента очень шаловливые ручки, и он любит обновлять страницу, а то и вовсе закроет браузер. При повторной загрузке он конечно же опять нажмет на кнопку старта, и все начнется снова в новом процессе. Мне кажется данная проблема знакома многим. Стандартный вызов #server(..Test(Arg1,arg2))# тут явно не поможет. Для решения таких задач разработал класс HTML.RunJob https://github.com/MyasnikovIA/HTML.RunJob Опять же приветствуется конструктивная критика, что можно улучшить. Буду очень признателен. Пример применения (есть на ginhab): Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 17:22 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
MyasnikovIA, Что-то все-таки это слишком большой огород для такой задачи. Мне кажется, тут все и стандартными средствами делается несложно, но при использовании стандартных средств как-то больше уверенности. Из своих подобных изобретений могу назвать многоуровневые статусы задач. Т.е. процесс может устанавливать статус не всей задачи целиком, а только одного определенного уровня. При установке определенного уровня статуса вышестоящие не затрагиваются, а нижестоящие затираются. Показалось очень удобным, применял в своей библиотеке формирования *.ODS файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 00:56 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
Блок А.Н., Из сообщения я понял, что есть способ проще и легче. Только не понял какой. Можно пример, или ссылку где можно изучить эту технологию :) А огород написан по той причине, что не знал иного способа. Хотел бы прокачать свой уровень, за счет коллег :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 04:20 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
MyasnikovIA , помимо кащейских Код: javascript 1. 2. 3.
Есть и "стандартные" методы общения клиента с сервером... Например все тот же ajax/. Против повторных запусков используется простая блокировка "сигнальных" узлов/глобалов... Остается организовать прогресс на сервере и отображение его на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 09:03 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
MyasnikovIA, Ну, собственно, krvsa все сказал, только я бы на #call не особо надеяться, как способ асинхронного вызова. Не возражаете, если на псевдокоде? Веб страница: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 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. 36. 37. 38. 39. 40.
Все, в общем, просто, и все вы это знаете ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 10:57 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
krvsa, Как раз это и реализовано в HTML.RunJob Запускается процесс, при этом инициируется глобал с именем идентификатора "MYJoB_3" и глобальна и переменная с именем %runjob Все значения записанные в глобал @%runjob@(“Arg1”)=”Val” в процессе опроса состояния вернутся как JSON объект {…,”Arg1”:”Val”} и будут помещены в качестве входного аргумента JS функции “ ProgressFun=function(arg){ } “ – из примера Таким образом организован обмен информацией из запущенного процесса и браузером. Если глобал будет уничтожен, или в нем появится ветка с именем “OK”=1 , тогда опрос состояния процесса прекратится и запустится JS функция CalBackFun=function(arg){ } Что касается огорода, то основной код был взят из JS “/csp/broker/cspxmlhttp.js“ ответная часть на сервере cache’ тоже взята из системного класса %CSP.Broker.cls . все было переработано и объединено в одном классе(для удобства развертывания). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 11:22 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
MyasnikovIAКак раз это и реализовано в HTML.RunJob Дело твое... Просто я согласен с этим высказыванием Блок А.Н.Что-то все-таки это слишком большой огород для такой задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 11:49 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
В JS появляются следующие функции : callJob – функция запуска процесса refJob - функция восстановления процесса killJob - функция уничтожения процесса и если библиотека подключается в cache классе, то библиотека cspbroker.js не будет подключена, в связи с чем я переопределяю js функцию cspCallHttpServerMethod она вызывается в тех случаях когда в JS коде встречается конструкция #call( … )# При запуске callJob в первом параметре передается имя классметода в полном или коротком представлении ( "..Test2" или "User.TestRunJob.Test2" ) Если вторым аргументом подается массив простой аргумент (строка , число) тогда работает как обыкновенный синхронный запрос, аналогично работе #server(…)#. Если на вход вторым аргументом подается массив объектов в виде: var param=[beginFun,ProgressFun,CalBackFun,”JobID”,1000]; Код: html 1. 2. 3. 4. 5.
тогда класс метод запускается в параллельном потоке. При этом функция ProgressFun повторно вызывается через 1000 мсек. (время задается в параметре четвертым аргументом) . Все остальные аргументы помещаются как входящие аргументы cache класс-метода ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 11:54 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
все это после подключения в HTML коде класса <script language="JavaScript" type="text/javascript" src="HTML.RunJob.cls"></script> ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 11:55 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
krvsa, Спасибо за мнение. Это на самом деле важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 11:56 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
MyasnikovIA, Т.е. в CSP это использовать нельзя из-за переопределения cspCallHttpServerMethod? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2017, 19:18 |
|
Интерактивный вызов класс-методов Cache из Вэббраузера (без "Таймаута")
|
|||
---|---|---|---|
#18+
Sheonn, Использовать можно в классе HTML.RunJob присутствует следующая конструкция (в районе строки 592 -+ 5 строк) Код: javascript 1. 2. 3.
Благодаря этой конструкции, если функция cspCallHttpServerMethod не определена, тогда она определяется. Если определить в CSP внутри тэга HEAD Код: html 1. 2. 3.
Перед выполнением Cache добавит пере закрывающим тэгом "</HEAD>" библиотеки "cspxmlhttp.js" и "cspbroker.js" и получится конструкция Код: html 1. 2. 3.
В связи с этим cspCallHttpServerMetho будет сначала создан в HTML.RunJob.cls а затем переопределен в cspxmlhttp.js и все будет работать по старому. Код: html 1. 2. 3.
Никто не запрещает закомментировать HTML.RunJob условие перед инициализацией , и оставить Код: javascript 1.
Но надо помнить, что подключать HTML.RunJob надо будет после закрывающего тэга </head> иначе библиотека "cspxmlhttp.js" опять переопределит её. Это может понадобится, в тех случаях, когда есть желание использовать HTML.RunJob и есть необходимость скрыть от пользователя имя вызываемого класс метода при применении конструкции: Код: html 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2017, 04:51 |
|
|
start [/forum/topic.php?fid=39&msg=39564932&tid=1556295]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 393ms |
0 / 0 |