Мы продолжаем делать продукты на базе (и для) Skype for Business. Дело это непростое — приходится сталкиваться со множеством препятствий, которые нужно творчески преодолевать. Сегодня я расскажу о том, как шла разработка одного из наших самых последних приложений, откуда взялась идея и какие технологические задачи мы решили.

Идея


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

У нас уже была идея создания собственного клиента на основе Lync SDK, который полностью бы заменил клиент Skype for Business. Мы потратили много времени и сил, создали свой мессенджер, который покрывает все неудобства и дополняет функционал Lync, но несколько «ШоуСтопперов» так и не смогли побороть. Также оптимизма не добавляло и немалое количество багов в самом Lync SDK.

Главное, что мы получили в процессе создания собственного клиента – это огромный опыт использовании технологии и знания, которые являются, по сути, уникальными. Поэтому мы решили не останавливаться и создать несколько отдельных приложений для Skype for Business, каждое из которых должно решать только какую-то одну крупную задачу, в отличие от предыдущего проекта, который являлся приложением «всё в одном».

Так родились две идеи – это приложение для управления контактами, речь про которое пойдет в данной статье, и приложение для сохранения истории сообщений, о котором расскажем отдельно.

Стек технологий, архитектура, разработка


Приложение разрабатывалось с использованием технологий .NET Framework 4.6.1, Unity Framework, Prism.

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

Если смотреть на компонентную диаграмму архитектурного решения, то можно выделить три группы компонентов.

Компонентная диаграмма

— Сторонние компоненты, не принадлежащие нам (Lync Client SDK);
— служебные компоненты, реализующие логику соединения и развязки слоев (MSConnector, IConnector, CommonDTO, AppModel);
— прикладные компоненты, представляющие собой клиентские приложения.

Если с первой и третьей группой все более-менее понятно, то на второй следует остановиться более подробно.

AppModel – модель предметной области. Она представляет собой чистую объектную модель, которая описывает данную предметную область. Главная ее особенность — это то, что она не содержит никаких ссылок на сторонние библиотеки (например, Lync и Outlook).

Для связи с низлежащим уровнем модель использует интерфейс IConnector, который закрывает собой конкретную реализацию и всю черновую работу по соединению с транспортными и служебными библиотеками. Этот интерфейс удобно рассматривать как общий, — при разработке он был разделен на функциональные части (ICommunication, ICalendar, ITask и т.п.)

Одним из вариантов реализации этого интерфейса является MSConnector, который умеет общаться к Lync Client SDK и Outlook, а также обслуживать запросы, приходящие в рамках интерфейса.

Для того, чтобы модель и коннектор могли поддерживать эффективное взаимодействие, в системе выделен компонент CommonDTO, в котором описаны все общие классы, необходимые для обмена данными.

Клиентские приложения взаимодействуют с моделью предметной области напрямую, вызывая ее объекты и подписываясь на ее события. По сути, в данной архитектуре модель является кэширующим прокси для внешних сервисов.

Таким образом, мы обеспечили развязку приложения от Lync (Skype for Business) и Outlook, и пришли к тому, что в рамках этой архитектуры мы потенциально можем перейти на другие сервисы. Например, использовать Telegram или обычный Skype в качестве мессенджера и Google Apps как почтовое приложение и календарь.

На основе этого решения, мы создали библиотеки-прослойки между Lync и нашим приложением и приступили к разработке непосредственно клиентской части.

Суть приложения заключается в расширенном управлении своими контактами Lync. Из главных возможностей можно выделить следующие:

• создание контактов (одиночных либо множественных);
• создание групп;
• поиск по Lync и адресной книге Outlook;
• просмотр собственного календаря.

Вид главного окна

При этом каждый контакт обладает расширенным списком возможностей:

• Открытие диалога с контактом (с возможностью отправки коротких сообщений);
• Звонок на Lync, на любой телефон из из списка телефонов контакта, видео-звонок;
• Просмотр календаря контакта;
• Оповещения об изменениях статуса контакта на «Онлайн» с запоминанием сообщения;
• Изменение действия по умолчания при нажатии на контакт (звонок, видео-звонок, либо открытие чата);
• Отправка e-mail с пустым либо предустановленным заголовком;
• Планирование собрания с контактом;
• Поиск всех писем от контакта;
• Просмотр карточки контакта (с отображением всего календаря пользователя).

Отображение контакта

Из дополнительных возможностей приложения можно выделить:

• Drag&Drop контактов между группами, из окна поиска;
• Масштабирование контактов всех групп разом, так и групп контактов по отдельности;
• Добавление ярлыков файлов, либо приложений на таскбар программы;
• Изменение собственного статуса в Skype for Business.

Публикация в Windows Store


Было принято решение, что приложение должно распространяться в двух видах – обычный инсталлятор (exe или msi, через сайт) и через магазин Microsoft в виде appx пакета.

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

Единственное, что мы добавили по сравнению с публикацией предыдущего приложения — это мультиязычность. Сейчас приложение доступно для пользователей на трех языках – русском, английском и немецком. Чтобы в магазине Microsoft увидеть список поддерживаемых приложением языков надо немного поправить AppxManifest.xml, в нашем случае он выглядит так:

<Resources>
    <Resource Language="de-DE" />
    <Resource Language="ru-RU" />
    <Resource Language="en-us" />
    <Resource uap:Scale="100" />
    <Resource uap:Scale="125" />
    <Resource uap:Scale="150" />
    <Resource uap:Scale="200" />
    <Resource uap:Scale="400" />
  </Resources>

Заключение


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

Вячеслав Нестеров
Поделиться с друзьями
-->

Комментарии (0)