Кроме хранимых процедур, которые должны возвращать 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) | 2. 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 базы>), */ 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.