1

Получение отчета. IWialonReport.Generate

Тема: Получение отчета. IWialonReport.Generate

Привет.

При вызове функции IWialonReport.Generate должен вернуться отчет в формате XML.
Иногда возвращается пустая строка.
Если через время повторить вызов с теми же параметрами,
уже возвращается не пустая строка.

В чем причины такого поведения функции и как с этим бороться?

2

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

dvoytikov, функция IWialonReport.Generate просто возвращает, что вернулось от сервера. Если вернулась пустая строка - значит функция отработала. Повторяется ли ошибка в примере идущем в дистрибутиве?

3

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

nevl
Я делаю одни и те же действия.
1. Выбираю период  (например, прошлые сутки).
2. Запрашиваю отчет в цикле по устройствам.
3. Если функция вернул пустой отчет, я выжидаю 3 секунды и повторяю запрос отчета с теми же параметрами.
4. Если отчет так и не был получен за 25 сек, перехожу к следующему устройству.

Может быть такое, что все отчеты будут возвращены функцией без пустых строк.
Так моя программа и работала в последние месяцы.
Бывает, что функция возвращает пустую строку, но при повторе (повторах) вернет полный отчет.

Пользователи сообщили, что примерно с 5 ноября стали часто появляться подобные ошибки.
То есть функция возвращала пустые строки.

4

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

dvoytikov, возможно ограничения?

At the dark side of telematics...
5

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

shal
Смотрю ограничения:

Ограничения по отчетам:
    На выполнение отчета онлайн отводится 2 минуты;

Смотрю свою статистику:
По одному устройству запрашиваю отчет за сутки.
В среднем, каждый отчет получается в течении 2 секунды.
Все устройства (72 шт.) обработались за 2 мин. 15 секунд (вместе с обработкой и сохранением).
То есть можно считать, что это ограничение не влияет.

    На выполнение отчета по заданию или уведомлению отводится 10 минут.
Не понятно, что это, но время здесь еще больше.


Прочие ограничения:
    В рамках одной сессии может одновременно обрабатываться не более 3 трудоемких запросов, таких как выгрузка сообщений, выполнение отчета и т.п.

Моя программа установлена на  6 компьютерах.
Везде один логин и пароль, но разные наборы устройств.
Возможна ситуация, когда они подключаются одновременно и закачивают отчеты.
При этом на компьютере может быть открыт сеанс WialonPro в браузере.

Что для системы является сессией?  По логину или коннекту определяется?

6

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

shal
Попробовал запустить одновременно 5 сеансов.
Посыпались ошибки.
Поочередно, то в одном, то в другом сеансе возвращался пустой отчет.
Затем запустил одновременно 2 сеанса и результат такой же.
Похоже, одновременная работа не предусмотрена.

7

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

Смотрите прочие ограничения на сессию и на пользователя. На пользователя - общие, на сессию - уникальные для каждой сессии (компьютера).

Возможно сам отчет посмотреть по структуре.

At the dark side of telematics...
8

Получение отчета. IWialonReport.Generate

Re: Получение отчета. IWialonReport.Generate

shal
Структура отчета
<report lang="ru" name="Поездки" tz="7200">
    <stats>
        <row name="Отчет" txt="Поездки" val="0" vt="0"/>
        <row name="Объект" txt="DN/12101/Кeрзин В.В./B106-13534" val="0" vt="0"/>
        <row name="Время выполнения отчета" txt="2014-11-19 11:15:31" val="1416388531" vt="30"/>
        <row name="Начало интервала" txt="2014-11-18 00:00:00" val="1416261600" vt="30"/>
        <row name="Окончание интервала" txt="2014-11-19 00:00:00" val="1416348000" vt="30"/>
        <row name="Время в движении" txt="5:59:28" val="21568" vt="40"/>
        <row name="Пробег в поездках" txt="150 км" val="149597.336611" vt="10"/>
        <row name="Средняя скорость в поездках" txt="25 км/ч" val="24.969882" vt="20"/>
        <row name="Макс. скорость в поездках" txt="72 км/ч" val="72" vt="20"/>
        <row name="Кол-во поездок" txt="23" val="23" vt="2"/>
        <row name="Количество стоянок" txt="24" val="24" vt="2"/>
    </stats>
    <tables>
        <table cols="12" flags="4240" id="unit_trips" name="Поездки" rows="23">
            <header>
                <col name="№"/>
                <col name="Начало"/>
                <col name="Нач. положение"/>
                <col name="Конец"/>
                <col name="Конеч. положение"/>
                <col name="Длительность"/>
                <col name="Время между"/>
                <col name="Пробег"/>
                <col name="Общее время"/>
                <col name="Пробег (скорректированный)"/>
                <col name="Начальный пробег"/>
                <col name="Конечный пробег"/>
            </header>

Проверил и убедился.
Под одним пользователем возможно получение одного отчета.
Хотя подключений может быть несколько (проверял до 5).
В то время как одно приложение получает отчет, другое приложение получает пустую строку.
Если второму приложению удается "протиснуться", то первое получает пустую строку.
Порешал временными паузами.