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

Интеграция Mobile SMARTS с MSSQL

Платформа Mobile SMARTS интегрирована с MSSQL.

В комплекте поставки есть специальный коннектор, который позволяет обращаться напрямую к базе данных с терминала сбора данных. Это даёт возможность использовать решение на основе платформы Mobile SMARTS совместно с MSSQL без необходимости самостоятельно писать средства обмена данными.

Пример запроса к базе MSSQL с помощью коннектора​

Кроме хранимых процедур, которые должны возвращать xml, можно использовать маппинг таблиц базы SQL на объекты Mobile SMARTS.

Скачать пример базы Mobile SMARTS с настроенным маппингом и базы SQL

Для работы с базой SQL Server в конфигурацию Mobile SMARTS нужно добавить коннектор к SQL Server и настроить подключение к базе.

интеграция

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

После этого создайте в базе SQL хранимую процедуру:

CREATE PROCEDURE [dbo].[GetProduct]
(
@productId varchar(50),
@packingId varchar(50),
@userId varchar(50),
@mode int,
@resultXml xml OUTPUT
)
AS
BEGIN
...
END

В обработчике события «Получить товар» укажите SqlServerConnector:serverEvent_GetProduct ( SqlServerConnector— ID коннектора, serverEvent_ — указание на обработчик серверного события). Процедура должна возвращать через параметр @resultXml xml-файл особого вида, который представляет собой сериализованные объекты Mobile SMARTS. В случае режима 1 (поиск по ШК или другим атрибутам товара) это объекты Cleverence.Warehouse.PackedProduct(если найден один товар) или Cleverence.Warehouse.PackedProductCollection (несколько объектов), подробнее здесь. В процедуре нужно создать соответствующие COM-объекты, получить xml с помощью вызова ToXml объекта StorageConnector, можно также самим сформировать нужный xml, пример:

IF @mode = 1
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<PackedProduct expiredDate="0001-01-01T00:00:00" quantity="1" registrationDate="0001-01-01T00:00:00"><Fields />
<Product barcode="" basePackingId="шт" id="cbcf492a-55bc-11d9-848a-00112f43529a" marking="Х-1234" name="BOSCH">
<Packings><Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing></Packings>
</Product>
<Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing>
<Quantities />
</PackedProduct>'
END

При попадании завершенного документа с ТСД на сервер Mobile SMARTS вызывается событие «ДокументЗавершен» — с помощью обработчика этого события можно загрузить документ в базу SQL. Есть два варианта обработчика для SQL.

1. SqlServerConnector:serverEvent_DocumentCompleted)SqlServerConnector:serverEvent_DocumentCompletedXml


CREATE PROCEDURE [dbo].[DocumentCompleted]
(
@documentId varchar(50),
@resultXml xml OUTPUT
)
AS
BEGIN
/*


CREATE PROCEDURE [dbo].[DocumentCompletedXml]
(
@documentXml xml,
@result int OUTPUT
)
AS
BEGIN
SET @result = 1;
END
Нужно создать COM-объект Cleverence.Warehouse.StorageConnector, выполнить подключение к базе Mobile SMARTS c помощью SelectCurrentApp (<строка подключения к базе Mobile SMARTS или ID базы>),
загрузить с сервера документ при помощи GetDocument (@documentId), обработать документ и, если загрузка выполнилась успешно, удалить с сервера документ при помощи RemoveDocument (@documentId).


*/
SET @resultXml = '';
END
documentXml содержит xml документа Mobile SMARTS, который можно разобрать внутри процедуры.

Если через result возвращается 1, коннектор удалит документ с сервера.

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

Примеры процедур:


CREATE PROCEDURE [dbo].[GetDocumentsList]
(
@userId varchar(50),
@documentTypeName varchar(50),
@resultXml xml OUTPUT
)
AS
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<DocumentDescriptionCollection xmlns:clr="http://schemas.cleverence.ru/clr">
<DocumentDescription barcode="123" createDate="0001-01-01T00:00:00" distributeByBarcode="True" documentTypeName="Инвентаризация" id="123" name="Инвентаризация 123" warehouseId="1"><Fields />
</DocumentDescription>
</DocumentDescriptionCollection>';
END

 CREATE PROCEDURE [dbo].[GetDocument]
(
@userId varchar(50),
@documentTypeName varchar(50),
@documentId varchar(50),
@mode int,
@resultXml xml OUTPUT
)
AS
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<Document xmlns:clr="http://schemas.cleverence.ru/clr" barcode="00003" createDate="2014-03-06T16:53:33" deviceId="" deviceIP="" deviceName="" documentTypeName="Инвентаризация" id="123" name="Инвентаризация товаров на складе РТЦУТД00003 от 26.06.2008 11:22:45" appointment="оператор" userId="оператор" userName="оператор" warehouseId="1">
<DeclaredItems>
<DocumentItem declaredQuantity="8" expiredDate="0001-01-01T00:00:00" packingId="пара" productId="dee6e1d0-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="price"><Value clr:Type="Int32">1424</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:00" packingId="3" productId="dee6e1d0-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="descr"><Value clr:Type="String">6, 39, Зеленый</Value></FieldValue><FieldValue fieldName="price"><Value clr:Type="Int32">1424</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="9" expiredDate="0001-01-01T00:00:00" packingId="пара" productId="dee6e1d3-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="price"><Value clr:Type="Int32">1780</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:00" packingId="3" productId="dee6e1d3-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="descr"><Value clr:Type="String">6, 39, Белый</Value></FieldValue><FieldValue fieldName="price"><Value clr:Type="Int32">1780</Value></FieldValue></Fields></DocumentItem>
</DeclaredItems><CurrentItems capacity="0" />
<ClassificatorIds capacity="0" />
<Classificators capacity="0" />
<ClassificatorUsings capacity="0" /><Errors capacity="0" />
<Fields capacity="4"><FieldValue fieldName="КонтрольКолва"><Value clr:Type="Int32">0</Value></FieldValue><FieldValue fieldName="ПоЯчейкам"><Value clr:Type="Int32">0</Value></FieldValue>
</Fields>
<Tables capacity="0" />
</Document>'
END

Также не обязательно формировать xml вручную, можно использовать COM-объекты Mobile SMARTS.