Создание пользовательских приложений Mobile SMARTS
Методология разработки в Mobile SMARTS такова, что функционал приложения изначально неотделим от пользовательского интерфейса. Можно считать это отходом от идеалов разделения представления от дизайна, но в этом есть определенный смысл.
Имея определенный опыт в разработке заказных приложений для терминалов сбора данных (ТСД), разработчики «Клеверенс» наблюдали интересную закономерность, когда из ТЗ в ТЗ (хотя они и были составлены совершенно разными специалистами) кочуют примерно одни и те же формочки, отражающие примерно одинаковую логику работы персонала с мобильным устройством. Почти всегда есть окошко логина по паролю или штрихкоду. Просмотр строк задания с колонками требуемого и выполненного количества (план/ факт). Ввод каких-то дат. Сканирование адреса ячейки/ палеты/ коробки. «Esc для отмены, F4 - подтвердить» и т.д.
Еще одним характерным моментом было отличие между формочками «новичков», и теми интерфейсами, которые рисуют «ветераны» автоматизации.
Формочки за авторством «новичков» — перегруженные информацией формы, много мелких полей ввода, на каждом экране какие-то кнопочки — для работы требуют стилуса, хорошего зрения и инженерного образования.
Формочки за авторством «ветеранов» — это минимум текста, очень крупно, никаких кнопок. В первом случае: «для выбора товара отсканируйте ШК с упаковки или нажмите F1 для выбора из списка», во втором: «СКАНИРУЙ ТОВАР».
При этом не нужно забывать, что хотя почти каждое ТЗ для ТСД начинается со скриншотов, экраны устройства — это далеко не сама программа. За любой формочкой кроется большой пласт бизнес-логики, обменов данными и т.п. вещей.
В итоге разработчиками Mobile SMARTS было принято соломоново решение: создать систему, котор ая бы оперировала предопределенным набором наиболее полезных экранных форм с уже готовым отлаженным кодом обработки их поведения.
Каждая такая форма должна конфигурироваться только в тех пределах, в которых это не «сломает» работу приложения. При этом возможности по визуальному оформлению форм никак не ограничиваются, т.к. в платформу внедрен свой рендер HTML + CSS.
Наконец, конкретный набор форм и возможностей по их конфигурированию должен будет расширяться до тех пор, пока большинство ТЗ не смогут быть реализованы в таком виде без ущерба для итогового функционала приложения. Теоретически это путь без конца. На практике он заканчивается с набором определенной критической массы пользователей и приложений.
Программирование интерфейса приложения
Каждое визуальное действие, с которым связана экранная формочка на ТСД, имеет свои индивидуальные настройки, с которыми приходится ознакомиться для того, что составить представление о возможностях по конфигурированию той или иной формы.
Но что общее для всех форм — так это замечательная возможность применения шаблонов текстов и математических выражений. Шаблоны текстов — это возможность указать практически в любом месте вместо статического текста кусок псевдо-HTML, который вычисляется динамически и позволяет оформить/раскрасить по своему усмотрению любой элемент формы. Возможность указать в шаблоне элементы изображений позволяет максимально просто задавать иконки, картинки товаров, фотографии сотрудников и т.п. вещи.
Набор экранных форм
На текущий момент список возможных форм ТСД в Mobile SMARTS следующий:
-
Жесткие формы, составная часть основного приложения
Для примера — показаны четыре основные формы. Помимо них есть форма ввода пароля администратора, форма блокировки экрана и т.п.
Часть форм опциональные, т.е. в зависимости от настроек приложения они могут отсутствовать.
Несмотря на то, что формы называются «жесткими», в последних версиях андроид-клиента Mobile SMARTS присутствует возможность регулировать цвет, форму кнопок, содержимое «шторки» и еще некоторые параметры. Подробнее об этом читайте в статье «Доработка главного меню приложения Mobile SMARTS для Android».
Вход в программу Главное меню 
Опциональное окно. Не отображается, если пользователь в системе только 1 и у него нет пароля.
Обязательное окно. Но набор операций настраиваем для каждой группы пользователей. Можно настроить порядок и вид кнопок.Выбор документа для работы Создание нового документа
Опциональное окно, т.к. документы можно создавать автоматически
при выборе операции в главном меню. Также мо жно разрешать/запрещать ручной выбор, выбор сканированием и т.п.
Опциональное окно. Можно запретить создавать документы на ТСД. Можно настроить автосоздание документа при выборе операции в главном меню. -
Формы действий, из которых можно строить алгоритмы обработки
Порядок, количество, частично внешний вид и особенно поведение — настраиваемы в среде разработки Mobile SMARTS.
Выбор номенклатуры Поле ввода со списком Поля ввода 
Действие «Выбор номенклатуры» любым из
следующих способов (настраиваемо):
сканированием, вводом цифр вручную,
выбором вручную из списка, поиском по
значению переменной, поиском по части
названия.
Действие «Редактирование поля»,
с возможностью отображения
списка вариантов для выбора значения.
Действие «Редактирование полей»,
с возможностью управлять отображением поля
и форматом вводимых значений.Ввод количества Список или таблица Сообщение 
Действие «Ввод количества» номенклатуры.
Позволяет редактировать сразу в нескольких
единицах измерения (в зависимости от номенклатуры), есть
встроенный калькулятор.
Действие «Просмотр записей», с возможностью
задать источник данных, колонки, формат выводимых значений,
реакцию на выбор строки.
Действие «Сообщение», выводит информацию
в духе MessageBox (не путать
с сообщениями, посылаемыми на ТСД в духе ICQ).Ошибка Выбор «Да/Нет» Меню
Действие «Сообщение», в варианте
«Отображать как ошибку (красным) = Да».
Действие «Выбор Да/ Нет»,
позволяет задать пользователю вопрос.
Действие меню из кнопок, подходит
как для собственно меню, так и для
вопросов с несколькими вариантами ответа.Произвольный отчет Фотографирование
Действие произвольного окна с таблицами,
текстами, кнопками. Возможен просмотр
с прокруткой.
Действие фотографирования. Возможность
сделать фотографию, если поддержка такой
функции реализована для конкретного устройства.
Доработка главного меню
Экранные формы главного меню приложения относятся к так называемым жестким формам, правка которых ранее была недоступна. Но сейчас в последних версиях андроид-клиента для приложений Mobile SMARTS это стало возможно.
Чаще всего для внесения изменений во внешний вид приложения потребуется добавить строки кода (см. примеры ниже) в файл global.css, который находится на ПК в папке по пути «C:\ProgramData\Cleverence\Databases\имя вашей базы\Documents» (путь указан по умолчанию). На ТСД этот файл дублируется, и может иметь названия global.css, global.android.css, global.cf.css.
Рассмотрим конкретнее на примере «Магазина 15», что можно изменить во внешнем виде приложения.
Стандартный фон шапки и цвет названия приложения
Потребуется изменить код в файле global.css (global.android.css, global.cf.css):
| Было | Стало |
[CSS] { colorTitle:#EBEBEB; colorSubTitle:#EBEBEB; colorHeader:#993535; colorStatusBar:#7f2a2a; iconColor:white; submenuiconcolor:#808080; } | [CSS] { colorTitle:#928907; colorSubTitle:#EBEBEB; colorHeader:#355899; colorStatusBar:#7f2a2a; iconColor:white; submenuiconcolor:#808080; } |
Внешний вид «шторки»
Для этого потребуется на мобильном устройстве добавить папку FormTemplates в папку нужной вам базы и создать там файл MainMenu.xml, в который записываются следующие строки кода:
[XML]
<?xml version="1.0" encoding="utf-8"?>
<Menu xmlns:clr="http://schemas.cleverence.ru/clr" capacity="16" count="11">
<ChangeFontsAction actionName="Настройки" icon="Set" iconColor="#6A7F8D" />
<DocumentTypeAction actionName="Профиль" documentTypeName="FrontolParams" icon="Q" iconColor="#6A7F8D" />
<DocumentTypeAction actionName="Активировать лицензию" icon="abc_ic_star_black_16dp" documentTypeName="#clinternal_ObtainLicense" />
<Separator />
<ChangeUserInfoAction actionName="Сменить пользователя" icon="ic_book_black_24dp" iconColor="#6A7F8D" />
<ExitAction actionName="Выход" icon="E" iconColor="@null"/
</Menu>
Текст на кнопке обмена
Происходит путем добавления в ту же папку FormTemplates файла MainMenuRefreshButton.html со следующим содержимым:
[HTML]
<div class="__mainmenu_refresh_button_container">
<div>
<table style="width:100%;">
<tr>
<td width="15%" style="text-align:left; vertical-align:middle;padding-left:20dp;"><img tcolor="yes" maxwidth="70" maxheight="70">simple.Refresh</img>
</td><td style="text-align:left; vertical-align:middle;"><span class="list_name">
\{__NotSendDocCount>0:Измененный текст, когда есть документы;Измененный текст, когда нет документов\}</span></td>
</tr>
</table>
</div>
</div>