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

Типы в Mobile SMARTS

BarcodeData​

Тип, который используется для получения информации о штрихкоде/сканировании.

С помощью данного типа можно проверить совместимость штрихкода с форматом GS1, получить набор идентификаторов применения по штрихкоду, а также, при сканировании камерой, получить изображение штрихкода.

Свойства типа

СвойствоОписание
string BarcodeClearedОчищенный от различных контрольных символов RAW штрихкод
string BarcodeGS1ClearedОчищенный от различных контрольных символов GS1 штрихкод
string BarcodeGS1FormattedОтформатированный GS1 штрихкод в формате «со скобками»
string BarcodeGS1PrintableКорректный правильный GS1 штрихкод, пригодный для печати, с символами-разделителями групп
IPicture BarcodePictureПолное изображение отсканированного ШК*
IPicture BarcodePictureWithBorderИзображение отсканированного ШК с рамкой вокруг ШК*
string BarcodeRawИсходный поток данных ШК, с контрольными символами и т. д.
string BarcodeRawExИсходный поток данных ШК, с контрольными символами и т. д.
Еще более сырой, чем BarcodeRaw*
string BeerShortMarkКод идентификации пивной и слабоалкогольной продукции по стандартам Честного знака
string BeerShortMarkFormattedКод идентификации пивной и слабоалкогольной продукции в формате «со скобками»
string BikeShortMarkКод идентификации товарной группы «Велосипеды» по стандартам Честного знака
string BikeShortMarkFormattedКод идентификации товарной группы «Велосипеды» в формате «со скобками»
IPicture CropedBarcodePictureИзображение ШК, обрезанное по рамке вокруг ШК*
string DrugsShortMarkКод идентификации товарной группы «Лекарства» по стандартам Честного знака
string DrugsShortMarkFormattedКод идентификации товарной группы «Лекарства» в формате «со скобками»
string EAN13EAN13 из отсканированного ШК
string EAN8EAN8 из отсканированного ШК
string ErrorGS1CompatibleОшибка после проверки совместимости ШК с форматом GS1
string FashionShortMarkКод идентификации товаров легкой промышленности по стандартам Честного знака
string FashionShortMarkFormattedКод идентификации товаров легкой промышленности в формате «со скобками»
Ean128 GS1Объект GS1, содержащий подробную информацию об используемых идентификаторах применения
string GTINGTIN в том виде, в котором он может быть получен из ШК
string GTINBaseGTIN с лидирующим символом 0
bool HardwareОзначает, был ли создан объект сканированием или программно
bool IsAlcoMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки алкогольной продукции
bool IsBeerMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки пивной и слабоалкогольной продукции по стандартам Честного знака
bool IsBikeMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товарной группы «Велосипеды» по стандартам Честного знака
bool IsDrugsMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товарной группы «Лекарства» по стандартам Честного знака
bool IsFashionMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товаров легкой промышленности по стандартам Честного знака
bool IsGS1CompatibleУдалось ли разложить ШК на группы
идентификаторов применения по
стандарту GS1
bool IsGTINCompatibleУдалось ли найти GTIN в отсканированном ШК
bool IsMarkПроверяет совместимость отсканированного штрихкода с каждым из форматов кода маркировки
bool IsMilkMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки молочной продукции по стандартам Честного знака
bool IsPerfumeryMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки духов и туалетной воды по стандартам Честного знака
bool IsPhotoMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки фотоаппаратов и ламп-вспышек по стандартам Честного знака
bool IsShoesMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товарной группы «Обувь» по стандартам Честного знака
bool IsTiresMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки шин по стандартам Честного знака.
bool IsTobaccoBoxПроверяет совместимость отсканированного ШК с форматом кода маркировки блока табачной продукции по стандартам Честного знака
bool IsTobaccoMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки блока или пачки табачной продукции по стандартам Честного знака
bool IsTobaccoPackПроверяет совместимость отсканированного ШК с форматом кода маркировки пачки табачной продукции по стандартам Честного знака
bool IsWaterMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товарной группы «Упакованная вода» по стандартам Честного знака
bool IsWheelChairMarkПроверяет совместимость отсканированного ШК с форматом кода маркировки товарной группы «Кресла-коляски» по стандартам Честного знака
string MilkShortMarkКод идентификации молочной продукции по стандартам Честного знака
string MilkShortMarkFormattedКод идентификации молочной продукции в формате «со скобками»
string PerfumeryShortMarkКод идентификации духов и туалетной воды по стандартам Честного знака
string PerfumeryShortMarkFormattedКод идентификации духов и туалетной воды в формате «со скобками»
string PhotoShortMarkКод идентификации фотоаппаратов и ламп-вспышек по стандартам Честного знака
string PhotoShortMarkFormattedКод идентификации фотоаппаратов и ламп-вспышек в формате «со скобками»
string ScannedBarcodeCompatibleВозвращает штрихкод в том виде, в котором он раньше всегда попадал в переменную сессии ScanedBarcode
string ShoesShortMarkКод идентификации товарной группы «Обувь» по стандартам Честного знака
string ShoesShortMarkFormattedКод идентификации товарной группы «Обувь» в формате «со скобками»
string ShortMarkКод идентификации любой из групп по стандартам Честного знака
string ShortMarkFormattedКод идентификации любой из групп в формате «со скобками»
string StrBarcodeTypeТип штрихкода, распознанный сканером. Если сканер не распознал или не умеет этого, то UNKNOWN_TYPE.
string TiresShortMarkКод идентификации шин по стандартам Честного знака
string TiresShortMarkFormattedКод идентификации шин в формате «со скобками»
string TobaccoBoxShortMarkКод идентификации блока табачной продукции по стандартам Честного знака
string TobaccoBoxShortMarkFormattedКод идентификации блока табачной продукции в формате «со скобками»
string TobaccoPackShortMarkКод идентификации пачки табачной продукции по стандартам Честного знака
string TobaccoPackShortMarkFormattedКод идентификации пачки табачной продукции в формате «со скобками»
string TobaccoShortMarkКод идентификации блока или пачки табачной продукции по стандартам Честного знака
string TobaccoShortMarkFormattedКод идентификации блока или пачки табачной продукции в формате «со скобками»
string UPCAШтрихкод UPC-A, если он таковым является
string WaterShortMarkКод идентификации товарной группы «Упакованная вода» по стандартам Честного знака
string WaterShortMarkFormattedКод идентификации товарной группы «Упакованная вода» в формате «со скобками»
string WheelChairShortMarkКод идентификации товарной группы «Кресла-коляски» по стандартам Честного знака
string WheelChairShortMarkFormattedКод идентификации товарной группы «Кресла-коляски» в формате «со скобками»
string WiFiPassПароль для подключения к Wi-Fi **
string WiFiSSIDНазвание сети для подключения к Wi-Fi **
string WiFiTypeТип шифрования для подключения к Wi-Fi **

\* при сканировании камерой устройства на OC Android

\\ при сканировании устройством на OC Android

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

Методы свойства GS1

МетодОписание
bool Contains (ai)Проверяет наличие идентификатора применения среди групп разобранного ШК
IEnumerable GetEntries ()Получает перечисление групп идентификаторов применения вместе со значениями
object GetObjectValue (ai)Возвращает значение по переданному идентификатору применения из разобранного ШК
string GetStringValue (ai)Возвращает строковое значение по переданному идентификатору применения из разобранного ШК
string GetValue (ai)Возвращает строковое значение по переданному идентификатору применения из разобранного ШК

Примеры использования

Задача: Получить всю доступную информацию по данным штрихкода.

Решение:

панель управления
Report viev.Report blocks[0]
<div>
<p class="__helper_text" style="padding-top: 8dp;">Barcode type</p>
<p>{BarcodeData.StrBarcodeType}</p>
<p class="__helper_text" style="padding-top: 8dp;">Raw barcode</p>
<p>{BarcodeData.BarcodeRawEx.Replace (GS, «<blue>{CDATA («<GS>»)}</blue>»).Replace (FNC, «<red>{CDATA («<FNC1>»)}</red>»)}</p>
{BarcodeData.IsGS1Compatible:<div>
<p class="__helper_text" style="padding-top: 8dp;">Human-readable interpretation</p>
<p>{BarcodeData.BarcodeGS1Formatted}</p>
</div>;}
{BarcodeData.IsMark:<div>
<p class="__helper_text" style="padding-top: 8dp;">Track & Trace identification code</p>
<p>{BarcodeData.ShortMarkFormatted}</p>
</div>;}
{BarcodeData.IsGS1Compatible:<div>
<p class="__helper_text" style="padding-top: 8dp;">Application identifiers</p>
</div>;}
</div>

			 Report viev.Report blocks[1]

Report viev.Report blocks[2]
<div style="padding-bottom: 100dp;">
{BarcodeData.CropedBarcodePicture != null:<div>
<p class="__helper_text» style="padding-top: 8dp;">Picture</p>
<img size="stretch">{BarcodeData.CropedBarcodePicture}</img>
</div>;}
</div>

Рассмотрим пример подробнее:

  • В первом блоке отчета выводим на экран

  • Тип отсканированного штрихкода

  • Сырые данные штрихкода в виде «как есть»

  • Приведенные к человекочитаемому формату данные\*

  • Код идентификации для системы прослеживаемости товаров\*

  • Заголовок для списка идентификаторов применения*

    \* для случаев, когда такая возможность есть

  • Во втором блоке выводим список идентификаторов

  • В третьем блоке выводим изображение отсканированного ШК*

    \* при сканировании камерой

Код примера

Список типов кодировок

AustraliaPostEAN8PosiCode
AztecGRIDMATRIXPostals
BooklandEANGS1_128Postnet
BPOGS1_DATABARQR
CanadaPostGS1_DATABAR_ExpandedRSS
ChinaPostGS1_DATABAR_LimitedRSS14
CodabarGS1_DATABAR_OMNIDIRECTIONALRSSExpanded
CodablockGS1_Databar14RSSLimited
Code11GS1_DATAMATRIXStraight2of5
Code128GS1_QRStraight2of5_IATA
Code128EmultionHANXINStraight2of5_Industrial
Code16kHK25Telepen
Code32IDTagTLC39
Code32_PARAFInterleaved2of5TriopticCode39
Code39ISBT128UKPostal
Code49JapanPostUNKNOWN_TYPE
Code93KoreanPostUPCA
Composite_CCABMatrix2of5UPCA_2Supps
Composite_CCCMaxiCodeUPCA_5Supps
Composite_TLC39MESAUPCE0
CompositeCodeMicroPDFUPCE0_2Supps
CouponCodeMicroQRUPCE0_5Supps
DataMatrixMSIUPCE1
Discrete2of5Mx25UPCE1_2Supps
DOTCODENEC2OF5UPCE1_5Supps
DutchPostNetherlandKIXUPUFICS
EAN128OCRUS_Postal1
EAN13PDF417US_Postnet
EAN13_2SuppsPlanetUSPlanet
EAN13_5SuppsPlesseyUSPSS4CB

GO

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

Методы

МетодОписание
void Copy (data)Копирует текст в буфер обмена*
data — строка для копирования
string CreateUid ()Генерирует уникальный строковый GUID
string DecryptForDevice (value)Расшифровывает строку, зашифрованную на этом устройстве
value — строка для дешифрования
string EncryptForDevice (value)Зашифровывает строку. Расшифровать можно только на этом устройстве
value — строка для шифрования
string DecryptForUser (value)Расшифровывает строку, зашифрованную под текущим пользователем
value — строка для дешифрования
string EncryptForUser (value)Зашифровать строку с возможностью расшифровки только под текущим пользователем
value — строка для шифрования
BarcodeData GetBarcodeData (barcode)Возвращает объект для расширенной работы со штрихкодом
barcode — строка, содержащая штрихкод
BarcodeData GetBarcodeData (barcode, type)Возвращает объект для расширенной работы со штрихкодом
barcode — строка, содержащая штрихкод
type — тип штрихкода из списка
void HideWaitMessage ()Закрыть сообщение об ожидании
string NormalizePhoneNumber (phoneNumber)Преобразовывает номер телефона в вариант с +7 вместо 8, вырезает лишние символы
phoneNumber — номер для нормализации
void OpenUrl (url)Открыть URL в браузере
void Play (audio)Воспроизводит звуковой файл
audio — путь к файлу
void Play (audio, vibrate)Воспроизводит звуковой файл
audio — путь к файлу
vibrate — настройка вибрации
void PlayError ()Воспроизводит звук ошибки.
bool SendEmail (email, subject, text)Отправляет письмо на указанную почту *
email — адрес получателя
subject — заголовок письма
text — текст письма
bool SendEmail (email, subject, text, errors)Отправляет письмо на указанную почту *
email — адрес получателя
subject — заголовок письма
text — текст письма
errors — прикрепить к письму логи с устройства
void SendErrorsLog ()Отправка логов на сервер качества*
void Share (data)Поделиться содержимым\*
data — путь к файлу или текст
void ShowBaloon (text, delay, down)Вызывает всплывающее сообщение с указанным текстом
text — текст сообщения
delay — время отображения в мс
down — выводить в нижней части окна *
void ShowErrorBaloon (text, delay, down)Вызывает всплывающее сообщение об ошибке с указанным текстом.
text — текст сообщения
delay — время отображения в мс
down — выводить в нижней части окна *
void ShowWaitMessage (text)Показывает сообщение об ожидании поверх интерфейса
text — отображаемое сообщение. Поддерживает верстку
void ShowWaitMessage (text, canCancel)Показывает сообщение об ожидании поверх интерфейса с настройкой возможности скрыть его по нажатию
text — отображаемое сообщение. Поддерживает верстку
canCancel — можно ли скрыть сообщение нажатием
void Sleep (ms)Делает паузу в процессах на указанное кол-во мс
ms — длительность паузы в миллисекундах
v oid Speak (text)Произносит указанный текст*
text — фраза для воспроизведения
void SpeakRubles (value)Произносит указанную сумму с рублями и копейками\*
value — число для воспроизведения
void WriteError (text)Заносит в лог сообщение с типом ошибка
text — текст сообщения
void WriteInformation (text)Заносит в лог сообщение с типом информация
text — текст сообщения
void WriteWarning (text)Заносит в лог сообщение с типом предупреждение
text — текст сообщения
void WriteLog (text, logType)Заносит в лог сообщение с указанным типом
text — текст сообщения
logType — тип записи в лог (info, warn, error, debug)

\* работает только на Android-устройствах

Примеры использования

Задача 1: Добавить возможность по сканированию определить, содержит ли штрихкод GTIN.

Решение:

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

Разберем пример подробнее:

  • В действии с именем метки «on scan» с помощью объекта типа BarcodeData проверяем, содержит ли отсканированный штрихкод в своем составе GTIN.

  • В действии с именем метки «gs1» выводим всплывающее сообщение в нижней части экрана с информацией о GTIN’e

  • В действии с именем метки «non gs1» выводим всплывающее сообщение об ошибке в нижней части экрана

Задача 2: В полях строк документа есть поле «Barcode», содержащее в себе штрихкод. Необходимо проверить, что в документе нет строк, в которых штрихкод не содержит GTIN.

Решение:

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

Разберем пример подробнее:

  • В структуру полей документа добавляем вычислимое поле с именем «BarcodeData».
  • В шаблоне данного поля прописываем метод получения объекта типа BarcodeData.
  • В действии с именем метки «show» выводим поп-ап, с уведомлением о том, что началась проверка строк документа. Так как строк может быть много проверка может занять некоторое время.
  • Далее в цикле в действии с именем метки «check line» проверяем, содержит ли штрихкод в своем составе GTIN. Если содержит, переходим к следующему элементу.
  • В действии с именем метки «error»
  • Скрываем поп-ап
  • Записываем ошибку в лог
  • Выводим сообщение для пользователя ТСД.
  • Воспроизводим звук ошибки
  • Производим возврат документа
  • Действие с именем «hide» выполняется если проверка документа выполнена без ошибок.

Код примера

Список типов кодировок

AustraliaPostEAN8PosiCode
AztecGRIDMATRIXPostals
BooklandEANGS1_128Postnet
BPOGS1_DATABARQR
CanadaPostGS1_DATABAR_ExpandedRSS
ChinaPostGS1_DATABAR_LimitedRSS14
CodabarGS1_DATABAR_OMNIDIRECTIONALRSSExpanded
CodablockGS1_Databar14RSSLimited
Code11GS1_DATAMATRIXStraight2of5
Code128GS1_QRStraight2of5_IATA
Code128EmultionHANXINStraight2of5_Industrial
Code16kHK25Telepen
Code32IDTagTLC39
Code32_PARAFInterleaved2of5TriopticCode39
Code39ISBT128UKPostal
Code49JapanPostUNKNOWN_TYPE
Code93KoreanPostUPCA
Composite_CCABMatrix2of5UPCA_2Supps
Composite_CCCMaxiCodeUPCA_5Supps
Composite_TLC39MESAUPCE0
CompositeCodeMicroPDFUPCE0_2Supps
CouponCodeMicroQRUPCE0_5Supps
DataMatrixMSIUPCE1
Discrete2of5Mx25UPCE1_2Supps
DOTCODENEC2OF5UPCE1_5Supps
DutchPostNetherlandKIXUPUFICS
EAN128OCRUS_Postal1
EAN13PDF417US_Postnet
EAN13_2SuppsPlanetUSPlanet
EAN13_5SuppsPlesseyUSPSS4CB

MathOperations

MathOperations – тип, содержащий метод, позволяющий округлять числа до нужного количества разрядов после запятой.

Доступные методы:

Имя методаОписание
Round(val, digits, orient)Округляет число до нужного количества разрядов после запятой

Примеры использования

Есть 2 метода округления: до ближайшего чётного и дальше от нуля.

Например, в случае округления дальше от нуля, 3,75 округляется до 3,8, 3,85 округляется до 3,9, -3,75 округляется до -3,8 и -3,85 округляется до -3,9. Это ещё можно назвать округлением в большую сторону.

В случае же округления до ближайшего чётного, как 3,75, так и 3,85 округляются до 3,8 и -3,75 и -3,85 округляются до -3,8.

Если хотите использовать округление до ближайшего чётного, то в качестве переменной orient нужно передавать 0, для округления дальше от нуля - 1

Код:

Число1 = MathOperations.Round(3.85,2,0);

Число2 = MathOperations.Round(3.85,2,1);

В первом случае округляем до ближайшего чётного, во втором дальше от нуля.

Результат:

До ближайшего чётногоДальше от нуля
панель управленияпанель управления

Server​

Server — клиентский тип, с помощью которого осуществляется проверка доступности сервера MS, а также обмен служебными сообщениями. Данный тип недоступен в серверном контексте!

Свойства

СвойствоОписание
bool AvailableУказывает, доступен ли сервер или работа идет в файловом режиме.
bool OnlineУказывает, есть ли подключение к серверу в данный момент.
string UrlВозвращает url сервера, если он есть.

Методы

МетодОписание
bool CheckConnection (timeout)Проверить соединение с сервером.
timeout— время ожидания ответа.
string SendMessage (text, to, isError, ttl)Отправляет сообщение.
text — текст сообщения
to — ID пользователя или группы
isError — отобразить как ошибку
ttl— время жизни сообщения в секундах
string SendSystemMessage (text, isError, ttl)Отправляет системное сообщение.
text— текст сообщения
isError— отобразить как ошибку
ttl — время жизни сообщения в секундах

Пример использования

Задача: сделать так, чтобы любой пользователь ТСД мог отправить администратору уведомление о проблеме.

Решение:

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

Рассмотрим пример подробнее:

  • В действии с именем метки «check» проверяем, что база развернута в серверном режиме.
  • В действии с именем метки «input» вводим текст сообщения, выбираем пользователя, указываем, отобразить сообщение как ошибку или нет.
  • В действии с именем метки «send» производится отправка сообщения на сервер, с которого сообщение будет доставлено пользователю.

Код примера

StringOperations​

StringOperations – тип, содержащий методы, позволяющие работать со строками (обрезать, разбивать, форматировать и т.д.).

Доступные методы:

Имя методаОписание
FillToWidth(s1, s2, totalWidth, c)Объединяет две строки с разделителем между ними, дополняя итоговую строку до нужной длины
FromBase64(valueBase64)Конвертирует строку из Base64 в обычную форму
Join(source, c)Объединяет коллекцию строк, добавляя разделитель между ними
PadCenter(s, totalWidth, c)Дополняет строку с обеих сторон до нужной длины, если она короче
PadLeft(s, totalWidth, c)Дополняет строку слева до нужной длины, если она короче
PadRight(s, totalWidth, c)Дополняет строку справа до нужной длины, если она короче
ParseByTemplate(value, template)Позволяет распарсить строку по шаблону
Split(source, oneSymbolSplitter)Разбивает строку на коллекцию подстрок согласно односимвольному разделителю. Если передан более длинный разделитель, то используется только первый символ
ToBase64(str)Конвертирует строку в Base64 строку
WordWrap(text, width)Форматирует строку переносами по словам под заданную длину строки

Примеры использования

FillToWidth

Код:

Строка = StringOperations.FillToWidth("Строка1","Строка2",17,"|");

Результат:

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

FromBase64

Код:

Строка = StringOperations.FromBase64("V29yZA==");

Строка «V29yZA==» расшифровывается как «Word»

Результат:

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

PadCenter

Код:

Строка = StringOperations.PadCenter("Текст",12,"|");

Очередность добавления символа: сначала справа, потом слева.

Результат:

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

PadLeft

Код:

Строка = StringOperations.PadLeft("Текст",10,"|");

Результат:

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

PadRight

Код:

Строка = StringOperations.PadRight("Текст",10,"|");

Результат:

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

ParseByTemplate

Метод поддерживает любые шаблоны в конфигурации (regex, ячеек, номенклатуры и т.д.).

Код для регулярных выражений:

Строка = StringOperations.ParseByTemplate("4500000023GH67","45{tmp:@[0]*}{Barcode:@[\\w]+}")

Результат:

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

Код для штрихкода:

Строка = StringOperations.ParseByTemplate("(00)AB123","(00){tmp:2}{Barcode:3}");

Результат:

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

Код для совмещённого случая:

Строка = StringOperations.ParseByTemplate("DC000035","DC{tmp:@[0]*}{Barcode:2}");

Результат:

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

Split

Код:

Строка = StringOperations.Split("Текст|для|разбиения","|");

Результат:

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

ToBase64

Код:

Строка = StringOperations.ToBase64("Привет");

Результат:

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

WordWrap

Код:

Строка = StringOperations.WordWrap("Длинный текст для переносов",3);

Результат:

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

UEObject​

Тип предназначен для обработки данных, сохраненных в формате XML или JSON. Доступен в клиентском и серверном контексте выполнения. С помощью данного класса можно разбирать полученные данные, изменять структуру данных и собирать обратно в строку. Сериализация/ десериализация проводится без использования схемы/класса с метадатой.

Доступные поля:

Имя поляОписание
ChildsКоллекция узлов и атрибутов объекта (UEObject)
HasValueЕсть ли значение
IsArrayЭто массив
IsAttributeЭто атрибут
ONameИмя узла
OValueЗначение узла.
Если строка загружена извне, тип по умолчанию — строка.
TypeТип

Доступные методы:

Имя методаОписание
UEObject()Создаёт новый пустой UEObject (в случае XML создаёт атрибут <root>)
UEObject(string)Создаёт новый UEObject с узлом внутри. Атрибут – название узла (для JSON нужно присвоить узлу значение)
FromXml(string)Получить XML строку
FromJson(string, boolean)Получить JSON строку. В качестве аргумента также передаётся наличие префикса «@» у атрибутов
GetAttribute(string)Получить атрибут
GetNode(string)Получить узел
GetNodes(string)Получить несколько узлов
AddNode(string, object)Добавить узел (строку). Аргументы – название узла, его значение (для JSON нужно добавлять значение, либо другой узел)
AddNode(UEObject)Добавить узел (UEObject)
SetAttribute(string, object)Добавить/заменить атрибут. Аргументы – название атрибута, его значение
Contains(string)Содержит ли объект строку
AsBoolean()Сохранить значение в булевой переменной
AsDateTime()Сохранить значение в виде даты
AsDecimal()Сохранить значение в виде десятичной дроби
AsDouble()Сохранить значение в виде числа с плавающей запятой
AsInt32()Сохранить значение в виде целого числа
AsString()Сохранить значение в виде строки
ToXml(bool)Сохранить объект в виде XML
Аргумент – добавлять ли XML декларацию
ToJson(bool)Сохранить объект в виде JSON
Аргумент – добавлять ли префикс «@» к атрибутам

Примеры использования

Создание XML строки

К примеру, если мы хотим создать пустую XML строку, то это можно сделать так:

Объект = new Cleverence.Connectivity.UEObject();
Строка = Объект.ToXml(true);

В этом коде мы создаём объект UEObject, конвертируем его в XML строку с помощью метода ToXml (с добавлением декларации), и заносим строку в переменную «Строка».

Если же нужно создать XML строку с начальным узлом, то нужно написать следующее:

Объект = new Cleverence.Connectivity.UEObject(«НовыйУзел»);
Строка = Объект.ToXml(true);

В данном случае будет создан узел с именем «НовыйУзел» и пустым значением.

Результаты:

Без начального узлаС начальным узлом

Добавление узлов

К примеру, нам необходимо создать подобную XML строку:

<?xml version="1.0" encoding="UTF-8"?>
<ObjectKey1><ObjectKey2>ObjectValue2</ObjectKey2></ObjectKey1>

Это можно сделать так:

Объект = new Cleverence.Connectivity.UEObject();
Объект.AddNode("ObjectKey1", null).AddNode("ObjectKey2", "ObjectValue2");
Строка = Объект.ToXml(true);

В объекте создаётся узел «ObjectKey1», который содержит в себе узел «ObjectKey2» со значением «ObjectValue2».

Результат:

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

Добавление атрибута

Атрибуты добавляются практически также, как узлы. Если в узел нужно добавить атрибут, то необходимо обратиться к узлу и написать метод «SetAttribute». К примеру:

Объект = new Cleverence.Connectivity.UEObject();
Объект.AddNode("ObjectKey1", null).SetAttribute("ObjectAttribute", 15);
Строка = Объект.ToXml(true);

В данном случае мы добавляем в узел «ObjectKey1» атрибут «ObjectAttribute» со значением 15:

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

Получение строки XML

UEObject позволяет не только создавать свои строки, но и также получать их. К примеру, если у нас есть таблица, где хранятся XML строки, то можно вытащить оттуда строку и начать с ней работать. Сделать это можно таким образом:

Объект = new Cleverence.Connectivity.UEObject();
Строка = select first (*) from XML where Item.Ид == "1";
Объект.FromXml(Строка.Значение);
Результат = Объект.ToXml(false);

Здесь мы вытаскиваем из таблицы XML строку с «Ид» равной 1 и записываем её в объект. В конце конвертируем объект в XML строку и записываем в переменную.

Результат:

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

Результат работы кода приведён в нижней части.

Получение узла

Чтобы получить узел с его содержимым нужно написать следующий код:

Объект = new Cleverence.Connectivity.UEObject();
Строка = select first (*) from XML where Item.Ид == "1";
Объект.FromXml(Строка.Значение);
Результат = Объект.GetNode("ObjectKey1").ToXml(false);

В метод GetNode нужно добавить название узла, который необходимо получить. Нам нужен узел «ObjectKey1». Если в узле, где ведётся поиск (в нашем случае «Объект») не будет найден узел с таким именем, то метод вернёт null.

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

В верхней части выводится вся строка

Получение полей узла

Если нужно получить какое-либо поле узла, то это можно сделать следующими способами:

Результат = Объект.GetNode("ObjectKey1").OValue;

Результат = Объект.ObjectKey1.AsDateTime();

Результат = Объект.GetNode("ObjectKey1").OName;

В первых двух случаях мы получаем значение узла. Отличие в том, что в первом случае мы получаем сырое значение узла (строку), а во втором в формате даты. И есть разница между тем, как идёт обращение к узлам: через метод GetNode или напрямую. В последнем же случае мы получаем имя узла.

Сырое значениеВ формате датыИмя узла

Получение атрибута

Получить атрибут с его содержимым можно с помощью метода GetAttribute. Пример:

Результат = Объект.GetNode(«ObjectKey1».GetAttribute(«Object1AttributeKey1»).OValue);

			 Результат = Объект.GetNode(«ObjectKey1».GetAttribute(«Object1AttributeKey1»).OName);

В первом случае получаем значение атрибута, во втором его имя.

ЗначениеИмя

Использование select

UEObject позволяет использовать select. Возьмём в качестве примера предыдущий случай. Можно получить значение атрибута с помощью оператора select:

Значение = select (*) from Объект.ObjectKey1.Childs where Item.OName == "Object1AttributeKey1";
Результат = Значение[0].OValue;

В данном случае мы обращаемся к коллекции Childs у узла ObjectKey1 и ищем в ней строку, у которой имя является именем атрибута «ObjectAttributeKey1». В полученной коллекции мы обращаемся к элементу с индексом 0 и получаем значение нашего атрибута.

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

Работа с JSON

Логика работы с JSON строками идентична с XML, но есть несколько важных моментов:

  1. При создании пустого объекта не добавляется узел «root»
  2. Нельзя создать пустой объект UEObject с начальным узлом
  3. В методах FromJson и ToJson есть булева переменная, отвечающая за наличие префикса «@» у атрибутов. Нужно для обозначения атрибутов в случае конвертации в/из XML.
  4. Если у узла есть и значение и атрибут, то значение записывается в «#text»

Примеры:

Объект = new Cleverence.Connectivity.UEObject();
Объект.AddNode("ObjectKey1", null).SetAttribute("ObjectAttribute", 15);

Создаём объект с узлом «ObjectKey1» и атрибутом «ObjectAttribute» со значением 15.

ToJson(true)ToJson(false)
Объект = new UEObject();
Объект.AddNode("ObjectKey1", "ObjectValue1").SetAttribute("ObjectAttribute", "Attribute");
Строка = Объект.ToJson(true);

Создаём объект с узлом «ObjectKey1» у которого есть и значение и атрибут. Добавляем префикс для атрибута.

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

Взаимные конвертации

XML и JSON строки можно конвертировать между собой. Самое главное – при конвертации из JSON в XML задавать атрибутам префиксы.

Объект = new UEObject();
Объект.AddNode("ObjectKey1", "ObjectValue1").AddNode("ObjectKey2", 15).SetAttribute("ObjectAttribute", "Attribute");
Строка = Объект.ToXml(false);
Объект2 = new Cleverence.Connectivity.UEObject();
Объект2.FromXml(Строка);
Строка2 = Объект2.ToJson(true);

Здесь мы создаём объект с 2-я узлами и атрибутом, в переменную «Строка» записываем XML строку, создаём новый пустой объект и помещаем туда нашу XML строку. В конце, конвертируем 2-ой объект в JSON строку и записываем в «Строка2».

Результаты:

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

Аналогично поступаем в случае конвертации из JSON в XML (не забывая обозначать атрибуты префиксами).

Объект = new Cleverence.Connectivity.UEObject();
Объект.AddNode("ObjectKey1", "ObjectValue1").AddNode("ObjectKey2", 15).SetAttribute("ObjectAttribute", "Attribute");
Строка = Объект.ToJson(true);
Объект2 = new Cleverence.Connectivity.UEObject();
Объект2.FromJson(Строка, true);
Строка2 = Объект2.ToXml(false);

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

Транзакции в таблицах​

Транзакция представляет собой набор действий, необходимых для изменения состояния таблицы. Важная особенность транзакции — изменения по транзакции могут быть либо полностью применены, либо полностью отменены. Как пример — перевод денежных средств с одного счета на другой. Не должно возникнуть ситуации, когда деньги списались с одного счета, но не зачислились на другой.

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

Так как таблицы — отдельные сущности, для каждой таблицы необходимо открывать свою транзакцию. Методы работы транзакций должны быть вызваны у типа таблицы, в которую вносятся изменения.

Методы

МетодОписание
bool BeginTransaction ()Инициализирует транзакцию на основании текущего состояния таблицы. Данные, заносимые в таблицу, доступны только внутри данной транзакции.
bool CommitTransaction ()Применяет изменения, вносимые данной транзакцией.
bool RollbackTransaction ()Отменяет изменения данной транзакции.

Особенности работы

При исполнении серверного кода транзакция может быть открыта неявно. Такая транзакция открывается в момент занесения данных в таблицу. Закрытие транзакции происходит в момент завершения серверной операции. Это сделано для того, чтобы в случае ошибки исполнения операции все занесенные данные были сброшены к состоянию таблицы на момент внесения изменений. При этом, возможность явного открытия транзакции так же присутствует.

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

Пример использования

Задача: Существует глобальная таблица Stock содержащая в себе информацию о количестве товаров в наличии и их размещении. Необходимо переместить 5 единиц товара из одной ячейки в другую в реальном времени.

Решение:

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

\* структура таблицы Stock

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

Рассмотрим решение подробнее:

  • В действии с именем метки «begin» вызываем метод открытия транзакции для таблицы Stock
  • В действии с именем метки «start progress» обрабатываем коллекцию строк объектов типа PackedProduct, а именно:
    • В действии с именем метки «remove» вычитаем количество в строке товара в исходной ячейке
    • В действии с именем метки «add» добавляем вычтенное ранее количество
  • После обработки всех строк вызываем метод применения транзакции к таблице в действии с именем метки «commit»
  • В случае успеха заносим запись в лог о том, что транзакция успешно проведена и завершаем выполнение операции.
  • В случае ошибки применения транзакции вызываем метод отката изменений транзакции в действии с именем метки «rollback», после чего прерываем выполнение операции.

Код примера