COM-объект на C#. Работаем с Blogger из 1С:Предприятия

10 февраля 2013

Файлы для загрузки:

Тестовая конфигурацияПроект компоненты VS2010

Внешняя компонента + необходимые файлы

Каркасный проект VS2010 для создания компоненты

Использованный HTML-редактор для 1С:Предприятия

Предисловие

При возникновении задач, не специфичных для платформы 1С:Предприятие, может возникнуть необходимость в использовании внешних компонент. Так, например, практически во всех типовых конфигурациях платформой используется компонента печати штрихкодов или склонения ФИО. Сегодня в статье мы рассмотрим процесс создания внешней компоненты на платформе .NET Framework 4. Создаваемый COM-объект будет использоваться для работы с сервисом для ведения блогов от компании Google - "Blogger".

Планируемый функционал

С помощью COM-объекта нам необходимо из 1С:Предприятия читать список блогов пользователя. Для аутентификации будем использовать учетную запись Google. В каждом блоге компонента должна уметь создавать, изменять и удалять записи, а также производить публикацию и возвращать к черновику. Интерфейс создаваемой обработки будет выглядеть следующим образом:

Обработка для работы с сервисом "Blogger"

ля работы с сервисом будем использовать родной API Blogger'а. Работа с API из 1С:Предприятия реализована через внешнюю компоненту - COM-объект "BloggerCom", создание которой будет описано далее в статье. Пример использования создаваемой компоненты, а также ее исходные коды, Вы можете скачать по ссылкам в конце статьи.

Реализация COM-объекта

Как было сказано выше, для создания COM-объекта мы будем использовать платформу .NET Framework 4.x. Среда разработки  разумеется, Visual Studio 2010 Express. 

И так, приступим. 

Скелет

Первое, что нужно сделать - создать проект типа "Библиотека классов".

Создание проекта "Библиотека классов"

Далее добавим в список используемых пространств имен ссылку на "System.Runtime.InteropServices". Это необходимо для интерфейсов классов и COM-событий. Программный код описания приведен на следующем скриншоте.

Описание интерфейсов для класса "COMOCR" и COM-событий

Не будем вдаваться в подробности,  отмечу лишь важные моменты. Первое, на что стоит обратить внимание - это GUID'ы интерфейсов. Они все должны быть уникальными. Сгенерировать их можно любым доступным способом. Рекомендую использовать утилиту для разработчиков от Microsoft "guigen.exe", которую можно найти по следующему пути (на Вашей машине он может отличаться):

Утилита "guigen.exe""C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\guigen.exe"

Чтобы созданная DLL-библиотека могла использоваться другими приложениями необходимо включить регистрацию для COM-взаимодействия в свойствах проекта, а также настроить параметр "ComVisible" в файле "AssemblyInfo.cs".

С первым шагом все понятно. Заходим в свойства проека на закладку "Построение" и в разделе "Вывод" включаем опцию "Регистрировать для COM-взаимодействия".

Касательно настройки параметров в файле "AssemblyInfo.cs", то нужно установить в TRUE параметр в строке "[assembly: ComVisible(true)]". После в свойствах проекта на закладке "Подписывание" нужно создать файл ключа строгого имени и прописать его в файле "AssemblyInfo.cs".

Включаем регистрацию для COM-взаимодействия.

Включаем регистрацию для COM-взаимодействия

Создание файла-ключа строгого имени.

Создание файла-ключа строгого имени

Устанавливаем параметр "ComVisible" и присваиваем сборке файл-ключ строгого имени:

Устанавливаем параметр "ComVisible" и присваиваем сборке файл-ключ строгого имени

В принципе, COM-объект уже готов и после компиляции его можно подключать в других приложениях, вот только функций он никаких не сможет выполнить. Функциональные возможности необходимо написать в реализующем интерфейс классе "COMOCR".

Основные алгоритмы

Методы, описываемые в классе "COMOCR" используют API сервиса "Blogger". Рассматривать каждый метод не имеет смысла, поэтому обратим внимание только на некоторые моменты реализации.

Добавляем пространство имен для работы с API Blogger'аВо-первых, к проекту необходимо подключить библиотеку "Google.GData.Client", добавив ссылку и прописав в разделе используемых пространств имен. Скачать библиотеку можно по ссылке.

Примечание: в настоящий момент появилась новая версия API для работы с сервисом Blogger.

Теперь мы можем использовать методы для работы с сервисом. Рассмотрим работу двух важных методов для аутентификации учетной записи Google и получения списка блогов, связанных с учетной записей. Остальные методы, созданные в COM-объекте, Вы можете посмотреть самостоятельно, скачав исходные коды по ссылке в конце статьи.

Как было сказано выше, аутентификация на сервисе Blogger происходит с помощью Google-аккаунта. Ниже приведен программный код, где при помощи класса "Service" из подключенной библиотеки "Google.GData.Client" выполняется подключение, предварительно указываются идентификационные данные через класс "GDataCredentials"

Аутентификация на сервисе Blogger с помощью Google-аккаунта

Класс "Service" объявлен глобальным для класса "COMOCR", так как в дальнейшем он используется практически во всех методах. Соответственно, прежде чем использовать COM-объект, нужно выполнить инициализацию подключения методом "InitConnection".

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

Получаем список блогов пользователя

В программном коде метода "ListUserBlogs" выполняется запрос к сервису Blogger. Далее полученный результат обходится в цикле и создается двумерный массив строк. В первой колонке массива хранится ID блога, во второй его название. Созданный массив возвращается в приложение, вызывающее этот метод COM-объекта.

Список всех доступных для использования методов COM-объекта Вы можете видеть на следующем скриншоте.

Доступные для использования методы COM-объекта "BloggerCom"

Перейдем к примеру использования созданного COM-объекта в платформе 1С:Предприятие 8.x. Создадим обработку в тестовой конфигурации, работающую в управляемом приложении. Ее функционал был описан выше.

Для использования компоненты ее нужно зарегистрировать в системе. Для этого предназначена утилита "regasm.exe". Ее можно найти в папке:

"C:\Windows\Microsoft.NET\Framework\<Версия.NETFramework>"

Для регистрации компоненты в консоли нужно выполнить команду:

"regasm.exe <ПолныйПутьКФайлуКомпоненты>"

Регистрация COM-объекта в системе

 

Команду необходимо выполнить с привилегиями администратора!

Реализация на стороне платформы

Итак, теперь нам нужно инициализировать объект при работе с платформой и использовать необходимые методы для работы с Blogger. Программный код для инициализации COM-объекта на платформе показан на следующем скриншоте.Инициализация COM-объекта

Как мы видим, COM-объект после инициализации сохраняется в глобальной переменной на стороне клиента. Это сделано для того, чтобы при последующем использовании компоненты не возникала необходимость повторной инициализации. Для аутентификации на сервисе Blogger используем созданный ранее метод "InitConnection", выполняющий вход в аккаунт Google.

Примечание: обратите внимание, что при незаполненных данных логина и пароля, обработка работает с блогом "http://devel1capp.blogspot.ru/". Этот блог создал специально для тестов с отдельной учетной записью. Вы можете производить тесты на нем. Пароль к учетной записи хранится в общем модуле тестовой конфигурации.

В дальнейшем вызываются соответствующие методы COM-объекта и возвращаемые результаты обрабатываются на стороне платформы. Рассмотрим процедуру получения списка блогов текущего аккаунта.

Получение списка блогов пользователя

В начале производится инициализация COM-объекта (по необходимости) и подключение к аккаунту Google. После вызывается метод компоненты "ListUserBlogs", который возвращает массив "ComSafeArray". В первой колонке массива находится ID блога, во второй его название. Результат обрабатывается в цикле и записывается в таблицу значений формы.

Демонстрация

Теперь мы достаточно просто можем взаимодействовать с сервисом Blogger. На следующем видео демонстрируется работа созданной обработки для добавления сообщений в тестовый блог "http://devel1capp.blogspot.ru/".

Примечание: не стоит рассматривать данную обработку как завершенную разработку для работы с сервисом Blogger. Ее цель лишь демонстрация работы созданного в статье COM-объекта.

ВЫВОД

Использование COM-объектов в 1С:Предприятие 8.x позволяет расширить возможности прикладного решения практически без каких-либо ограничений, компенсирую ограниченную функциональность учетно-ориентированной платформы.
Блог "Devel 1C" в 1С:Предприятии
Минусы использования технологии COM от Microsoft только в том, что компонента должна быть зарегистрирована в системе Windows. С появлением платформы 8.3 работа стала возможной в Linux-системах. Интересно, как там обстоят дела с внешними компонентами.

comments powered by Disqus