Как в вебинтерфейсе выводить постоянно результат потока?

Поддержка
  • @Fox Спасибо за ответ! Я разобрался и вот рабочий код, который ловит логи функции и записывает в [[ParseResult]], которая уже в HTML выводится. Есть 2 кнопки Start, Pause которые запускают и останавливают функцию. Спасибо, Fox!

    $(document).ready(function() {
    
    
        var app = new Vue({
            el: '#Main',
            data() {
                return {
                   Log: [],
                   Thread: null,
                   ParseResult: "",
                   Error: ""
                   }
            },
            created() {
                let self = this
                Api.SetEventHandler(function(EventType, EventData) {
                if (EventType == "log") {
                    console.log(EventData['text'])
                    self.ParseResult = EventData["text"]
                };
    
        })
            },
            methods: {
                Parse: async function()
                {
                    ParseRun = Api.RunFunction("Parse", {})
                },
                Stop: async function() {
                    if(ParseRun)
                       ParseRun.stop()
                }
            }
        })
    

    Сейчас хочу разобраться, как мне из Log брать только значение переменной, которую я в лог передаю, без лишней информации, то есть получить: [713957403] [08:55:33] Поток №2 : 1.50 > 1.50

    Как понял в документации нет возможности такой, я могу получать только весь текст, получается только регуляркой наверно выбирать нужный мне текст или все таки можно получить только данные лога без статистики (поток, время)?

  • @Jhon said in Как в вебинтерфейсе выводить постоянно результат потока?:

    Как понял в документации нет возможности такой, я могу получать только весь текст, получается только регуляркой наверно выбирать нужный мне текст или все таки можно получить только данные лога без статистики (поток, время)?

    Вы же получаете текст лога строкой, ни кто не мешает её парсить любым удобным способом.


    На будущее, на странице интерфейса можно экспортировать и импортировать интерфейс

    526fa5dc-beaf-421f-a2a8-44d7327e224f-изображение.png

    Вот экспортированный интерфейс, в котором данные из скрипта передаются через действие "результат":
    CustomInterface.main.interface.20_08_2020_06_18.txt
    скрипт 1005.xml

  • @Fox Очень круто, я уже сам думал как результат использовать, уже продумал там скачивание, а это всего 2 строки кода! Правда вопрос - не слишком ли усложнит скрипт такая система, получение номера, скачивание, парсинга из файла?

  • @Jhon не вникал в вашу огромную дискуссию, но любые данные из бас можно через события пробрасывать в интерфейс. Можно переписать функцию лога чтобы она сама каждый раз это делала

  • @UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:

    @Jhon не вникал в вашу огромную дискуссию, но любые данные из бас можно через события пробрасывать в интерфейс. Можно переписать функцию лога чтобы она сама каждый раз это делала

    Я об этом уже говорил:

    Вы же получаете текст лога строкой, ни кто не мешает её парсить любым удобным способом.

  • @Fox или я тебя не понял или мы все таки о разном )

  • @UserTrue said in Как в вебинтерфейсе выводить постоянно результат потока?:

    @Fox или я тебя не понял или мы все таки о разном )

    Возможно. Я говорю о том, что можно выводить в лог необходимые данные хоть в json и парсить получаемую строку в интерфейсе. А как создавать пользовательские события? Я ни разу не создавал :D
    Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ?

  • @Fox said in Как в вебинтерфейсе выводить постоянно результат потока?:

    Через методы из действия "Выполнить яваскрипт в веб интерфейсе" ?

    Примерно так
    2020-08-20_150942.png

    Только мне приходилось еще в интерфейсе небольшой костыль ставить, потомучто событие почему-то приходило часто по несколько раз одно и тоже. Вообщем событиям ставил ID из в интерфейсе запоминал id последнего события, если приходило событие с таким id то пропускать

  • @UserTrue Это очень круто, то есть я могу передавать как лог любые данные? Правда непонятно про костыль, это надо что-то уже интерфейс переписывать, иначе будет повторные данные слать?

  • @UserTrue Получается в идеале можно написать новую функция как LOG в BAS, которая бы передавала данные в интерфейс, а там ее ловить? Может кто написал бы такой модуль для баса платно?

  • @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 через апи бас почему-то не ловит, надо вешать через апи браузера

  • @UserTrue Можете подсказать где пор это API или код?

  • @Fox Он получается передает все данные, а как получать только последнее значение, строку?

  • @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 и получайте последний элемент массива