1

Соблюдение формата данных

(edited by Лео 22/10/2020 17:22:00)

Topic: Соблюдение формата данных

Запустились мы на одном предприятии, наконец-то обошли свинью от виалона в виде динамических св-в (не могли что ли сделать реквизитом ID техники и вставить в список?), все радуются, документы создают, но тут приходит кейс с ошибкой:

Во время запроса данных СМТ произошла ошибка.
Значение не является значением объектного типа (v)

Ну, думаю, где-то в структуре данных накосячили. Лезу внутрь, там разбор данных отчёта. Идёт анализ заправок за интервал. В отчёте две колонки: объём заправки и "дата заправки" (что само по себе очень интересный показатель, т.к. это не момент во времени, а интервал).
И до сих пор во всех местах мы встречали дату как структуру из 4х параметров: строка, дата в UTS и координаты.
https://c.radikal.ru/c40/2010/bb/991cccebf2ed.png
А тут вдруг приходит мне тупо строка "13.10.2020 06:16:36" и всё...
Г-да, а где соблюдение формата?
1) У меня вся система завязана на то, что вы возвращаете мне структуру с датой UTS в составе и я могу из неё получить дату. А что мне делать с этой строкой? Писать теперь парсер, чтобы из строкового представления получить дату?
2) Если вы не можете дать координаты - ладно, не указывайте реквизиты x и y, я в своей схеме XDTO поправлю, что они не обязательны. Но почему исчезло представление даты UTS? Почему вообще вы допускаете что тут мы возвращаем структуру, а тут строку?

Очень хотелось бы увидеть какой-нибудь способ через параметры отчёта или ещё как установить, чтобы всегда все даты возвращались структурой, содержащей обязательно UTS и опционально координаты.

Если вдруг поможет, это результат выполнения запроса report/get_result_rows.

2

Соблюдение формата данных

Re: Соблюдение формата данных

Добрый день!

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

Т.к при выполнении запроса svc=report/get_result_rows параметры (дата UTC, координаты) , о которых вы пишите возращаются

К примеру, обращаемся к таблице Заправки (колонки - Время, Заправлено)
Запрос

https://hst-api.wialon.com/wialon/ajax.html?svc=report/get_result_rows&sid=020b9577fef9ba68cd2c6c7634aad568&params={%22tableIndex%22:1,%22indexFrom%22:0,%22indexTo%22:10}

Ответ

[{"n":0,"i1":1359,"i2":1383,"t1":1601540461,"t2":1601541183,"d":0,"c":["1",{"t":"2020-10-01 11:33:03","v":1601541183,"y":54.2539158333,"x":27.8559781667},"67.00 л"]},{"n":1,"i1":1359,"i2":1383,"t1":1601540461,"t2":1601541183,"d":0,"c":["2",{"t":"2020-10-01 11:33:03","v":1601541183,"y":54.2539158333,"x":27.8559781667},"670.00 л"]}]

Как мы видим все параметры на месте - {"t":"2020-10-01 11:33:03","v":1601541183,"y":54.2539158333,"x":27.8559781667}

Формат ответа не менялся, значение ячейки либо текстовое может быть (зависит от типа таблицы) , либо объект с параметрами :значение ячейки, исходное значение ячейки, координаты)

"c":[        /* массив ячеек */
            <text>,        /* значение ячейки текстовое */
            {        /* или объект */
                "t":<text>,    /* значение ячейки */
                                "v":<double>,    /* исходное значение ячейки */
                "y":<double>,    /* широта */
                "x":<double>    /* долгота */
            }            
        ]
Diana Cheley
Wialon Hosting Expert
Gurtam
3

Соблюдение формата данных

(edited by Лео 23/10/2020 12:13:17)

Re: Соблюдение формата данных

Да, действительно, давайте посмотрим на это чудо:

[{"n":0,"i1":117,"i2":141,"t1":1602740403,"t2":1602740749,"d":0,"c":["381.41","15.10.2020 05:45:49"]}]

Как мы видим, все параметры НЕ на месте. Пришла какая-то дата в строке.
Вдруг у меня руки кривые и это я не могу нормально описать отчёт? Давайте посмотрим тот же запрос по той же ТСке за предыдущий день:

[{"n":0,"i1":220,"i2":373,"t1":1602568806,"t2":1602569796,"d":0,"c":["444.09",{"t":"13.10.2020 06:16:36","v":1602569796,"y":46.38172,"x":39.251228}]}]

Ого! Да тут всё как вы говорите. Наконец-то есть дата UTS, единственная, которую я могу анализировать. Да и вообще, тут структура, а не просто строка.

Заправка здорового человека:
https://d.radikal.ru/d29/2010/e6/0bf4c0b19395.png
Заправка курильщика:
https://d.radikal.ru/d01/2010/95/373b4f6e4239.png
Таблица отчёта:
https://b.radikal.ru/b26/2010/2c/3a8d3b4ee2b0.png

Большая проблема в том, что вы можете подсунуть вместо любой даты структурой внезапно строку. А у нас всё от дат зависит, все таблицы всех отчётов. Получается, теперь надо обвешивать все ваши даты проверкой, что это структура и если вдруг это строка, то нужно написать парсер строкового представления даты в дату.

Мой вопрос о том, чтобы структура с UTS в параметре v возвращалась всегда. В рамках одного и того же отчёта.

4

Соблюдение формата данных

Re: Соблюдение формата данных

Спасибо за пример.

Да, действительно в этом случае, когда в сообщении нет координат , будет возвращаться только текствое значение.
Т.к объект в данном случае - это гиперссылка, формируется только при наличии GPS данных в сообщении.
В документации об этом сказано : значение ячейки текстовое или объект. Поэтому в своей разработке вы должны на это оринетироваться, либо трекер должен всегда присылать GPS  данные.

Текстовое значение ячейки может быть измнено в любой момент со стороны пользователя, в том числе и для даты. Например, пользователь выбрал другой формат даты в отчете, либо поменял название колонки, либо единицы измерения и т.д
Для того, чтобы всегда работать с исходными значениями (чтобы всегда приходил параметр v) , и не зависить от меняющихся текстовых значений, либо от того, в каком формате пришли данные,  нужно работать с запросом report/select_result_rows (в одной из тем на форуме мы уже об этом писали)
Тут есть возможность задать параметр rawValues, который позволяет всегда отображать параметры v, vt (исходные значения)

Например, запрос строк таблиц

https://hst-api.wialon.com/wialon/ajax.html?svc=report/select_result_rows&sid=020b957c7634aad568&params={"tableIndex":1,"config":{"type":"range","data":{"from":0,"to":1,"level":0,rawValues":1}}}

Ответ

[{"n":0,"i1":18,"i2":19,"t1":1603453472,"t2":1603453485,"d":0,"uid":21728414,"c":[{"t":"1","v":0,"vt":0},{"t":"2020-10-23 14:44:45","v":1603453485,"vt":30},{"t":"56.70 л","v":56.6999969482,"vt":50}]},{"n":1,"i1":18,"i2":19,"t1":1603453472,"t2":1603453485,"d":0,"uid":21728414,"c":[{"t":"2","v":0,"vt":0},{"t":"2020-10-23 14:44:45","v":1603453485,"vt":30},{"t":"567.00 л","v":567,"vt":50}]}]

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

Diana Cheley
Wialon Hosting Expert
Gurtam
5

Соблюдение формата данных

Re: Соблюдение формата данных

Большое спасибо за выход из ситуации. Обязательно посмотрю на предложенный метод. В случае его наличия, действительно, доработки не требуются.

6

Соблюдение формата данных

Re: Соблюдение формата данных

Лео wrote:

Большое спасибо за выход из ситуации. Обязательно посмотрю на предложенный метод. В случае его наличия, действительно, доработки не требуются.

Рады помочь. Если возникнут вопросы, пишите, пожалуйста, с какими-либо примерами поможем детальнее.

Diana Cheley
Wialon Hosting Expert
Gurtam