Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Как в вебинтерфейсе выводить постоянно результат потока?
-
@UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Jhon не вникал в вашу огромную дискуссию, но любые данные из бас можно через события пробрасывать в интерфейс. Можно переписать функцию лога чтобы она сама каждый раз это делала
Я об этом уже говорил:
Вы же получаете текст лога строкой, ни кто не мешает её парсить любым удобным способом.
-
@UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox или я тебя не понял или мы все таки о разном )
Возможно. Я говорю о том, что можно выводить в лог необходимые данные хоть в json и парсить получаемую строку в интерфейсе. А как создавать пользовательские события? Я ни разу не создавал
:D
Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ? -
@Fox said in Как в вебинтерфейсе выводить постоянно результат потока?:
Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ?
Примерно так

Только мне приходилось еще в интерфейсе небольшой костыль ставить, потомучто событие почему-то приходило часто по несколько раз одно и тоже. Вообщем событиям ставил ID из в интерфейсе запоминал id последнего события, если приходило событие с таким id то пропускать
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Правда непонятно про костыль, это надо что-то уже интерфейс переписывать, иначе будет повторные данные слать?
Ну покрайней мере так было, я уже давненько не работал с интерфейсом тк недолюбливаю верстку )))
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
Получается в идеале можно написать новую функция как LOG в BAS, которая бы передавала данные в интерфейс, а там ее ловить? Может кто написал бы такой модуль для баса платно?
Зачем что-то платно писать. Просто создайте функцию в бас, а в ней код примерно как на скрне
-
@UserTrue Если верно понял, то type: 'unique_name', мы меняем на любое имя и ловим уже в интерфейсе через
if (EventType == "[unique_name") { }Само значение передаем через msg: [[any_data]], которое уже ловим через:
EventData["text"]Верно ли я понял? Не понимаю что значит level: [[LEVEL]] (это уровень задается переменной, обязательно? Какой формат для заполнения?), обязателен ли он, а так же "customgLog" надо как-то менять или статично это? Цвет так же задавать обязательно?
-
@UserTrue Выполняю в BAS
document.dispatchEvent(new CustomEvent("customLog", { detail: { type:'EventResult', level: 1, msg: [[RESULT]], Color: #000 } }));Пытаюсь ловить, не выходит, в чем может быть ошибка?
Api.SetEventHandler(function(EventType, EventData) { if (EventType == "EventResult") { console.log(EventData['text']) self.ParseResult = EventData["text"] }; -
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox Он получается передает все данные, а как получать только последнее значение, строку?
Чегось? Вы сейчас про пользовательские события, про кастомную функцию Log или вообще про vue js?
-
@Fox Я про проект, который Вы прислали, а именно этот код:
created() { var self = this /////Обработчик событий api Api.SetEventHandler(function (EventType, EventData) { if (EventType == "result") { var TabNumber = EventData["number"] Api.DownloadResult(TabNumber).then((res) => { self.ParseResult = res }) } }) Api.AcceptResources(true) }Кастомный лог не работает, не ловит его веб интерфейс.
-
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@Fox Я про проект, который Вы прислали, а именно этот код:
created() { var self = this /////Обработчик событий api Api.SetEventHandler(function (EventType, EventData) { if (EventType == "result") { var TabNumber = EventData["number"] Api.DownloadResult(TabNumber).then((res) => { self.ParseResult = res }) } }) Api.AcceptResources(true) }Кастомный лог не работает, не ловит его веб интерфейс.
Парсите данные в массив по переносу строки
\nи получайте последний элемент массива -
@Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:
@UserTrue Можете подсказать где пор это API или код?
Я имел ввиду через addEventListener , с телефона было лень писать )