Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

в 7:26, , рубрики: Cisco, RFID, sharepoint, windows, windows apps, метки: , , ,

Здравствуй, читатель. Я работаю в компании Caterpillar в одном из ее австралийских офисов. По долгу службы накопилось несколько, я бы сказал, интересных проектов. Вообще, Австралия, как вы знаете, находится очень далеко от всего, и хотя интернет стер границы между континентами, новые штуки доходят до нас с опозданием в полгода. Это не касается софта, который появляется раньше для загрузки (сами понимаете, мы в часовом поясе сразу после Новой Зеландии), но вот фильмы выходят позже, чем в России, при том что в России их еще и перевести надо. Так и с технологиями, не готовы люди здесь к новому. Даже так — оно им не надо.

В общем, начну с того, что компания (или правильно называть это группой компанией) состоит из примерно 90 филиалов и 100к работников, разбросанных по странам Юго-Восточной Азии и Океании. Вся группа очень Microsoft-ориентированна, начиная от разработки до основной ERP системы, так что говорить мы сегодня будет только про продукты от Microsoft, которые мы использовали, и немного про Cisco Unified Communication Manager.

Задача

Необходимо разработать Информационный Киоск для ресепшенов во всех филиалах (около 90). Необходимо поддерживать несколько языков и сама платформа должна интегрироваться во все, что только можно. Как я уже писал выше, компания — Microsoft-ориентированная и использует весь спектр продуктов, включая Office 365 (Exchange, SharePoint, Lync). Самое интересное, что каким-то образом так сложилось исторически, что компания использует Cisco как communication платформу, но при этом по регламенту митинги – на Lync. То есть вы не можете с Lync звонить на стационарный Cisco телефон. Киоск должен интегрироваться в Cisco Unified Communication Platform (чтобы пользователи могли звонить прямо из киоска).

Так же необходима возможность использовать RFID карту для авторизации (каждый служащий компании имеет RFID карту). Зачем это нужно для информационного Киоска? Скажем так, я не знаком, практикуется ли такое на предприятиях в России, но здесь при каждом перемещении между зданиями по регламенту необходимо заполнять некую книгу при входе в здание, чтобы служба безопасности знала, где и кто находится, если что-то случилось. В добавок в Австралии очень распространено работать по контракту. Компания нанимает на короткий срок узконаправленных специалистов, чтобы выполнить определенную работу. А теперь представьте 150 контрактников, разбросанных по десяткам ангаров. Повернул не туда, зашел не в ту дверь – и колесом придавило. Поэтому основная задача Киоска регистрировать людей, помогать им найти нужных сотрудников компании и дать возможность службе безопасности иметь четкое представление – где, кто и когда. Итак, подведем итог.

Коиск должен уметь:

  • Подерживать языки в зависимости от локации;
  • Поддерживать возможность поиска сотрудников;
  • Звонить;
  • Поддерживать возможность использования RFID карт для быстрой регистрации.

Решение

Забыл упомянуть, необходимо было сделать что-то новое. Компания проходит через так называемую модернизацию и руководители жаждут увидеть что-то инновационное, что-то отличное от зеленого экрана DBS.
В общем, поразмыслив немного, мы решили попробовать написать Киоск для Windows 8. Когда мы только задумывали этот проект, восьмерка была в Preview и было немного страшновато, но сроки не жали и проект был в разряде инновационных – это когда у тебя пара разработчиков, которые могут работать по 10 часов в неделю и необходимо показывать раз в месяц результат.

Итак, диаграмма используемых технологий и продуктов:

Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

Сразу покажу, как выглядит приложение, а потом по порядку по каждому пункту. Заранее прошу прощение за качество картинок.

Основной экран:

Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

Окно поиска:

Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

Экран регистрации:

Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

Использование RFID

Этот зверь до сих пор снится мне в страшных снах, при всей его, казалось бы, простоте в разработке. Кто не игрался с RFID рамкой на Arduino? Просто ведь, да?

Когда оболочка приложения была готова, мы приступили к интеграции с RFID. Процесс очень простой: сотрудник компании прислоняет карту к ридеру и приложение просит ввести имя сотрудника, c кем у вас встреча. По завершению встречи сканируете карту и приложение желает вам хорошего дня. Однако, проблемы начались с оборудованием. Сначала оказалось, что мы используем мега защищенные ридеры стоимостью почти 600 баксов каждый. Кто работал с RFID замками, знает, что ридер — это только половина беды. Он подключается к контроллеру, а контроллер к PC, посредством Serial Port. Выяснилось что Metro приложения не поддерживают ничего из System.IO. Наш программист стал придумывать разные способы, как сделать так, чтобы Metro приложение получило доступ к злосчастному Serial порту. Подмечу, что мы работали с Windows 8 и тогда еще не знали о Broked Component, который появился в Windows 8.1.

Тогда в восьмерке даже Device API был скудным. В общем, для восьмерки мы ничего не придумали, кроме как запускать win32 клиент, который общался с Metro приложением через файловую систему. Это, конечно, никуда не годилось, но тогда уже пошел слух, что в 8.1 добавят поддержку для Bluetooth и мы стали надеяться… Ребята из Microsoft не подвели – новый device api был лег и прост в использовании. Единственное, что мне не нравилось, это необходимость сначала выполнить сопряжение устройства перед использованием. К тому же, device api устроен таким образом, что Windows спросит вас, можно использовать это устройство или нет, что добавляло некий дискомфорт.

Вторая проблема заключалась в отсутствии Bluetooth RFID устройств на маркете. Нельзя было просто взять и купить RFID Bluetooth ридер, который бы работал c нашими картами. Пришлось обращаться к местным компаниям и к нашему счастью одна компания согласилась помочь. В итоге через месяц у меня на столе лежал новый ридер, который питался от USB, но передавал данные в Metro app через Bluetooth. И все бы хорошо, но сейчас по прошествии 4 месяцев работы киосков наблюдаем, что иногда Windows просто обрубает соединение. Это происходит примерно после 4-5 дней работы. Писал на MSDN, спрашивал в тех поддержке, пока только посоветовали рестартить соединение каждые 8 часов. Мы было уже решили чинить, как вышла новая фича в Update 1, Broked Windows Runtime Component. В двух словах, эта штука позволяет вашему Metro приложению разговаривать с обычным Windows приложением. Это как раз был наш случай. Мы опустили всю логику работы с RFID в Broked компонент. Могу сказать, что пока не было проблем, посмотрим, как будет себя вести дальше.

Cisco UCM

Скажу сразу, что решение, которое мы применили, не самое лучшее, и я буду очень благодарен, если кто нибудь поделиться хорошей альтернативой. Cisco очень крутая компания, но мне почему-то кажется, что их реализация интеграции не очень практична и, как бы это сказать, отстает от общих тенденций в развитии веб. Все эти ActiveX плагины – как то это не по Ciscoвски. Однако Cisco Unified Communication Manager достаточно милая платформа, единственное, у Cisco не было ничего подходящего из инструментария, чтобы мы могли легко использовать в нашем приложении. Я не буду углубляться в подробности, кому интересно, напишите – расскажу, но мы выбрали в итоге старую библиотеку от Office — Office.Interop.UccApi.dll и написали поверх него маленький wpf клиент, который запускает локальный веб сервер, а Киоск просто вызывает методы – позвонить или положить трубку. Если кто-то пробовал интегрировать SIP протокол в Metro приложение, дайте знать, сработаемся.

SharePoint

Как видно на самой первой картинке, и как я говорил в самом начале, мы выбрали SharePoint как нашу базу данных и источник всей информации о сотрудниках. В начале разработки мы наткнулись на очень интересный пример от Microsoft (Contoso Learning Companion), который в полной мере отражал наш кейс.

Как мы внедряли инновации в крупной компании на примере Киосков на Windows 8

Каждая локация (sub site) имеет набор листов с конфигурацией. Нам необходима возможность управления настройками аккаунтов, например, для Cisco непосредственно с портала. Так же, если вы присмотритесь ко второй картинке приложения, слева под поиском расположена зона быстрого доступа. Например, пользователь, попадая в филиал, не знает кто отвечает за финансы или HR. Нажимая на иконку, приложение покажет только людей из этого филиала, кто ответственен за HR. Каждая локация также содержит лист всех посещений и вся информация агрегируется и доступна на самом верхнем уровне (Reception).

SharePoint так же хорош, когда дело доходит до поиска, особенно в новом SharePoint 2013. Весь поиск по сотрудникам — два десятка строк на js. Работает все быстро и качественно. Вообще, интеграция с SharePoint была единственной задачей, с которой у нас вообще не возникало никаких проблем. Оболочка была написана за пару дней и работает очень стабильно.

Deployment

Мы заведомо понимали, что приложение не пройдет через Windows Store, потому как мы используем слишком много компонентов win32, хотя если убрать все экстра фичи, получился бы неплохой продукт, что думаете? Так как у нас есть возможность использовать SCCM, мы просто закатали все в image (да, кстати, мы используем Windows 8.1 Enterprise Embeded).

Заключение

На данный момент приложение развернуто в 23 филиалах. Посещаемость в день — около 250 человек. Мы разработали небольшое html5-приложение для безопасников, чтобы была возможность мониторить людей, если они не за компьютером. Так же доступен основной портал с BI составляющей для анализа данных. Мы заметили, что больше всего людей приходят по вторникам и пятницам.

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

Автор: nicksav

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js