Необходимо получить список оборудования, которое используется в GPRS-подключении. Подключение заведено как “Сетевое”.
Пробовали
var measurePoints = modem.GetRelatedMeasurePoints();
, но точки учета возвращаются без подгруженного Equipment, приходится Refresh’ить каждую точку, на что тратится очень много времени(несколько минут).
Есть ли какое-нибудь другое быстрое решение?
Сейчас действительно метод Equipment.GetRelatedMeasurePoints не возвращает оборудование точки учёта.
В версии R21 мы добавим возможность запросить список оборудования в этом методе.
Его можно будет вызвать так:
Equipment.MeasurePoints GetRelatedMeasurePoints(MeasurePointInfoFlags.Equipment);
Пока же действительно придётся вызывать Refresh для каждой точки учёта.
Можно было бы запросить список точек учёта с оборудованием, но, к сожалению, это тоже не выход, так как в этом случае у поля MeasurePoint.Device всегда будет пустой список подключений. Это так же будет исправлено в версии R21, но пока не работает.
Пока возможен обходной манёвр:
// Выбираем всё оборудование, у которого есть подключения и у которых в качестве коммуникационного оборудования
// выбран нужный модем.
var equipment = server.Equipment.GetList();
.Where(e => e.PollSettings != null
&& e.PollSettings.Connections.Length > 0
&& e.PollSettings.Connections.Any(c => c.CommDevice != null && c.CommDevice.Id == /*Идентификатор*/));
.ToDictionary(e => e.Id);
// Выбираем те точки учёта, которые привязаны к оборудованию.
var measurePoints = server.MeasurePoints.GetList(MeasurePointInfoFlags.Equipment);
.Where(x => x.Device != null && equipment.ContainsKey(x.Device.Id));
После выхода R21 можно будет сократить запрос до такого: