Мы используем Lync SDK для получения контактной информации, но он не может вернуть полный список телефонных номеров.
Мы используем Lync SDK для получения контактной информации и телефонных номеров для отображения в нашем приложении. Используется управление поиском Lync, и при щелчке правой кнопкой мыши на контакте мы пытаемся получить номера телефонов контакта.
Это периодически вызывает проблему, не возвращая полную информацию в карточке контакта в элементе управления поиском Lync. Время от времени это работает хорошо, но иногда это не возвращает полный список телефонных номеров.
List<object> endPoints = new List<object>();
List<ContactInformationType> _ContactInformationList = new List<ContactInformationType>();
_ContactInformationList.Add(ContactInformationType.EmailAddresses);
_ContactInformationList.Add(ContactInformationType.ContactEndpoints);
try
{
if (!string.IsNullOrWhiteSpace(sipuri))
{
Contact _contact = lyncObj.ContactManager.GetContactByUri(sipuri);
Microsoft.Lync.Controls.ContactCard _contactCard = new Microsoft.Lync.Controls.ContactCard();
_contactCard.Source = contact.GetContactInformation(ContactInformationType.EmailAddresses);
ContactSubscription _contactSubscription = lyncObj.ContactManager.CreateSubscription();
_contactSubscription.AddContact(_contact);
_contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High, _ContactInformationList);
// add sleep to subscribe
System.Threading.Thread.Sleep(500);
var telephoneNumbersList = (List<object>)_contact.GetContactInformation(ContactInformationType.ContactEndpoints);
foreach (object endPoint in telephoneNumbersList)
{
Logger.LogInfo(((ContactEndpoint)endPoint).DisplayName + " " + ((ContactEndpoint)endPoint).Type.ToString());
}
endPoints = telephoneNumbersList.Where<object>(N => ((ContactEndpoint)N).Type == ContactEndpointType.HomePhone || ((ContactEndpoint)N).Type == ContactEndpointType.MobilePhone || ((ContactEndpoint)N).Type == ContactEndpointType.OtherPhone || ((ContactEndpoint)N).Type == ContactEndpointType.WorkPhone).ToList<object>();
}
}
Несколько раз полная контактная информация не возвращалась. Только один из двух телефонных номеров виден в контактной информации. Пока какое-то время все номера телефонов возвращаются.
Если я пытаюсь найти тот же контакт через поиск Microsoft Lync, я вижу все номера телефонов в карточке контакта.
Не могли бы вы предложить, что может быть основной причиной и вероятным решением?
1 ответ
Вы действительно не должны спать, чтобы ждать результатов. Данные могут занять некоторое время, чтобы вернуться.
Что вы должны сделать, это добавить обработчик ContactInformationChanged. Обработчик события будет вызываться каждый раз, когда подписанные данные изменяются / загружаются.
Этот API на самом деле не подходит для шаблона доступа к данным, а затем возвращает их (что похоже на то, что вы пытаетесь сделать). Это действительно шаблон подписки на данные, и вам будет вызван, когда он будет загружен или обновлен. Наиболее полезно при отображении контактной информации в графическом интерфейсе, и контактная информация "заполняется" с течением времени при загрузке.
Также помните, что вам нужно позвонить ContactSubscription. Отписаться, когда вы закончите с контактом.
Клиент Lync кэширует контактные данные, поэтому при повторном вызове он возвращает все предварительно заполненные данные.