Яимел честь работать с весьма квалифицированными ИТ-командами, в том числе специалистами из NBC Olimpics, которые обеспечивают трансляцию игр по телевидению и в Интернете во время Олимпийских игр каждые два года. Летом 2008 года в Пекине мы использовали SharePoint значительно интенсивней, чем раньше, и я хочу рассказать о четырех задачах, которые нам удалось решить благодаря этому замечательному продукту. Я объясню, как связать существующие приложения с SharePoint; как реплицировать документы в разные библиотеки документов; как создавать интеллектуальные приложения на базе форм и как разрабатывать многопользовательские приложения, которые обеспечивают усовершенствованные клиентские и веб-интерфейсы. Я хочу показать реальный мир SharePoint, научить вас тому, что мы узнали, и побудить использовать SharePoint для создания новых типов бизнес-решений.

Управление документами

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

Существует несколько вариантов сохранения PDF в библиотеке документов. Самый сложный, но эффективный метод — использовать код (или инструмент независимого производителя) для создания PDF на сервере SharePoint, затем разработать свой код, используя модели объектов SharePoint для управления метаданными документа (колонками) и библиотекой документов. Но есть и более легкие методы. Можно активировать электронную почту библиотеки документов так, что почтовые сообщения с прикрепленным документом могут быть посланы в библиотеку, а библиотека получит такое сообщение и автоматически сохранит документ и заодно, если это указано, сообщение. Это один из самых простых способов расширить существующее приложение: достаточно разрешить приложению отправить документ по электронной почте в библиотеку. Данный способ очень эффективно пополняет библиотеку документов, но вам требуется процесс или другой программный или ручной метод, чтобы задать структуру метаданных документа.

Также можно использовать Web Distributed Authoring and Versioning (WebDAV) для того, чтобы взаимодействовать с библиотеками документов SharePoint. Наше приложение сохраняет свои PDF в библиотеку документов, используя адрес URL библиотеки. WebDAV позволяет применять стандартные функции Windows для извлечения документов из библиотеки. Вы можете даже назначить букву диска библиотеке документов. Именно по этой причине мы тоже использовали WebDAV для простой реализации репликации библиотеки документов. Файлы PDF, созданные нашим приложением, должны были быть доступны на серверах как в Пекине, так и в Нью-Йорке. Мы нуждались в самой простой доставке документов из Пекина, где они были созданы, в Нью-Йорк, где они были бы доступны в библиотеке в режиме только для чтения. Мы предпочли использовать запуск задания по расписанию и задействовали Robocopy для отражения содержания пекинской библиотеки документов в Нью-Йорк.

Когда вы используете WebDAV для взаимодействия с библиотекой документов, вы теряете все богатые возможности метаданных. Так, например, мы не можем в Нью-Йорке отразить метаданные о документе в Пекине. Но репликация метаданных не была обязательным требованием, поэтому, концентрируясь на основных задачах, мы нашли решение, которое понравилось команде; его реализация заняла меньше часа. Если бы наши требования были выше, нам бы потребовалось приложение для репликации контента от сторонней компании.

Приложение службы технической поддержки

Шаблоны сайтов SharePoint из комплекта поставки в лучшем случае годятся в качестве примеров. Если вам требуется приложение SharePoint, которое поддерживает специфические задачи, функции или подразделение, можно обратиться к шаблонам Fabulous Forty, разработанным Microsoft. Шаблоны обеспечивают больше возможностей благодаря применению пользовательских списков, библиотек, рабочих процессов, типов контента и веб-частей. Fabulous Forty включает в себя шаблоны для дюжины сценариев, в том числе шаблон сайта службы поддержки, который мы модифицировали по просьбе клиентов, чтобы использовать его для службы поддержки NBC во время Олимпийских игр. Вы можете загрузить шаблоны с сайта www.microsoft.com/downloads/info.aspx? na=22&p=1 &SrcDisplayLang=en&SrcCategoryId=& SrcFamilyId=&u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d5807b5ef-57a1-47cb-8666-78c1363f127d%26DisplayLang%3den.

В Пекине нам требовалось приложение для службы поддержки, которое существует в течение примерно четырех недель и имеет критическое значение для всех операций. А ограниченный жизненный цикл приложения означает, что нам необходимо недорогое, простое в применении и управлении решение. Мы использовали шаблон службы технической поддержки Windows SharePoint Services (WSS) 2.0 Help Desk в Турине, а в Пекине задействовали версию WSS 3.0.

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

Поскольку эти шаблоны можно расширять, мы добавили список Calendar для составления расписания штата службы помощи таким образом, чтобы знать, кто на дежурстве и какие неполадки возникают. Мы пользовались списком Contacts для сохранения контактной информации и у нас была страница для доступа к этому списку с мобильных устройств. Таким образом, мы могли получать контактную информацию, используя карманный компьютер и находясь в любом месте сети.

Доставка контента

Те, кто смотрел трансляцию Олимпийских игр в Пекине, знают, какой огромный объем контента был доступен через Web и мобильные устройства. В Солт-Лейк-Сити и Турине, где NBC увеличила количество широковещательных и кабельных каналов, Олимпиада вызвала огромный интерес. Приятно вспомнить, что благодаря нашим усилиям разные виды спорта, страны и спортсмены были в центре всеобщего внимания в то время!

Чтобы направить весь контент в средства массовой информации, специальное приложение для распространения видео создавало комплекты видеоматериалов и рассылало их. Огромное количество метаданных сопровождает каждый комплект: метаданные варьируются в зависимости от способа вывода. Например, поле Title может быть длинным на Amazon.com, но должно быть коротким для службы распространения Multimedia Messaging Service (MMS).

Кроме того, редакторы должны иметь право создавать комплекты. Чтобы обеспечить доступ к этим метаданным для всех желающих, нам требовался удобный для пользователя интерфейс, который выводит только точные данные, производит классификацию данных, проверяет, заполнены ли требуемые поля, а затем переводит всю видеоинформацию в файл XML, необходимый для распространения. И снова SharePoint пришел на помощь.

Мы построили форму, используя технологию InfoPath 2007, которая позволяет вставлять бизнес-логику, так что, когда редактор работал с метаданными определенного комплекта, единственными видимыми полями были те, которые нужны для конкретного способа вывода. Форма также проверяет, соответствуют ли данные типу данных и требованиям контента приложения распространения видео.

Кроме того, нам не нужно было разворачивать сервер InfoPath на своих системах, мы использовали InfoPath Forms Services, компонент сервера Microsoft Office SharePoint Server (MOSS) 2007 Enterprise Edition, для заполнения форм в браузерах пользователей. Когда форма сохраняется, данные остаются в списке SharePoint и страница приложения использует рабочий процесс для публикации данных в формате XML, необходимом для приложения распространения видео. Это самое сложное для кодирования приложение из четырех решений на базе SharePoint, описанных мною в этой статье.

Я создавал свои представления списка SharePoint, добавлял преду­преждения и связанные отчеты Microsoft Excel к списку. Эти инструменты помогали редакторам, продюсерам и менеджерам выполнять их работу. Так что, если вы смотрели Игры с помощью какого-нибудь устройства, кроме телевизора, знайте, что это именно SharePoint помог нам донести до вас информацию.

Руководство транспортировкой

Говоря о приложениях, создание которых могло бы занять месяцы, давайте затронем тему приложения управления транспортировкой, которое мы развернули в течение нескольких дней, без запуска Visual Studio. Тысячам служащих NBC, подрядным организациям и поставщикам приходилось разъезжать по всему Пекину. Вы наверняка знаете, если смотрели Игры, что переместить команду из точки А в точку Б — целое дело. Группа транспортировки состояла из опытных сотрудников, которые должны были координировать сотни рейсов каждый день на протяжении более чем трех месяцев. Мы должны были найти способ, позволяющий облегчить управление этим процессом.

Приложение управления транспортировкой должно было разрешать любому члену команды, ответственной за этот процесс, доступ к информации из заявки на перевозку, сведениям о назначении средства транспорта и водителя («трансфера»), а также проводить мониторинг и формировать отчетность о деятельности группы транспортировки. В ходе предыдущих Игр подобные вопросы обсуждались по телефону. На этот раз мы хотели дать пользователям возможность рассматривать заявки онлайн. Поскольку SharePoint использует напоминания и рабочие процессы для уведомления пользователей об изменении данных, я хотел, чтобы приложение также уведомляло пользователей, когда их просьба о рейсе удовлетворена, чтобы человек знал, какой транспорт искать, когда рейс отправляется и кто еще следует этим рейсом.

Основную трудность при создании приложения составляли таблицы данных. Для должной поддержки приложения нам нужны были таблицы с информацией о транспорте, заявке на перевозку и местонахождение. Команде транспортировки нужно было предоставить возможность без труда получать такую информацию, как адреса, карты и даже фотографии зданий. SharePoint не предназначен для создания или поддержки внутренних баз данных. Однако, имея Microsoft Access в качестве клиента, можно создать приложение, которое посредством запросов обеспечивает возможность устанавливать соединения между данными в различных списках и осуществлять расширенное взаимодействие с этими данными на базе форм. Традиционные приложения Access хранят данные в таблицах внутри базы данных (.mdb). Можно добиться большего эффекта, помещая данные в SQL Server или, в нашем случае, на сервер SharePoint и используя Access только как внешнее приложение.

Существует несколько способов создания приложений Access, которые являются внешними для списков SharePoint. Можно создать базу данных Access и задействовать мастер перемещения в Access 2007 для перемещения таблиц на сайт SharePoint в виде списков. Или можно создать списки в SharePoint и поместить их в приложение базы данных Access в качестве присоединенных таблиц. Я выбрал второй метод.

Access позволяет создавать запросы и расширенные формы; любая дополнительная функция, которая требуется, становится задачей программирования в Access в большей степени, чем задача программирования для SharePoint. Например, мне показалось полезным дать команде транспортировки возможность определять, какое из 200 транспортных средств доступно в том или ином месте в определенное время для выполнения запроса на перевозку. Это потребовало ряда сложных запросов на SQL, которые я построил в Access с помощью своего любимого поисковика через Интернет. Кроме того, мне хотелось, чтобы поля автоматически пополнялись данными для того, чтобы сократить ввод данных пользователями и менеджерами. Я выполнил эту задачу при помощи простого кода на Visual Basic for Applications (VBA) в формах Access. Меньше чем через три дня у меня было многофункциональное приложение, которое поддерживало все задачи по управлению перевозками.

Но я решил снабдить свое приложение самой лучшей функциональностью. Сначала я подготовил веб-форму для пользователей с запросом о перевозке. Это было легко благодаря SharePoint Designer. Я создал новую веб-форму, перетащил в форму свой список SharePoint, чтобы создать соединение с источником данных, затем модифицировал шаблон Insert, который является формой, визуализируемой сервером, когда пользователь создает новую запись. Все это я проделал в течение часа.

Следующим шагом было создание напоминаний для пользователей. Я подготовил представление списка запросов на перевозку и назвал его My Rides; список фильтруется по полю Created By со значением равным [Me] — это специальный шаблон SharePoint, который соответствует текущему пользователю. Таким образом, когда я обратился к списку, я видел только мои рейсы, а когда другой пользователь обращался к списку, он тоже видел только нужные ему рейсы.

Одна из менее известных функций напоминаний SharePoint работает так: генерируя пользовательское представление, вы можете создавать напоминания, основанные на изменениях в данных, которые появляются в этом представлении. Таким образом, представление может стать фильтром для ваших напоминаний. Эта функция известна недостаточно хорошо, потому что возможность создания основанных на представлении напоминаний появляется только после того, как вы создадите пользовательское представление, поэтому вы можете просто не заметить ее. После того как я создал представление My Rides, я назначил его всем пользователям. Теперь, если возникают какие-то изменения в рейсах пользователей, они получают предупреждение с соответствующей информацией. Мы тестировали уведомления, основанные на предупреждениях, в течение нескольких недель. Если бы соответствия нашим задачам не было, я бы использовал SharePoint Designer для создания рабочего процесса, чтобы получать то же самое уведомление электронной почтой.

Из процесса создания этого приложения я извлек несколько важных уроков. Поскольку SharePoint не в полной мере поддерживает реляционные данные, мне потребовалось некоторые данные денормализовать. Таким образом, у меня была некоторая избыточность информации в таблицах. Например, когда пользовательский запрос на перевозку был выполнен, номер транспортного средства вносился в таблицу рейса и в таблицу запроса о рейсе. Код в форме Access вводил данные автоматически, но они были избыточны. Это требовалось для того, чтобы получить правильные сведения и информацию, кода пользователь посещает сайт онлайн или получает уведомление по электронной почте. У SharePoint есть поля поиска, но работать с ними непросто (например, бывают ситуации, когда выполнение поиска, сортировки и запросов, основанных на содержании этих полей, становится невозможным). Итак, я значительно сократил время разработки, вводя информацию в два поля — поле поиска, которое позволяет переходить к соответствующим элементам по ссылке, когда пользователь подключается к приложению онлайн, и нормальное текстовое поле, которым легче управлять программно и создавать представления и запросы.

Использование Access в качестве внешнего интерфейса для приложения SharePoint не является единственно верным решением для каждого случая, но, поскольку у нас было ограниченное число менеджеров транспортировки, которым требовалось взаимодействовать с данными, мы могли установить Access на их системах. Все остальные пользователи должны были взаимодействовать при помощи форм запросов на перевозку, списков рейсов онлайн и через уведомления по электронной почте. Можно было создать часть решения, используя SharePoint Designer и его компонент Data View Web, либо запустить Visual Studio. Но мы справились с задачей при помощи более простого решения, в рамках которого немногочисленное кодирование связано с автоматизацией процесса и снижением ввода данных.

Дэн Холм (danh@intelliem.com) — директор консалтинговой службы Intelliem, которая организовывает консультации для предприятий, внедряющих SharePoint, Office, Windows и Active Directory