Как увидеть привязку к GPS координатам по время чекина визитов
Вопрос
У нас в энтерпрайз есть в моб приложении чек-ин и чек-аут. Снимает время и координаты.
После попадания в основную систему, где можно их увидеть?
Ответ
К сожалению, в базовой версии продукта эти данные не отображаются.
Найти эти данные можно в таблице БД, которая называется CheckInOutResult.
Для решения Вашего вопроса необходимы знания разработчика, который прошел обучение по конфигурированию от нашей компании.
Информацию о визите на мы храним локально на устройстве и затем при синхронизации передаем ее.
Получение данных при чекине (схема «FieldForceMobileUtilitiesV2»):
checkInOut: function(activityId, isCheckIn) { Terrasoft.Geolocation.getCurrentCoordinates({ success: function(latitude, longitude) { var checkinResultModelName = "CheckInOutResult"; var saveQueryConfig = Ext.create("Terrasoft.QueryConfig", { modelName: checkinResultModelName, columns: ["GpsX", "GpsY", "Activity", "IsCheckIn", "ActionTime"] }); var checkInOutRecord = Ext.create("CheckInOutResult", { Activity: activityId, GpsX: String(latitude), GpsY: String(longitude), IsCheckIn: isCheckIn, ActionTime: new Date() }); checkInOutRecord.save({ queryConfig: saveQueryConfig, success: function() { this.changeActivityStatusByCheckInOut(isCheckIn); }, failure: this.failureHandler }, this); }, failure: this.failureHandler, scope: this }); },
Получение текущих координат описано в схеме «FieldForceMapsModule»
Также, координаты, которые получает bpm'online, можно управлять. Приведу пример текущей реализации метода «Terrasoft.Geolocation.getCurrentCoordinates»:
getCurrentCoordinates: function(config) { var enableHighAccuracy = !Terrasoft.Connection.isOnline() || Terrasoft.Connection.getType() !== Terrasoft.ConnectionTypes.WiFi; var geo = Ext.create("Ext.util.Geolocation", { autoUpdate: false, allowHighAccuracy: enableHighAccuracy, timeout: 60000, listeners: { scope: this, locationupdate: function(geo) { Ext.callback(config.success, config.scope, [geo.getLatitude(), geo.getLongitude()]); }, locationerror: function(geo, timeout, permissionDenied, locationUnavailable, message) { … } } }); geo.updateLocation(); }
Сейчас, если нет интернет-соединения или это соединение – не WiFi (типа, EDGE, 3G), то будет использоваться «точное» позиционирование (с использованием GPS), иначе данные будут получены с использованием WiFi, кеширования и т.д., т.е. способами дающими неточные представления о местоположении устройства, но вполне достаточные для выполнения бизнес-задач.
Если нужно получать данные с использованием GPS, можно создать свою реализацию действия, по аналогии с тем, как это реализовано в bpm'online:
getCurrentCoordinates: function(config) { var geo = Ext.create("Ext.util.Geolocation", { autoUpdate: false, allowHighAccuracy: true, timeout: 60000, listeners: { scope: this, locationupdate: function(geo) { Ext.callback(config.success, config.scope, [geo.getLatitude(), geo.getLongitude()]); }, locationerror: function(geo, timeout, permissionDenied, locationUnavailable, message) { … } } }); geo.updateLocation(); }
При реализации нужно учитывать, что у такого способа есть ряд проблем:
- несмотря, что метод GPS более точен, время получения таких данных может быть достаточно больших (до 10-15 минут);
- соответсвенно время ожидания получения ответа нужно увеличить, т.е. параметр timeout выше в коде нужно будет устанавливать больше, чем 1 минуту (60000 мс);
- любые перекрытия, помехи в виде любых объектов могут не позволить получить координаты (например, у нас в офисе это нереально);
- быстрее садится батарея, что для Android-устройств весьма критично.