Перейти к основному содержимому
Версия: 4.0

Интеграция Mobile SMARTS со сторонними системами через коннекторы

Внешние соединения (коннекторы) предназначены для вызова функций внешних систем по запросу с ТСД, с их помощью также может выполняться обработка событий сервера. При помощи коннекторов можно решить целый ряд весьма полезных задач, таких как:

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

Для каждой учетной системы коннектор разрабатывается отдельно и особенности его работы зависят от реализации.

Вызов внешних систем с терминала сбора данных (ТСД) происходит не напрямую, а через посредника (сервера Mobile SMARTS).

Данные для отправки во внешнюю систему формируются в клиенте Mobile SMARTS на ТСД, а затем передаются серверу Mobile SMARTS с указанием, какой коннектор использовать и какую задачу решать.

В случае обработки событий сервера, данные для указанного обработчика события формирует сервер.

Принцип работы коннекторов​

Обращение к внешней системе с передачей и получением каких-то полезных данных происходит следующим образом:

интеграция
  • В клиенте Mobile SMARTS на ТСД действие «Вызов метода внешней системы» формирует аргументы для вызова внешней системы, упаковывает их в объект Cleverence.Warehouse.InvokeArgs и отправляет на сервер Mobile SMARTS вместе с именем коннектора, именем класса и именем метода;
  • Сервер Mobile SMARTS ищет коннектор с требуемым именем в списке зарегистрированных и передает ему аргументы вместе с именем класса и метода для вызова;
  • Коннектор осуществляет вызов указанного метода внешней системы и получает результат;
  • Результат возвращается серверу Mobile SMARTS, упаковывается в объект Cleverence.Warehouse.InvokeResult и отправляется на ТСД;
  • В клиенте Mobile SMARTS на ТСД действие «Вызов метода внешней системы» кладет полученный результат в текущую сессию под именем, которое задано у него в свойстве «Переменная сессии для результата»;
  • Теперь любое другое действие в программе на ТСД может получить доступ к результату вызова для вывода его на экран или выполнения расчетов.

Список стандартных коннекторов​

В состав дистрибутива Mobile SMARTS входят следующие стандартные коннекторы для сервера Mobile SMARTS:

НазваниеНеобходимые файлыОписание
1С Предприятие версия 7.7Для панели управления:

не требуется

Для сервера:

Cleverence.Connectivity.OneC.dll
Позволяет производить вызов функции из глобального модуля конфигурации 1С Предприятие 7.7 по имени и возвращать результат её выполнения.
1С Предприятие версия 8Для панели управления:

не требуется

Для сервера:

Cleverence.Connectivity.OneC.dll
Позволяет производить вызов функции из модуля указанной обработки 1С (из состава конфигурации 1С или внешней) по имени и возвращать результат её выполнения. Обеспечивает работу как через внешнее COM-соединение 1С, так и через Web-сервис 1С. Поддерживаются платформы 1С 8.1, 8.2, 8.3.
АРМ ЕГАИС — Серверный коннекторДля панели управления:

Cleverence.Connectivity.ArmEgais.Panel.dll

Для сервера:

Cleverence.Connectivity.ArmEgais.dll
Коннектор для обмена документами с системой АРМ ЕГАИС. Предназначен для обработки событий сервера Mobile SMARTS (получение документов он-лайн, отправка документов).
Axapta5Connector (Axapta 2009)Для панели управления:

не требуется

Для сервера:

Cleverence.Connectivity.Axapta5.dll
Позволяет вызывать статические методы классов Axapta и возвращать результат выполнения. Работа выполняется через .NET Axapta Business Connector
Microsoft SQL ServerДля панели управления:

не требуется

Для сервера:

Cleverence.Connectivity.SqlServer.dll
Позволяет выполнять SQL-запросы к базе данных, а также вызывать хранимые процедуры, возвращает результаты запросов, хранимых процедур.

Регистрация и запуск коннекторов​

Для того, чтобы начать использовать коннектор, необходимо сначала его зарегистрировать (добавить), а затем запустить. Эти операции выполняются в панели управления Mobile SMARTS и находятся внутри узла «Внешние соединения и расширения».

интеграция

Регистрация коннектора​

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

интеграция

Настройка параметров коннектора выполняется через боковую панель свойств:

интеграция

После добавления коннектора и настройки параметров нужно сохранить конфигурацию.

Если узел коннектора в дереве конфигурации отображается в виде серой стрелки, то это означает, что вызовы через коннектор запрещены (отключены):

интеграция

Для того, чтобы разрешить вызовы, нажмите правой кнопкой мыши на узле дерева, выберите в контекстном меню «Разрешить». Модуль должен перейти в разрешенное состояние (зеленая стрелка):

интеграция

Для работы модуля под управлением сервера Mobile SMARTS и настройки параметров модуля через панель управления используются две версии библиотеки (файлы dll). Первая dll, предназначенная для сервера, размещается в <Папка базы Mobile SMARTS>\Server\DataService\bin\. Вторая dll, для панели управления — в <Папка базы Mobile SMARTS>\Control panel\Addins. Некоторые стандартные модули, входящие в дистрибутив платформы Mobile SMARTS, не требуют дополнительных файлов dll.

Если библиотека модуля для панели управления загружена, а для сервера библиотека отсутствует (или не была загружена в процесс сервера Mobile SMARTS), то при сохранении конфигурации Mobile SMARTS после добавления модуля в панели управления данные о добавленном модуле не запишутся в файлы конфигурации. При попытке разрешить вызовы через коннектор будет происходить ошибка.

интеграция

Если загрузить конфигурацию с сервера (используя кнопку «Обновить» в панели управления), отображаются данные о том, что добавленного модуля нет:

интеграция

Для устранения ошибки необходимо переместить серверную версию dll модуля в <Папка базы Mobile SMARTS>\Server\DataService\bin\, перезапустить сервер базы данных Mobile SMARTS и заново добавить модуль через панель управления.

Запуск коннектора​

После регистрации коннектора следует проверить, выполняется ли подключение. Для этого следует разрешить доступ к коннектору («Разрешить»), и затем запустить его («Пуск»).

интеграция интеграция

В ряде случаев случаев попытка запуска завершится неудачей, т.к. у сервера Mobile SMARTS не будет хватать пользовательских прав на подключение к внешней системе. Основные причины таких проблем и способы их решения описаны в статье «Диагностика и исправление проблем» на сайте «Клеверенс».

Если в «Службах компонентов» есть установленные вручную COM+ приложения, это может помешать запуску COM-коннектора. В таком случае потребуется удалить COM+ приложения, после чего заново зарегистрировать и запустить COM-коннектор.

интеграция

Описание свойств коннекторов​

Коннектор «1С: Предприятие версии 8»

СвойствоЗаполняется автоматическиПринимаемые значенияРасшифровка
Максимальное количество одновременных вызовов5Произвольное числоМаксимальное количество одновременных асинхронных вызовов
0 — нет ограничений
При тайм-аутеВызывать исключениеВызывать исключение/ ПереподключатьсяПоведение при истечении тайм-аута
Вызывать исключение— выполнение вызова останавливается и возвращается ошибка
Переподключаться — отключить от системы и повторить вызов
Тайм-аут (в мс)90000Произвольное числоПри истечении указанного времени вызов будет прерван и выполнится действие, указанное в пункте «При тайм-ауте»
0 — тайм-аут не используется, вызов будет выполняться до тех пор, пока вызываемая система не вернет результат или ошибку
Формат обмена даннымиAutoAuto/ Json/ XmlВ каком формате сериализованные данные передаются/возвращаются из «1С:Предприятие» в коннектор.
Xml содержит сериализованные объекты Mobile SMARTS
При работе через Web-коннектор используется Json, при работе через COM-соединение может использоваться как Xml, так и Json.
Auto — формат определяется автоматически
Автоматический сброс зависших соединенийНетДа/ НетТолько для COM-соединения. Если включено, происходит попытка завершения сеансов COM-соединения, которые долгое время неактивны (используется подключения к агенту сервера «1С:Предприятия»)
Версия 1С8.38.1/ 8.2/ 8.3Только для COM-соединения. Версия COM-объекта для подключения к базе «1С:Предприятие»
Вести лог статистики вызововНетДа/ НетЕсли включено, данные о вызовах будут записываться в базу sqlite по пути <папка базы Mobile SMARTS>\Logs\StatCon<Дата>.sqlite
Время жизни неиспользуемого соединения30Произвольное числоТолько для COM-соединения. Время в секундах, в течение которого неиспользуемое COM-соединение будет оставаться в пуле соединений. Если указать <= 0, по умолчанию используется 60.
Домен-Произвольное имяИспользуется только для Web-подключения при Windows-авторизации. Имя домена.
Имя администратора кластера-Произвольное имяТолько для COM-соединения. Необходимо для подключения к агенту сервера «1С:Предприятия», если включен автоматический сброс зависших соединений.
Количество постоянных соединенийПроизвольное числоТолько для COM-соединения. Максимальное количество постоянных соединений в пуле.
Количество резервных соединений0Произвольное числоТолько для COM-соединения. Количество резервных соединений в пуле.
Максимальное число клиентов, ожидающее вызов 1С48Произвольное числоТолько для COM-соединения. Максимальное число клиентов, ожидающее вызов 1С. Если значение превышено, вызов завершается с ошибкой.
Обработка драйвера+Произвольная строкаТолько для COM-соединения. Имя обработки в конфигурации 1С или путь к внешней обработке. Функции вызываются из модуля обработки, и должны быть объявлены как экспортные.
Пароль-Произвольная строкаПароль пользователя 1С
Пароль администратора кластера-Произвольная строкаТолько для COM-соединения. Необходимо для подключения к агенту сервера «1С:Предприятия», если включен автоматический сброс зависших соединений.
Пользователь 1С-Произвольная строкаИмя пользователя 1С
Тип авторизацииDefaultDefault/ WinТолько для Web-подключения
Default— базовая http-авторизация
Win— используется Windows-авторизация
Тип подключенияМенеджер COM-соединенийМенеджер COM-соединений/ Automation сервер/ Менеджер на каждое COM-соединение/ Web-connectorМенеджер на каждое COM-соединение — для подключения используется COM-объект v8x.ComConnector
Automation сервер— для подключения используется COM-объект v8x.Application,
Web-connector— используется http-подключение к базе 1С, опубликованной на web-сервере

Коннектор «1С: Предприятие версии 7.7»

СвойствоЗаполняется автоматическиПринимаемые значенияРасшифровка
Максимальное количество одновременных вызовов0Произвольное числоМаксимальное количество одновременных асинхронных вызовов
0 — нет ограничений
При тайм-аутеВызывать исключениеВызывать исключение/ ПереподключатьсяПоведение при истечении тайм-аута
Вызывать исключение— выполнение вызова останавливается и возвращается ошибка
Переподключаться — отключить от системы и повторить вызов
Тайм-аут0Произвольное числоПри истечении указанного времени вызов будет прерван и выполнится действие, указанное в пункте «При тайм-ауте»
0 — тайм-аут не используется, вызов будет выполняться до тех пор, пока вызываемая система не вернет результат или ошибку
Объект соединенияV77.ApplicationV77.Application/ V1CEnterprise.Application/ V77S_Application/V77M_Application/ V77L_ApplicationCOM-объект 1С, используемый для подключения к базе 1С:
V1CEnterprise.Application — версия независимый ключ
V77.Application — версия зависимый ключ
V77S.Application — версия зависимый ключ, SQL версия
V77L.Application — версия зависимый ключ, локальная версия
V77M.Application — версия зависимый ключ, сетевая версия
Пароль-Произвольная строкаПароль пользователя 1С
Пользователь-Произвольная строкаИмя пользователя 1С
Путь-Произвольная строкаПуть к папке с базой данных 1С

Axapta5Connector

СвойствоЗаполняется автоматическиПринимаемые значенияРасшифровка
Company-Произвольная строкаНаименование компании (параметр подключения через Axapta Business Connector)
ConfigurationName-Произвольная строкаНаименование конфигурации (параметр подключения через Axapta Business Connector)
Domain-Произвольная строкаДомен, в котором зарегистрирован пользователь
(параметр подключения через Axapta Business Connector)
Language-Произвольная строкаЯзык
(параметр подключения через Axapta Business Connector)
ObjectServer-Произвольная строкаСервер Axapta
(параметр подключения через Axapta Business Connector)
UserName-Произвольная строкаИмя пользователя
(параметр подключения через Axapta Business Connector)
Пароль-Произвольная строкаСтрока
(параметр подключения через Axapta Business Connector)
При тайм-аутеВызывать исключениеВызывать исключение/ ПереподключатьсяПоведение при истечении тайм-аута
Вызывать исключение — выполнение вызова останавливается и возвращается ошибка
Переподключаться— отключить от системы и повторить вызов
Тайм-аут0Произвольное число (в мс)При истечении указанного времени вызов будет прерван и выполнится действие, указанное в пункте «При тайм-ауте»
0 — тайм-аут не используется.

Microsoft SQL Server

СвойствоЗаполняется автоматическиПринимаемые значенияРасшифровка
DataSource-Произвольная строкаИмя или сетевой адрес SQL-сервера
InitialCatalog-Произвольная строкаИмя базы данных на SQL-сервере
IntegratedSecurityTrueTrue/ FalseTrue— для подключения используется текущая учетная запись Windows
False — используется заданные имя пользователя базы SQL и пароль пользователя
UserID-Произвольная строкаИдентификатор пользователя базы SQL
Пароль-Произвольная строкаПароль пользователя базы SQL
При тайм-ауте-Вызывать исключение/ ПереподключатьсяПоведение при истечении тайм-аута.
Вызывать исключение— выполнение вызова останавливается и возвращается ошибка
Переподключаться — отключить от системы и повторить вызов
Тайм-аут-Произвольное число (в мс)При истечении указанного времени вызов будет прерван и выполнится действие, указанное в пункте «При тайм-ауте»

Отладка вызовов к внешней системе​

Когда оператор терминала сбора данных сканирует штрихкод для запроса остатков товара, со стороны внешней системы (учетной системы, товарной базы) кто-то должен обработать этот запрос и вернуть результат. В случае 1С это будет метод глобального контекста или контекста внешнего соединения, для Axapta это будет публичный статический метод в каком-то классе, а в случае SQL базы данных это может быть хранимая процедура (хотя можно выполнить и простой запрос).

Для отладки работы кода внешней системы, который должен будет вызываться с ТСД, в панели управления Mobile SMARTS предусмотрено специальное окно, вызываемое из контекстного меню коннектора:

интеграция интеграция

В этом окне можно задать имя вызываемого метода внешней системы, указать передаваемые параметры, вызвать внешнюю систему при помощи коннектора и посмотреть на результат.

Как видно, коннектору передаются именованные параметры. Метод внешней системы, который будет принимать эти параметры, может получить их в двух вариантах, в зависимости от реализации коннектора. Первый вариант – будет учитываться только порядок передачи параметров, а имена не имеют значения и отбрасываются. Второй вариант – метод принимает единственный строковой аргумент, в котором передается XML с сериализованным объектом Cleverence.Warehosue.InvokeArgs; это выглядит примерно как <?xml version="1.0" encoding="utf-8" ?><InvokeArgs xmlns:clr=" [http://schemas...»](http://schemas...»).

Отладка процедур и функций базы 1С драйвера​

Разберем, как подключить отладчик 1С к конфигурации, с которой взаимодействует Mobile SMARTS, чтобы отладить выполнение какой-нибудь функции, которая вызывается с терминала.

Рассмотрим подключение на основе операции «Просмотр товаров из 1С» из стандартной поставки Wi-Fi ПРОФ драйвера. Разберем, что вызывается и отладим процедуру, которая вызывается.

Для начала найдем соответствующий алгоритм в панели управления и посмотрим, как называется метод, вызываемый из 1С.

интеграция

Для данной операции метод, который вызывается из 1С называется «ПолучитьНоменклатуруПоГруппам».

Затем посмотрим какая обработка подключена. Для этого нужно посмотреть «Внешние соединения».

интеграция

В данном примере подключена обработка «ВнешниеВызовыУТ11».

Теперь найдем данную процедуру в модуле обработки.

интеграция

Открываем модуль объекта, данной обработки, ищем нашу функцию и нажимаем кнопку «Перейти».

интеграция интеграция

Клиент-файловый вариант работы

В клиент-файловом варианте необходимо проверить подключена ли отладка. Для этого запускаем режим «Предприятие», заходим в Сервис -> Параметры -> вкладка Системные. Смотрим, проставлен ли флаг «Устанавливать режим разрешения отладки при запуске». Если не проставлено необходимо проставить и сохранить.

интеграция

В случае, если флаг «Устанавливать режим разрешения отладки при запуске» не сохраняется, необходимо скопировать файл comcntrcfg.xml (предварительно скачать и извлечь из архива comcntrcfg.zip) в папки «c:\Program Files\1cv82\8.х.хх.ххх\bin\conf\», «c:\Program Files\1cv82\conf\».

В файле прописано, что отладка разрешена и по умолчанию включается на локальной машине.

интеграция

Дальше поставим «точку останова».

интеграция

Запустим вызов процедуры, выбрав операцию.

интеграцияинтеграция

Создалось подключение сервера Mobile SMARTS к базе драйвера и теперь необходимо подключиться к той сессии, которая создалась. Выбираем Отладка -> Подключение.

интеграция

Производим подключение.

интеграцияинтеграция

Вызовем нашу процедуру еще раз.

интеграция

Система остановилась, на нашей «точке останова».

интеграция

Далее стандартными методами 1С (зайти в процедуру, шагнуть) можно отладить соответствующую процедуру 1С.

Клиент-серверный вариант работы

Для клиент-серверного варианта работы отладку нужно производить на том же компьютере, где запущен «Агент сервера 1С:Предприятия».

Для клиент-серверного варианта необходимо остановить «Агент сервера 1С:Предприятия».

интеграция

В реестре (Компьютер\HKEY_LOCAL_MACHINE\SISTEM\CurrentControlSet\services\1C:Enterprise 8.2 Server Agent) найти параметр ImagePath и написать ключик -debug.

интеграция

Запускаем службу.

интеграция

Запускаем конфигуратор базы драйвера.

И аналогично, как в клиент-файловом варианте, ставим «точку останова», вызываем метод 1С из Мobile SMARTS, отлаживаем код в 1С.

В 1С 8.3 появился параметр «Номер порта для тонкого и толстого клиента».

интеграция

Для отладки это значение должно находится в пределах портов установленных в параметрах:

интеграция интеграция

Разработка собственного коннектора к внешней системе​

Коннекторы к внешним системам в платформе Mobile SMARTS позволяют получать данные из внешней системы по запросу с ТСД, а также выполнять обработку событий сервера Mobile SMARTS с помощью вызова функций внешней системы.

В состав дистрибутива Mobile SMARTS входит ряд коннекторов к наиболее распространенным учетным системам и СУБД. Если Вы используете учетную систему или СУБД, для которой не имеется стандартного коннектора, есть возможность разработать свой собственный коннектор.

Требования к разработке​

Разработка коннектора выполняется в среде Microsoft Visual Studio на языке C# (можно использовать и другие языки, поддерживаемые платформой .Net Framework). Предполагается, что Вы знакомы с разработкой в среде Microsoft Visual Studio.

Мы рекомендуем использовать Microsoft Visual Studio 2019, скачать бесплатную версию Microsoft Visual Studio Community 2019 можно с сайта Microsoft.

Разработка будет выполняться под .Net Framework 4.6.1, скачать дистрибутив можно здесь. Если установлена более новая версия .Net Framework 4 (4.7 и др.), устанавливать отдельно версию 4.6.1 не требуется.

Последний релиз платформы Mobile SMARTS (MobileSMARTS.msi) можно скачать на странице.

Основы​

Подключаемые модули платформы Mobile SMARTS разделяются на внешние соединения (коннекторы) и расширения (плагины). Коннекторы предназначены для вызова функций внешних систем по запросу с ТСД, с их помощью также может выполняться обработка событий сервера. Расширения (плагины) используются для выполнения какой-либо работы под управлением сервера Mobile SMARTS без обработки вызовов c ТСД и событий сервера (например, плагин может следить за содержимым заданной папки и загружать данные при изменении файлов или делать бэкап по расписанию).

В панели управления все подключаемые модули, добавленные в конфигурацию Mobile SMARTS, находятся внутри узла «Внешние соединения и расширения», разбитые на подгруппы «Внешние соединения» и «Расширения»:

панель управления

Добавление в конфигурацию нового модуля выполняется с помощью щелчка правой кнопкой мыши на узле «Внешние соединения» или «Расширения», в контекстном меню нужно выбрать «Добавить внешнее соединение…» (или «Добавить расширение…»), в списке выбрать нужный модуль и нажать ОК:

панель управления

Настройка параметров модуля выполняется через боковую панель свойств:

панель управлени�я

После добавления модуля и настройки параметров нужно сохранить конфигурацию.

Объектная модель подключаемых модулей​

Рассмотрим объектную модель подключаемых модулей. Базовым интерфейсом для всех подключаемых модулей является IConnectivityBase:

[С#]

/// <summary>
/// Базовый интерфейс для подключаемых модулей
/// </summary>
public interface IConnectivityBase
{
/// <summary>
/// Уникальный идентификатор модуля.
/// </summary>
string Id
{
get;
}
/// <summary>
/// Флаг, указывающий разрешена или нет работа модуля.
/// </summary>
bool Enabled
{
get;
set;
}
/// <summary>
/// Инициализация (запуск) модуля. После вызова этой функции он должен перейти в рабочее состояние
/// </summary>
void Initialize();
/// <summary>
/// Инициализировано соединение или нет.
/// </summary>
bool Initialized
{
get;
}
/// <summary>
/// Функция проверки дополнительных лицензионных ограничений модуля
/// </summary>
param name="supportedSystems">Список внешних модулей, упомянутых в лицензионном файле</param>
void CheckLicenseLimitations(System.Collections.Generic.List<Cleverence.Licensing.LicenseExternalSystem>
supportedSystems);
}

От интерфейса IConnectivityBase наследуется интерфейс соединения с внешней системой IConnecto r и интерфейс расширения (плагина) IPlugin.

[С#]

/// <summary>
/// Интерфейс соединения с внешней системой. Важное отличие - наличие метода Invoke, позволяющего вызывать любые
какие-то методы из внешней системы
/// </summary>
public interface IConnector: IConnectivityBase
{
/// <summary>
/// Тайм-аут при вызове функций внешней системы через коннектор.
/// </summary>
int Timeout
{
get;
set;
}
/// <summary>
/// Поведение при наступлении тайм-аута. ThrowException - вызывать исключение, ReInvoke - завершить попытку вызова,
переинициализировать подключение и сделать снова вызов.
/// </summary>
TimeoutBehavaior TimeoutBehavaior
{
get;
set;
}
/// <summary>
/// Сообщает, что коннектор сам внутри обрабатывает таймауты, и внешняя обработка не требуется
/// </summary>
bool IsSelfTimeoutBehavior { get; }
/// <summary>
/// Для ActiveMQ коннектора добавляет в аргументы DeviceInfo.
/// </summary>
bool IsSupportDeviceInfoInArgs
{
get;
}
/// <summary>
/// Вызов метода внешней системы.
/// </summary>
/// <param name="methodName">Имя метода.</param>
/// <param name="args">Параметры.</param>
/// <returns>Результат (null, если метод ничего не возвращает).</returns>
object InvokeMethod(string methodName, object[] args);
}
/// <summary>
/// Базовый интерфейс плагина.
/// Немного расширяет стандартный IConnectivityBase явным методом остановки модуля.
/// </summary>
public interface IPlugin: IConnectivityBase
{
/// <summary>
/// Деинициализация (остановка) модуля. После вызова этой функции он должен остановить свою работу.
/// </summary>
void Deinitialize();
}

Основное отличие между внешним соединением (коннектором) и расширением (плагином) в том, что коннектор имеет функцию InvokeMethod, с помощью которой выполняется вызов внешней системы при запросах с ТСД и при обработке событий сервера. Свойства Timeout, TimeoutBehavaior, IsSelfTimeoutBehavior позволяют установить тайм-аут при вызовах и задать поведение при наступлении тайм-аута. Плагин, в отличии от коннектора, не поддерживает вызовы. И коннектор и плагин запускаются при вызове функции Initialize сервером Mobile SMARTS. Вызов Initialize происходит при старте сервера базы данных Mobile SMARTS (если в настройках базы включена опция «Инициализировать подключения к внешним системам при старте») или при обращении к коннектору (вызов с ТСД или обработка события сервера). Конкретная реализация Initialize определяется особенностями системы, к которой выполняется подключение. Например, может быть выполнено создание COM-объекта для работы со внешней системой и выполнено подключение к базе данных системы с заданным логином/паролем. В случае плагина Initialize запускает модуль в работу. Например, может начаться слежение за папкой или запущен таймер для выполнения периодических операций. Плагин имеет функцию Deinitialize, при вызове которой работа плагина прекращается. Работа плагина может быть остановлена через панель управления (контекстное меню узла плагина -> «Остановить»), также остановка происходит при остановке сервера базы данных Mobile SMARTS.

Еще одним интерфейсом, производным от IConnectivityBase, является IEventsProcessor:

[С#]

/// <summary>
/// Базовый интерфейс для модуля, умеющего обрабатывать события.
/// Для реализации обработки событий необходимо пользоваться
/// атрибутами EventProcessorAttribute, DocumentEventProcessorAttribute
/// </summary>
public interface IEventsProcessor: IConnectivityBase
{
}

Интерфейс не добавляет каких-либо функций в IConnectivityBase, а служит маркером для модулей, которые используются при обработке событий сервера.

Существует базовая реализация интерфейса IConnectivityBase, от которой можно наследоваться при реализации своих коннекторов — класс ConnectorBase.

Если разрабатываемый коннектор будет использоваться для обработки событий сервера, рекомендуется в качестве базового использовать другой класс — ConnectorTypical, производный от ConnectorBase. Данный класс позволяет указывать имена обработчиков событий сервера в свойствах самого коннектора.

[С#]

Код класса приведен не полностью
/// <summary>
/// Базовый класс коннектора, позволяющий указывать имена обработчиков событий в свойствах самого коннектора.
/// При обработке событий вызываются функции класса, помеченные атрибутом EventProcessor или DocumentEventProcessor.
/// При разработке новых коннекторов рекомендуется наследоваться от данного класса.
/// </summary>
public abstract class ConnectorTypical : ConnectorBase
{
/// <summary>
/// Имя функции-обработчика события "Документ добавляется".
/// Событие вызывается перед добавлением документа в базу Mobile SMARTS из внешней системы.
/// </summary>
[EventHandlerProperty(EventType.DocumentAdding)]
public string DocumentAddingHandler { get; set; }
…..
/// <summary>
/// Обработчик вызывается перед добавлением документа на сервер из внешней системы.
/// </summary>
/// <param name="di"></param>
/// <param name="documentTypeName"></param>
/// <param name="doc"></param>
/// <returns>Возвращается переданный документ или null, если требуется отклонить добавление документа (будет вызвано исключение и документ не будет сохранен на сервере).</returns>
[DocumentEventProcessor(DocumentType = "*", EventType = EventType.DocumentAdding)]
public virtual object DocumentAdding(DeviceInfo di, string documentTypeName, Document doc)
...
}

Имена обработчиков в панели управления указываются в свойствах коннектора.

Указание обработчиков событий сервера в свойствах коннектора позволяет организовать вызов нескольких обработчиков для одного события. Порядок вызова обработчиков редактируется в панели управления в свойствах узла «События сервера»:

Класс ConnectorTypical содержит виртуальные функции, вызываемые при обработке событий сервера, данные функции помечены атрибутом DocumentEventProcessor для событий документов и атрибутом EventProcessor для остальных событий (номенклатуры и таблиц). Например:

[С#]

<summary>
/// Обработчик вызывается сервером при запросе документа с ТСД.
/// </summary>
/// <returns>Возвращается документ (Document), может в сериализованном в xml-строку виде. Если документ не был получен, то возвращается null. Также может возвращаться InvokeResult.</returns>
[DocumentEventProcessor(DocumentType = "*", EventType = EventType.GetDocument)]
public virtual object GetDocument(DeviceInfo di, string documentTypeName, string identity, GetDocumentMode mode)

Атрибут DocumentEventProcessor имеет параметры: DocumentType, позволяет ограничить вызов данного обработчика определенными типами документов, «*» — вызов будет выполнен для всех типов документов, EventType — тип события. Атрибут EventProcessor имеет один параметр: EventType— тип события. При реализации своих обработчиков в производных классах также следует использовать атрибуты DocumentEventProcessor и E ventProcessor.

Типы событий, задаваемые перечислением EventType:

События документов
DocumentAddingДокумент добавляется.
Событие, возникающее в процессе добавления документа на сервере. Вызывается при выгрузке документа в базу Mobile SMARTS из внешней системы.
DocumentAddedДокумент добавлен.
Событие, возникающее после добавления документа на сервере. Вызывается при выгрузке документа в базу Mobile SMARTS из внешней системы.
DocumentAppointingДокумент назначается пользователю.
Событие о том, что документ готов передаваться на мобильное устройство. Вызывается при запросе с ТСД получения документа для работы.
DocumentAppointedДокумент назначен пользователю.
Событие о том, что документ захвачен на обработку. Вызывается в момент, когда документ был передан на ТСД для работы с ним.
DocumentChangedДокумент изменен.
Событие об изменении документа. Вызывается при сохранении документа на сервер в процессе работы на ТСД при использовании в конфигурации Mobile SMARTS действия «Сохранение документа на сервер».
DocumentFinishedДокумент завершен.
Событие о завершении обработки документа. Вызывается при получении сервером завершенного документа с ТСД.
DocumentReleasedДокумент возвращен с ТСД без обработки.
Вызывается когда документ с терминала был возвращен пользователем вызовом release (вернуть документ без изменений).
DocumentRemovedДокумент удален.
Событие об удалении документа с сервера. Удаление выполняется внешней системой.
ListDocumentsПолучить список документов.
Вызывается при входе в список документов на ТСД. Используется в паре с событием ПолучитьДокумент для того, чтобы реализовать выбор документов прямо из учетной системы, без предварительной выгрузки.
GetDocumentПолучить документ.
Вызывается при выборе в списке документов на ТСД того документа, который еще не был выгружен (попал в этот список с помощью события ПолучитьСписокДокументов).
События номенклатуры
ProductNotFoundПолучить товар.
Событие о том, что продукт был запрошен терминалом по коду (штрихкод, артикул, код) с сервера и не был найден в серверном справочнике.
ProductsNotFoundПолучить товары по списку Id.
Событие о том, что несколько товаров были запрошены терминалом по идентификаторам с сервера и не были найден в серверном справочнике. Позволяет реализовывать получение сразу нескольких товаров из базы учетной системы без предварительной выгрузки.
GetProductByPartOfNameПолучить товар по части наименования.
Вызывается при вводе в строку поиска в списке номенклатуры на ТСД. Используется для того, чтобы реализовать поиск номенклатуры по части наименования прямо из учетной системы.
GetCellByIdПолучить ячейку по идентификатору
GetCellByBarcodeПолучить ячейку по штрихкоду
ListProductsПолучить список товаров.
Вызывается при входе в список номенклатуры на ТСД. Используется для того, чтобы реализовать выбор номенклатуры прямо из учетной системы, без предварительной выгрузки.
События таблиц
TableRequestОбработать запрос.
Событие вызывается при запросе данных из таблицы, определенной в конфигурации Mobile SMARTS. Позволяет получать строки таблицы он-лайн по запросу с ТСД.

Как разработать собственный коннектор​

Для работы коннектора под управлением сервера Mobile SMARTS и настройки параметров коннектора через панель управления создаются два файла dll: первая dll, предназначенная для сервера, размещается в <Папка базы Mobile SMARTS>\Server\DataService\ bin\. Вторая dll, для панели управления — в <Папка базы Mobile SMARTS>\Control panel\ Addins. Имена файлов должны иметь вид Cleverence.Connectivity.*.dll (например, Cleverence.Connectivity.MyConnector.dll — для сервера и Cleverence.Connectivity.MyConnector.Panel.dll — для панели управления).

В «Решении» (Solution) в Visual Studio нужно создать два проекта с типом выходных данных «Библиотека классов»:

интеграция

Скачать заготовку коннектора (Решение Visual Studio 2019 с двумя проектами).

Пространство имен класса коннектора должно начинаться на Cleverence.Connectivity, целевая рабочая среда .NET Framework 4.6.1.

Для серверной версии коннектора в «Ссылки» (Reference Assemblies) нужно добавить следующие dll:

Cleverence.Barcoding.dll

Cleverence.Common.dll

Cleverence.Connectivity.dll

Cleverence.DataCollection.dll

Cleverence.MobileSMARTS.dll

Данные библиотеки находятся по пути <папка установки Mobile SMARTS>\ Server\DataService\ Bin (по умолчанию, C:\ Program Files (x86)\ Cleverence Soft\ Mobile SMARTS\ Server\ DataService\ Bin).

В проект коннектора для панели управления нужно добавить в «Ссылки» (Reference Assemblies):

Cleverence.DataCollection.dll

Cleverence.MobileSMARTS.ComConnector.dll

Библиотека Cleverence.MobileSMARTS.ComConnector.dll находится по пути <папка установки Mobile SMARTS>\ Control Panel (по умолчанию C:\ Program Files (x86)\ Cleverence Soft\ Mobile SMARTS\ Control Panel).

Рекомендуется скопировать все нужные dll в отдельную папку рядом с файлом «Решения» (Solution) и добавить ссылки на библиотеки из этой папки.

В каждый из проектов (для сервера и для панели управления) нужно добавить по файлу *.cs для исходного кода класса коннектора.

интеграция

Класс коннектора должен реализовывать интерфейс IConnector(находится в пространстве имен Cleverence.Connectivity). Можно наследовать класс своего коннектора от класса ConnectorTypical(также из Cleverence.Connectivity), который реализует IConnector и, кроме того, содержит свойства для указания имен обработчиков событий сервера и виртуальные функции для вызова обработчиков.

Обе версии класса коннектора (для cервера и для панели управления) должны иметь одинаковое имя и находится в одинаковых пространствах имен (namespace), начинающихся на Cleverence.Connectivity(например, Cleverence.Connectivity.MyConnector).

При наследовании от ConnectorTypica l в серверной версии коннектора следует перегрузить функции: Initialize(выполняет инициализацию коннектора), Deinitialize (выполняет деинициализацию), InvokeMethod (выполняет вызов во внешнюю систему). Именно InvokeMethod реализует основной функционал коннектора по работе с внешней системой. Также следует перегрузить свойство Initialized (возвращает признак, инициализирован ли коннектор, true — инициализирован, false — нет). При необходимости, могут быть перегружены функции обработки событий сервера (например, GetProduct — получение товара при запросе с ТСД, DocumentFinished — на сервер с ТСД попал завершенный документ и др.). Если не перегружать функции обработки событий, при возникновении событий будет вызываться функция InvokeMethod, в которую передается имя обработчика события, указанное в настройках и соответствующие событию аргументы (см. События сервера).

Версия коннектора для панели управления также наследуется от ConnectorTypica l. Перегружать какие-либо функции в этом случае не нужно. Для подключения коннектора к базе внешней системы обычно требуются определенные настройки (адрес базы внешней системы, имя пользователя/ пароль и т.п). Для того, чтобы иметь возможность редактировать нужные настройки и чтобы настройки сохранялись, требуется добавить свойства в классы коннектора для панели управления и сервера. Заготовка коннектора:

[С#]

Серверная часть:
namespace Cleverence.Connectivity.DemoConnector
\{
public class DemoConnector : ConnectorTypical
\{
public DemoConnector()
{
\}
public string MyProperty
{
get;
set;
\}
public override bool Initialized
{
get
{
throw new NotImplementedException();
\}
\}
public override void Initialize()
{
throw new NotImplementedException();
\}
public override void Deinitialize()
{
throw new NotImplementedException();
\}
public override object InvokeMethod(string methodName, object[] args)
{
throw new NotImplementedException();
\}
\}
\}
Часть для панели управления:
namespace Cleverence.Connectivity.DemoConnector
{
public class DemoConnector : ConnectorTypical
{
public DemoConnector()
{
\}
public string MyProperty
{
get;
set;
\}
\}
\}

В серверной части нужно реализовать Initialized, Initialize, Deinitialize, InvokeMethod. Для примера добавлено свойство MyProperty.

Собранную dll серверной версии размещаем в <Папка базы Mobile SMARTS>\\Server\\DataService\\bin\\, версию для панели управления в <Папка базы Mobile SMARTS>\Control panel\Addins.

Сервер Mobile SMARTS в целях безопасности выполняет проверку цифровой подписи загружаемых сборок. Если после размещения неподписанного файла dll в <Папка базы Mobile SMARTS>\Server\DataService\bin\> перезапустить службу сервера Mobile SMARTS, в логе сервера базы данных dataserver_*.log (в C:\ProgramData\Cleverence\Logs) появится сообщение:

2019-08-05 10:08:08.6537\|ERROR\|NLogger.WriteNlogEvent\| Коннекторы не загружены! Обнаружена неподписанная сборка: C:\\ProgramData\\Cleverence\\Базы Mobile SMARTS\\e3945857-308f-4829-92e2-720dc11d1bec\\Server\\DataService\\bin\\Cleverence.Connectivity.DemoConnector.dll

Видим, что dll коннектора не загрузилась. В некоторых случаях загрузка неподписанной сборки приводит к остановке сервера. Для того, чтобы можно было проверить работу коннектора и выполнить отладку, сервер нужно запустить с ключом Debug из командной строки (службу сервера перед этим нужно остановить):

C:\\Program Files (x86)\\Cleverence Soft\\Mobile SMARTS\\Server\\Cleverence.MobileSMARTS.Server.exe /debug

После этого в панели управления можно добавить коннектор в конфигурацию:

интеграция интеграция

Настройка параметров коннектора выполняется через панель свойств. Когда настройка выполнена, сохраним конфигурацию. После этого можно запустить коннектор с помощью кнопки «Пуск»:

интеграция

Если требуется отладка кода коннектора, рядом с файлом коннектора в <Папка базы Mobile SMARTS>\\Server\\DataService\\bin\ следует разместить файл *.pdb (см. Тестирование и выпуск разработанного коннектора. Когда отладка закончена, обратитесь в техническую поддержку «Клеверенс» для подписания dll.

Скачать заготовку коннектора (Решение Visual Studio 2019 с двумя проектами).

Пример разработки коннектора​

Для примера разработаем коннектор, который будет выполнять получение данных из файла Excel онлайн по запросам с ТСД. В примере будет рассмотрена, в том числе, перегрузка функций-обработчиков событий сервера для получения номенклатуры, документов и обработки запросов к таблицам.

Постановка задачи

Требуется разработать коннектор, который будет по запросам с ТСД получать данные из файлов Excel. Используются следующие справочники: «Номенклатура», «Склады», «Остатки». Должна быть обеспечена работа с документами «Поступление», на ТСД должен отображаться список документов для работы, подготовленных на сервере. Пользователь ТСД выбирает документ, принимает товар, после завершения работы данные записываются в исходный документ. Используется база Mobile SMARTS «Магазин 15».

Подготовка данных

Справочники будут храниться в одном файле (книге) Excel на листах: «Номенклатура», «Склады», «Остатки». Файл со справочниками имеет фиксированное название «БазаДанных.xlsm» (книга Excel с поддержкой макросов) и располагается в заданной папке (путь к папке указывается в настройках коннектора). Файлы документов «Поступления» будут находиться в этой же папке и называться «Поступление №00001.xlsx», «Поступление №00002.xlsx» и т. д. В архиве с исходниками данные находятся в папке Xlsx, состав полей см. в файлах.

интеграция

Разработка и тестирование коннектора

В Visual Studio создаем «Решение» (solution) и два проекта в нем:

Cleverence.Connectivity.ExcelDemoConnector(для сервера) и Cleverence.Connectivity.ExcelDemoConnector.Panel (для панели управления).

Добавляем в ссылки (Reference assemblies) в серверный проект Cleverence.Connectivity.ExcelDemoConnector: Cleverence.Common.dll, Cleverence.Connectivity.dll, Cleverence.DataCollection.dll, Cleverence.MobileSMARTS.dll.

В проект для панели управления Cleverence.Connectivity.ExcelDemoConnector.Panel: Cleverence.DataCollection.dll, Cleverence.MobileSMARTS.ComConnector.dll.

Для работы с файлом Excel будем использовать COM-объект Excel.Application (на ПК должен быть установлен Microsoft Excel), добавим в ссылки в проект для сервера Microsoft.Office.Interop.Excel:

интеграция

Добавим в каждый из проектов по файлу ExcelDemoConnector.cs, в котором будет находится класс коннектора ExcelDemoConnector. Базовым классом для ExcelDemoConnector является ConnectorTypical.

Добавим свойство, с помощью которого можно задать путь к папке с файлами Excel, используемыми для обмена данными:

[С#]

public string DatabaseFolder
\{
get;
set;
}

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

Добавим приватное поле Excel.Application excel для хранения ссылки на COM-объект Excel. Теперь первым делом нам нужно реализовать, функцию Initialize, которая переводит коннектор в рабочее состояние:

[С#]

public override void Initialize()
\{
this.Dispose();
if (!this.Enabled)
throw new InvalidOperationException(this.GetType().Name + " is not enabled.");
this.excel = new Excel.Application();
this.excel.Visible = false;
}

Вызываем D ispose, чтобы выполнить деиницилиазацию, если ранее коннектор был инициализирован. Если вызовы коннектора запрещены через gанель управления (Enabled == false), вызываем исключение. Если вызовы разрешены, создаем COM-объект.

Деинициализация:

[С#]

public override void Deinitialize()
\{
if (this.excel != null)
\{
this.excel.Quit();
this.excel = null;
}
}
Признак того, что коннектор инициализирован:
public override bool Initialized
\{
get
{
return this.excel != null;
}
}

Этого достаточно, чтобы проверить запуск коннектора через панель управления.

Соберем решение в Visual Studio. Развернем базу «Магазин 15 Расширенный» или «Мегамаркет». Скопируем dll для сервера в <Папка базы Mobile SMARTS>\\Server\\DataService\\bin\, для панели управления в <Папка базы Mobile SMARTS>\\Control panel\\Addins. Запустим сервер в режиме отладки из командной строки: C:\Program Files (x86)\Cleverence Soft\Mobile SMARTS\Server\Cleverence.MobileSMARTS.Server.exe/debug.

Добавим коннектор в конфигурацию, сохраним и проверим, что выполняется запуск.

интеграция

Реализуем получение номенклатуры онлайн из файла Excel. Когда товар запрашивается терминалом на сервере по каким-либо реквизитам (Ид, Штрихкод, Артикул) и товар не найден в выгруженном справочнике номенклатуры, выполняется вызов обработчика события «Получить товар)»

В случае наследования от ConnectorTypical обработчик события может быть реализован как во внешней системе (вызов через InvokeMethod функции из внешней системы по имени), так непосредственно в коннекторе. Для реализации обработчика в самом коннекторе нужно перегрузить функцию GetProduct:

[С#]

[EventProcessor(EventType = EventType.ProductNotFound)]
public override object GetProduct(Cleverence.Warehouse.DeviceInfo di, string productId, string packingId,
SearchProductMode searchMode, Cleverence.Barcoding.BarcodeData barcodeData)
{
CheckInit();
return GetProductInternal(productId, packingId, searchMode);
}

Не забываем указать атрибут EventProcessor (EventType = EventType.ProductNotFound). Реализацию поиска товаров по заданным реквизитам в зависимости от режима (searchMode) см. в GetProductInternal.

Событие «Получить список товаров» возникает, когда пользователь на ТСД заходит в список номенклатуры (выбор товара по 0 в действии «Выбор номенклатуры») и в базе нет выгруженного справочника. Перегрузим в коннекторе функцию GetProductsList:

[С#]

[EventProcessor(EventType = EventType.ListProducts)]
public override object GetProductsList(DeviceInfo di, string searchStr)
{
CheckInit();
return GetProductsListInternal(searchStr);
}

Функция возвращает PackedProductCollection со всем списком номенклатуры.

Проверим, как происходит получение номенклатуры. В настройках коннектора нужно указать путь к папке, в которой находится файл Excel со справочниками (DatabaseFolder). Нужно заполнить обработчики событий номенклатуры: «Получить список товаров», «Получить товар по Id», «Получить товар по реквизитам» (штрихкод, артикул, код), «Получить упаковку товара».

интеграция

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

Проверить получение номенклатуры можно с помощью клиента Mobile SMARTS для ПК. Для получения списка товаров заходим в «Просмотр справочников -> Товары». Проверить получение по штрихкоду можно, например, в операции «Сбор штрихкодов»:

интеграция интеграция

Реализуем получение списка документов. Обработчик события «Получить список документов» вызывается, когда пользователь на ТСД заходит в список выбора документов по кнопке типа документа.

[С#]

[DocumentEventProcessor(EventType = EventType.ListDocuments)]
public override object GetDocumentsList(DeviceInfo di, string documentTypeName)
{
...
}

Функция возвращает DocumentDescriptionCollection со списком описаний документов (DocumentDescription), готовых для отдачи на ТСД. Список получаем на основе имен файлов xlsx в папке с данными.

Для получения документа в работу на ТСД нужно реализовать обработчик события «Получить документ». Обработчик вызывается, когда пользователь на ТСД выбирает документ из списка, полученного с помощью события «Получить список документов», или сканирует штрихкод документа в окне выбора документов.

[С#]

[DocumentEventProcessor(EventType = EventType.GetDocument)]
public override object GetDocument(DeviceInfo di, string documentTypeName, string identity, GetDocumentMode mode)
{
...
}

Функция возвращает объект Document, если документ найден по переданным параметрам.

Проверим работу на примере документов «Поступление»:

интеграция интеграция

Для загрузки завершенного на ТСД документа используем событие «Документ завершен».

[С#]

[DocumentEventProcessor(EventType = EventType.DocumentFinished)]
public override object DocumentFinished(DeviceInfo di, string documentTypeName, Document doc)
{
CheckInit();
string fileName = GetFileNameByDocId(doc.Id, documentTypeName);
if (!string.IsNullOrEmpty(fileName))
{
if(LoadDocumentFromTerminal(fileName, doc))
{
MessageCenter.AddNewMessage(string.Format("Документ '{0}' загружен.", doc.Name), null, doc.UserId, false);
BaseRuntimeContext.Current.DocumentsManager.Delete(doc);
return doc;
}
}
return base.DocumentFinished(di, documentTypeName, doc);
}

В данной функции после загрузки документа на ТСД отправляется сообщение с помощью MessageCenter.AddNewMessage. Завершенный документ удаляется из базы Mobile SMARTS с помощью BaseRuntimeContext.Current.DocumentsManager.Delete (doc).

Реализуем получение данных онлайн при запросах к таблицам Mobile SMARTS. Например, в конфигурации «Склада 15» есть таблицы «Склады», «Остатки» и др. На ТСД может выполняться получение списка всех складов, запрос остатков определенного товар и др. Если таблица хранится на сервере, в настройках таблицы включен поиск во внешней системе и задан обработчик события «Обработать запрос», то сервер вызывает указанный обработчик. Перегрузим в нашем коннекторе функцию ProcessTableRequest.

[С#]

[EventProcessor(EventType = EventType.TableRequest)]
public override object ProcessTableRequest(DeviceInfo di, DocumentQuery dq, DocumentTableInfo tableInfo)
{
...
}

В функцию передается: DocumentQuery dq — объект запроса, в свойстве WhereRootElement содержится корень синтаксического дерева запроса. Обойдя дерево, можно сформировать запрос в том виде, который ожидает внешняя система. DocumentTableInfo tableInfo — описание таблицы, в свойстве Name содержится имя таблицы из конфигурации Mobile SMARTS. В простейшем случае можно возвращать все строки запрошенной таблицы, не накладывая условие из DocumentQuery, сервер Mobile SMARTS сам выполнит выборку данных по заданным условиям. Однако, в случае реальной работы с большими объемами данных, так делать не рекомендуется.

Функция возвращает коллекцию строк RowCollection.

Проверим получение складов и остатков:

интеграция

Кроме обработки событий сервера, есть возможность вызова произвольных функций внешней системы, которые будут возвращать некоторые данные на ТСД или выполнять какую-то работу во внешней системе. В конфигурации Mobile SMARTS для этого используется действие «Вызов внешней системы». В коннекторе должна быть реализована функция InvokeMethod.

В нашем случае InvokeMethod будет вызывать макрос Excel с указанным именем, передавая полученные с ТСД аргументы:

[С#]

public override object InvokeMethod(string methodName, object[] args)
{
CheckInit();
string dbPath = Path.Combine(DatabaseFolder, DbFileName);
Excel.Workbook workbook = this.excel.Workbooks.Open(dbPath);
try
{
return RunMacro(methodName, args);
}
finally
{
workbook.Close();
}
}

Добавим в книгу Excel лист «Работы», на котором будет таблица с количеством собранных сотрудниками заказов за неделю:

интеграция

На VB в Excel напишем функцию, которая будет возвращать таблицу с колонками «Комплектовщик», «Собрано заказов» по переданному складу.

[С#]

Function СобраноЗаказов(Склад As String)
Dim sh_src As Worksheet
Dim storageConnector As Object, rowCollection As Object, row As Object
Dim picker As String
Dim ordCnt As Integer
Dim rng As Excel.Range
Set storageConnector = CreateObject("Cleverence.Warehouse.StorageConnector")
Set rowCollection = CreateObject("Cleverence.Warehouse.RowCollection")
Set sh_src = Worksheets("Работы")
…..
СобраноЗаказов = storageConnector.ToXml(rowCollection)
End Function

Функция возвращает объект Cleverence.Warehouse.RowCollection, сериализованный в xml. В конфигурации Mobile SMARTS сделаем вызов данной функции при просмотре информации о складе:

интеграция

В действии «Просмотр отчета» выведем полученную таблицу:

интеграция

Тестирование и выпуск коннектора​

В связи с повышением требований к безопасности сервера все разработанные коннекторы должны пройти процедуру проверки и подписания у «Клеверенс».

Попытка использования неподписанного коннектора в «продуктивном» режиме приводят к полной остановке сервера с записью в лог файле «Коннекторы не загружены! Обнаружена неподписанная сборка: хххх.dll», либо «Коннекторы не загружены! Ошибка проверки подписи dll: xxxx.dll».

Для отладки коннектора при разработке следует использовать запуск сервера в тестовом режиме.

Для этого остановите службу сервера:

интеграция

И запускайте его из командной строки с параметром /debug:

c:\Program Files (x86)\Cleverence Soft\Mobile SMARTS\Server\Cleverence.MobileSMARTS.Server.exe /debug

Далее Вы можете просто подключаться отладчиком Visual Studio к запущенному процессу и вести отладку вашего коннектора.

интеграция

После завершения разработки вашего коннектора создайте запрос в техническую поддержку «Клеверенс» о его проверке и подписании.