Статья успешно отправлена на почту

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

Применимо к продуктам: Mobile SMARTS платформа
Последние изменения: 2024-03-26

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

Была ли статья полезна?
Спасибо за ваш отзыв!
Отзыв
Заполните, пожалуйста, данную форму, что конкретно вы не нашли, оставьте свои комментарии о работе сайта / полезности / сложности с навигацией
0/500