openedge mobile - разработка мобильных приложений

41
2014 Valeriy G. Bashkatov Version: 1.0 OpenEdge Mobile - разработка мобильных приложений

Upload: others

Post on 29-Nov-2021

33 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenEdge Mobile - разработка мобильных приложений

2014

Valeriy G. Bashkatov

Version: 1.0

OpenEdge Mobile - разработка мобильных приложений

Page 2: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 1

Оглавление ВВЕДЕНИЕ .......................................................................................................................................................... 2

RUN-TIME АРХИТЕКТУРА ................................................................................................................................... 3

Поддерживаемые типы мобильных приложений .................................................................................... 3

Клиентский доступ к AppServer с использованием мобильных сервисов .............................................. 5

Доступ к AppServer-классам и процедурам через объекты JavaScript ..................................................... 7

Доступ к мобильным сервисам с пользовательским подключением ................................................... 10

Загрузка JSDO-каталога .......................................................................................................................... 10

Single Sign-On в AppServer ...................................................................................................................... 11

АРХИТЕКТУРА РАЗРАБОТКИ И ИНСТРУМЕНТЫ ............................................................................................. 12

Создание Mobile-проекта .......................................................................................................................... 12

Создание мобильных сервисов ................................................................................................................. 12

Публикация мобильных сервисов ............................................................................................................ 14

Создание мобильных приложений ........................................................................................................... 14

Параметры развёртывания ........................................................................................................................ 15

ПРОСТЕЙШЕЕ МОБИЛЬНОЕ ПРИЛОЖЕНИЕ .................................................................................................. 16

Первоначальная настройка ....................................................................................................................... 16

Создаем первый мобильный проект ........................................................................................................ 19

Подключаем базу данных к AppServer ..................................................................................................... 23

Создаем Include-файл................................................................................................................................. 24

Создаем бизнес-сущность ......................................................................................................................... 25

Создаем мобильное приложение ............................................................................................................. 27

Добавляем JSDO-сервис в клиентскую часть ........................................................................................... 30

Сборка и тестирование мобильного приложения ................................................................................... 33

Решение возможных проблем .................................................................................................................. 35

В Developer Studio ................................................................................................................................... 35

В Mobile App Builder................................................................................................................................ 35

Web Browser ............................................................................................................................................ 36

Общее ...................................................................................................................................................... 36

РАЗВЁРТЫВАНИЕ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ........................................................................................... 37

Упаковка и развертывание мобильных сервисов ................................................................................... 37

Упаковка и развертывание приложений для Android ............................................................................. 38

Упаковка и развертывание приложений для iOS .................................................................................... 39

ЗАКЛЮЧЕНИЕ .................................................................................................................................................. 40

Page 3: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 2

ВВЕДЕНИЕ OpenEdge Mobile позволяет создавать полноценные мобильные приложения, включая

пользовательский интерфейс мобильного клиента с доступом к бизнес-логике и данным через

AppServer, которые можно развернуть на различных популярных мобильных и WEB устройствах и

платформах:

Устройства Apple iOS, такие как iPhone и iPad.

Android-устройства, в том числе многочисленные смартфоны и планшеты от разных

производителей.

WEB-браузеры, работающие на большом количестве различных компьютеров и мобильных

устройствах.

Сервер Apache Tomcat Web для REST-доступа к AppServer.

OpenEdge Mobile поддерживает разработку для двух базовых типов пользовательских интерфейсов

(Mobile App):

Mobile Web App – приложения, исполняемые в Web-браузере на различных платформах и

устройствах.

Mobile Native App – приложения, создаваемые также как и Web-приложения, но собранные в

специальные контейнеры с использованием гибридных технологий, которые позволят им

работать как «родное» приложение на мобильном устройстве.

Вы можете создавать и тестировать все компоненты приложения в сквозном режиме, включая

AppServer и соответствующие Мобильные сервисы, Мобильное приложения и Web-транспорт между

ними, и всё это с использованием инструментов OpenEdge Mobile доступных через Progress Developer

Studio for OpenEdge (Developer Studio). Когда разработка вашего приложения будет завершена, вы

можете развернуть все необходимые компоненты приложения на поддерживаемых мобильных

устройствах и любых WEB-платформах.

Далее возможности OpenEdge Mobile будут описаны более подробно с технической точки зрения,

затем мы вместе создадим простейшее мобильное приложение, и, в завершении, вы узнаете о

способах публикации мобильного приложения.

Page 4: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 3

RUN-TIME АРХИТЕКТУРА Схемы, приведенные в этом разделе, содержат подробное описание run-time архитектуры OpenEdge

Mobile, где затемненные и цветные элементы обозначают компоненты OpenEdge. Обратите

внимание, эти схемы описывают мобильные приложения, построенные в основном с помощью

компонентов OpenEdge Mobile от начала до конца, включая транспорт OpenEdge REST. Тем не менее,

из любого мобильного приложения, вы также можете получить доступ к не-OpenEdge REST Web-

сервисам, используя соответствующие прямые вызовы к существующим REST-ресурсам.

Поддерживаемые типы мобильных приложений На рисунке 1 представлена основная сквозная run-time архитектура для двух типов мобильных

приложений, поддерживаемых в OpenEdge Mobile:

1. Mobile Native App – работающие непосредственно под управлением OS мобильного

устройства

2. Mobile Web App – работающие в Web-браузере на любой аппаратной платформе

Рисунок 1: Run-time архитектура OpenEdge Mobile для Native- и Web-приложений

Различие между этими типами заключается в том, как HTML и JavaScript разворачиваются и

исполняются на стороне клиента. Для приложений типа Mobile Native App, файлы HTML и JavaScript

размещаются в онлайн-магазинах Apple iOS и Android, т.е. они должны быть загружены и

установлены непосредственно на мобильное устройство, где они будут исполняться в рамках

«родного» контейнера конкретного устройства. Для приложений типа Mobile Web App, файлы HTML

и JavaScript размещаются на Web-сервере (A) для загрузки и исполнения в Web-браузере (B) так же,

Page 5: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 4

как и любое иное HTML Web-приложение. Тем не менее, интерфейс приложения может быть

разработан с возможностью адаптации к работе в Web-браузерах на мобильных устройствах.

Как видно на рисунке 1, оба типа мобильных приложений используют те же самые мобильные

сервисы (Mobile Service) для доступа к серверу приложений (AppServer). Мобильный сервис

поддерживает набор мобильных ресурсов, которые предоставляют Web-доступ к сервисам ABL-

приложения на сервере приложений.

Мобильный интерфейс (Mobile Interface) представляет собой ABL API для единственного

Мобильного ресурса, который может быть реализован либо в виде singleton1-процедуры, либо в

виде singleton-класса. Мобильный ресурс предоставляет доступ к одной временной таблице (temp-

table) или к одному набору ProDataSet состоящему из одной или нескольких временных таблиц, при

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

приложений для чтения и изменения данных. Мобильный ресурс также может обеспечить доступ к

дополнительным AppServer-процедурам для работы с прочими данными сервера приложений, или

для работы с теми же данными временной таблицы или набора ProDataSet в качестве встроенных

операций, но с использованием других путей.

OpenEdge JavaScript Data Object (JSDO) – представляет собой экземпляр класса OpenEdge JavaScript

(progress.data.JSDO), который обеспечивает доступ к данным и операциям единственного

мобильного ресурса. Мобильное приложение вызывает методы JavaScript из JSDO для выполнения

мобильных операций на сервере приложений. Данные для этих операций сериализированы2 между

мобильным приложением и веб-сервером в виде JSON (JavaScript Object Notation).

Приложение OpenEdge Mobile Web предоставляет транспорт (REST через HTTP) для связи между

работающим JSDO в мобильном приложении и мобильным ресурсом, который поддерживает

приложение. Развернутое мобильное веб-приложение и REST-транспорт, включая безопасность

приложения, могут управляться с помощью тех же инструментов OpenEdge, которые используются

для управления любым OpenEdge REST Web-приложением. Обратите внимание, что одно мобильное

веб-приложение обеспечивает доступ к мобильным ресурсам, реализованным одним OpenEdge

AppServer (или одним сервисом приложения с балансировкой нагрузки).

1 Singleton - порождающий шаблон проектирования, гарантирующий что в однопоточном приложении будет

единственный экземпляр класса с глобальной точкой доступа 2 Сериализация - процесс перевода какой-либо структуры данных в последовательность битов.

Page 6: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 5

Клиентский доступ к AppServer с использованием мобильных сервисов Рисунок 2 показывает, как OpenEdge JSDO осуществляет доступ к мобильному ресурсу, который

работает одинаково для заданного JSDO независимо от типа приложения.

Каждый JSDO, созданный для мобильного приложения, может получить доступ к одному

мобильному ресурсу из состава мобильных ресурсов, предоставляемых соответствующим

мобильным сервисом мобильного веб-приложения. Одно мобильное веб-приложение может

поддерживать один или несколько мобильных сервисов, а веб-сервер Apache Tomcat может

разместить несколько мобильных веб-приложений.

На рисунке 2, мобильное веб-приложение содержит два мобильных сервиса, Inventory и

OrderIntry. Сервис OrderEntry содержит два мобильных ресурса, Orders и Customers, которые

реализованы в виде ABL-классов Orders.cls и Customers.cls, и к которым, соответственно, на

стороне клиента обеспечивают доступ Orders JSDO и Customers JSDO.

Примечание. Разделение ресурсов в рамках сервиса OrderEntry приведено только для

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

с записями таблицы Order, а второй с записями таблицы Customer. На практике, эти временные

таблицы могут быть объединены с использованием ProDataSet, который предоставит доступ одного

JSDO к одному мобильному ресурсу.

Обратите внимание, веб-приложение OpenEdge Mobile инсталлируется и запускается в контейнер

Apache Tomcat Java подобно веб-приложению OpenEdge REST, и им можно управлять теми же

инструментами OpenEdge. Аналогично, сервис OpenEdge Mobile очень похож на веб-сервис OpenEdge

REST. Различия между ними заключаются в том, как мобильный сервис предоставляет ресурсы

мобильному приложению.

Рисунок 2: Доступ к сервисам и ресурсам OpenEdge Mobile

Page 7: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 6

Веб-сервис OpenEdge REST идентифицирует каждый ресурс по уникальному URI3, к которому REST-

клиент отправляет явный HTTP-запрос, в результате чего вызывается соответствующая процедура на

сервере приложений. Веб-сервис REST затем возвращает результаты работы AppServer-процедуры

REST-клиенту в виде HTTP-ответа, который клиент должен интерпретировать согласно требованиям

соответствующего веб-сервиса REST.

Сервис OpenEdge Mobile, в отличие от OpenEdge REST веб-сервиса, представляет указанные данные и

программы singleton-класса сервера приложений или процедурные объекты как данные и операции

единственного мобильного ресурса и мапирует4 операции для этого ресурса непосредственно к

соответствующим JavaScript-методам одного JSDO. Мобильный сервис выполняет маппинг с

помощью файла каталога JSDO, который генерируется для сервиса в момент его создания. Такой

JSDO-каталог представляет собой JSON-файл, содержащий информацию о схеме данных и операциях,

которые поддерживает каждый мобильный ресурс в сервисе. Следовательно, мобильное

приложение должно загрузить этот JSDO-каталог для мобильного сервиса прежде, чем будет создан

JSDO для доступа к любому мобильному ресурсу предоставляемому сервисом.

Таким образом, мобильное приложение вместо того, чтобы идентифицировать URI, отправлять HTTP-

запросы и интерпретировать HTTP-ответы по правилам соответствующего REST-ресурса (вызов

AppServer-процедур), должно лишь вызвать соответствующий метод или методы из JSDO для

выполнения связанных ABL-процедур из класса или процедурного объекта на сервере приложений.

Всеми входными и выходными параметрами и прочими результатами работы ABL-процедуры

обмениваются с JSDO и его JavaScript-методами в виде соответствующих свойств JavaScript-объектов,

которые мобильное приложение передает и возвращает из JDSO и его методов.

3 URI (англ. Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса.

4 Мапирование (иногда маппинг) — определение соответствия данных между потенциально различными

семантиками одного объекта или разных объектов.

Page 8: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 7

Доступ к AppServer-классам и процедурам через объекты JavaScript На рисунке 3 более детально демонстрируется как мобильный сервис маппирует операции одного

мобильного ресурса к методам JSDO в мобильном приложении на стороне клиента и к ABL-

процедурам singleton-объекта на стороне сервера приложений.

Рисунок 3: Доступ к AppServer-данным и бизнес-логике из мобильного приложения

На рисунке объект singleton-класса Customers предоставляет ABL-методы для выполнения операций

мобильного ресурса Customers. На рисунке проиллюстрированы все операции, которые доступны

для мобильного ресурса. Стандартными, встроенными, мобильными операциями являются Create,

Read, Update и Delete (также известны как операции CRUD). Вы можете использовать Developer Studio

для аннотирования ABL-подпрограмм соответствующего мобильного интерфейса, который их

реализует. Для каждой встроенной мобильной CRUD-операции вы можете аннотировать только одну

ABL-подпрограмму как реализацию ABL-метода. Все ABL-подпрограммы, реализованные как

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

таблицы (temp-table) или ProDataSet-параметра. Кроме того, реализация операции чтения должна

предоставлять начальный входной параметр (CHARACTER) с именем filter (см. таблицу). Для

невстроенных вызовов операций вы можете аннотировать любое количество ABL-процедур с

использованием любых поддерживаемых ABL-сигнатур. Тем не менее, ABL-процедуры,

аннотированные как вызываемые операции не могут одновременно быть аннотированы для

реализации встроенных CRUD-операций.

Page 9: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 8

Следующая таблица содержит список необходимых параметров для ABL-подпрограмм (методы

классов, внутренние процедуры, или пользовательские функции), которые реализуют встроенные

мобильные CRUD-операции.

Встроенные операции

Список необходимых параметров для ABL-подпрограмм5

create INPUT-OUTPUT { TABLE table-name | DATASET dataset-name

| TABLE-HANDLE table-hdl | DATASET-HANDLE dataset-hdl }6

read

INPUT filter7 AS CHARACTER ,

OUTPUT { TABLE table-name | DATASET dataset-name

| TABLE-HANDLE table-hdl | DATASET-HANDLE dataset-hdl }6

update

INPUT-OUTPUT { TABLE table-name | DATASET dataset-name

| TABLE-HANDLE table-hdl | DATASET-HANDLE dataset-hdl }6

delete

INPUT-OUTPUT { TABLE table-name | DATASET dataset-name

| TABLE-HANDLE table-hdl | DATASET-HANDLE dataset-hdl }6

Как показано на рисунке 3 для ресурса Customer, когда вы создаете JSDO для этого ресурса, JSDO

предоставляет JavaScript-методы, которые связываются с каждой мобильной операцией,

определенной для этого ресурса. Каждый JSDO поддерживает одинаковый набор встроенных

методов для вызова встроенных мобильных операций. Например, вызов метода fill() всегда

выполняет мобильную операцию чтения, которая в этом случае реализована ABL-методом

ReadCustomers(). Эта операция возвращает все записи временной таблицы, предоставляемые

соответствующей ABL-подпрограммой, и сохраняет их во внутреннее хранилище данных JSDO,

которое называется локальное хранилище JSDO (JSDO local storage).

Локальное хранилище JSDO всегда соответствует схеме поддерживаемой JSDO-ресурсом, как это

определено в каталоге JSDO для мобильного сервиса. Поэтому, если ресурс JSDO поддерживает

единственную схему временной таблицы, то и локальное хранилище JSDO будет хранить записи,

полученные из единственной временной таблицы. Если схема представлена в виде единого набора

ProDataSet, то сохраняются все записи, возвращенные для всех временных таблиц ProDataSet, для

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

Для обновления контекста своего локального хранилища JSDO поддерживает дополнительные

встроенные методы. Например, метод add() в JSDO создает новую запись в локальном хранилище

JSDO. Аналогично, метод assign() обновляет, а метод remove() удаляет существующие записи в

5 Если реализуемая ABL-подпрограмма является методом класса, то возвращаемый тип должен быть VOID.

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

реализации должны разделять параметры TABLE, TABLE-HANDLE, DATASET или DATASET-HANDLE с точно такой же временной таблицей или схемой ProDataSet. Примечание: Схема любого параметра ProDataSet (DATASET или DATASET-HANDLE) может не иметь связанных данных, определенных опцией NESTED. 7 Параметр filter передается в виде строки в запросе, и предназначен для фильтрации записей, возвращаемых

для временной таблицы или ProDataSet-параметра в операциях чтения. Подпрограмма ABL может использовать этот параметр в любых целях, либо полностью игнорировать его. Обратите внимание, для связывания ABL-подпрограммы, реализующей встроенную операцию чтения, и для метода JavaScript, вызывающего эту операцию, вы должны в сигнатуре ABL-подпрограммы для этого параметра использовать имя filter.

Page 10: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 9

локальном хранилище JSDO. Когда мобильное приложение вызывает встроенный метод JSDO

saveChanges(), то выполняется соответствующая встроенная мобильная операция (Delete, Create,

или Update), по одной за раз для каждой записи, которая была изменена в локальном хранилище.

Что произойдет с записью на AppServer при выполнении конкретной операции, полностью зависит от

реализации ABL-подпрограммы. На рисунке 3 подпрограммы, которые реализуют эти встроенные

операции на стороне AppServer`а, это DeleteCustomer(), CreateCustomer() и UpdateCustomer(),

соответственно.

Для встроенных CRUD- операций JSDO всегда выполняет вызываемые методы асинхронно и

поддерживает события, на которые мобильное приложение может подписать функции для

обработки результата. Эти результаты возвращаются в OpenEdge-объекте (объект запроса) со

свойствами, которые зависят от результата работы и события. Таким образом, каждая ABL-

подпрограмма, которая реализует встроенные операции, может возвратить ошибку и ту же (или её

модифицированную версию) запись, которую она получила, в зависимости от того, успешно или нет,

была выполнена операция. Объект запроса, возвращающий эти результаты, поддерживает большое

разнообразие успешных и неуспешных вариантов ответов, которые могут быть определены для

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

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

JSDO.

Для вызываемых невстроенных операций каждая ABL-подпрограмма принимает и возвращает

собственные входные и выходные параметры, возвращаемые значения не оказывают влияния на

локальное хранилище JSDO. Каждая вызываемая операция позволяет параметрам и любым

возвращаемым значениям быть переданными в соответствии с требованиями реализуемой ABL-

подпрограммы. Входящие параметры передаются как входящие свойства объекта JavaScript, а все

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

возвращаются в выходном объекте запроса подобно объекту, возвращаемому для встроенных

операций.

Чтобы выполнить операцию вызова, мобильное приложение вызывает соответствующий JSDO-

метод вызова (JSDO invocation method), который выполняет соответствующую ABL-подпрограмму. По

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

вызова с использованием той же сигнатуры с добавлением логического (Boolean) параметра со

значением false. Например, на рисунке 3 обращение к методу вызова getCreditHIstory() на JSDO

выполняет метод GetCreditHistory() на AppServer`е. Если getCreditHIstory() вызывается

асинхронно, то результирующий JavaScript объект запроса будет возвращен в мобильное

приложение как параметр некоторой функции подписанной в качестве обработчика

соответствующего JSDO-события. Если же вызывать синхронно, то getCreditHIstory() вернет тот же

JavaScript объект запроса как возвращаемое значение метода.

Page 11: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 10

Доступ к мобильным сервисам с пользовательским подключением На рисунке 3 представлен JSDO каталог для сервиса OrderEntry, который предоставляет

возможность JavaScript-методам Customers JSDO выполнять ABL-методы класса Customers для

реализации операций Customers- ресурса. Прежде чем создать и использовать JSDO для доступа к

мобильному ресурсу, мобильное приложение OpenEdge должно подключиться к соответствующему

мобильному веб-приложению и загрузить файл каталога для мобильного сервиса, который

предоставляет ресурс.

В зависимости от настроек безопасности Web-сервера и мобильного веб- приложения, мобильное

приложение может подключиться к веб-приложению с указанием на Web-сервер, родной контейнер

устройства, или браузер, или используя метод login() класса OpenEdge JavaScript -

progress.data.Session. Если мобильное приложение успешно подключилось до вызова метода

login(), мобильному приложению по-прежнему необходимо вызвать метод для того, чтобы

установить сеанс подключения с мобильным веб- приложением и загрузить свои файлы JSDO-

каталога.

Чтобы использовать объект Session для установления пользовательского подключения, мобильное

приложение создает экземпляр класса и вызывает метод login() на этом экземпляре, передавая

URI мобильного веб-приложения и дополнительные данные пользователя в качестве параметров.

Точная последовательность подключения пользователя зависит от конфигурации безопасности веб-

сервера, типа мобильного приложения, дизайна и платформы, а также о того, как ресурсы

мобильного веб-приложения защищены на веб-сервере. Например, если необходимые учетные

данные пользователя уже прошли проверку подлинности перед вызовом этого метода, любые

учетные данные пользователя, передаваемые в метод, игнорируются.

Загрузка JSDO-каталога

Как только метод login() для объекта Session успешно вызван для мобильного веб-приложения

OpenEdge, мобильное приложение может вызвать метод addCatalog() объекта Session, чтобы

загрузить JSDO-каталог для каждого мобильного сервиса в мобильном веб-приложении, к которому

оно должно получить доступ. Каждый JSDO-каталог имеет URI, который вы передаёте в этот метод

наряду с дополнительными учётными данными пользователя в случае, если каталог требует

отдельной аутентификации пользователя. Обратите внимание на то, что по умолчанию имя файла

JSDO-каталога это имя мобильного сервиса для которого был создан каталог. В силу вышесказанного,

имя файла и его расширение имеют следующий формат – service-name.json. После того, как

пользовательское подключение успешно установлено, и все необходимые JSDO-каталоги загружены,

мобильное приложение может вызывать операции для всех авторизованных мобильных сервисов и

ресурсов.

Обратите внимание, мобильные сервисы и ресурсы в мобильном веб-приложении защищены с

помощью Spring Security framework, который устанавливается вместе с OpenEdge для защиты

мобильных и REST Web приложений. Для получения дополнительной информации об использовании

Spring Security для защиты мобильных и REST Web приложений, см. раздел управления

безопасностью REST-приложений в документации, книга «OpenEdge Application Server:

Administration».

Page 12: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 11

Single Sign-On в AppServer

В OpenEdge AppServer для подключения пользовательской сессии поддерживается Single Sign-On

(SSO), настройка которого зависит от конфигурации безопасности мобильного веб-приложения

OpenEdge. При правильной настройке и после проверки мобильным веб-приложением подлинности

пользовательского подключения, приложение создает объект SSO Client-principal, который

передается в AppServer с каждым AppServer-запросом генерируемым JSDO. Этот объект (client-

principal) содержит пользовательский идентификатор, используемый для входа в мобильное

приложение, и уникальный идентификатор сессии. В свою очередь, AppServer получает доступ к

client-principal-атрибуту CURRENT-REQUEST-INFO системного дескриптора SESSION и использует его

для установления SSO-подключения для текущего запроса.

Сведения о настройке мобильного веб-приложения с поддержкой SSO Client-principal в AppServer для

каждого запроса, см. в разделе поддержки SSO для REST-приложений в документации по OpenEdge,

книга «OpenEdge Application Server: Administration». Для получения дополнительной информации о

доступе к SSO Client-principal на AppServer`е, см. описание атрибута CURRENT-REQUEST-INFO в

документации по OpenEdge, книга «OpenEdge Development: ABL Reference», и в разделе,

посвященному созданию подключения для сессии и пользовательского контекста, в книге «OpenEdge

Application Server: Developing AppServer Applications».

Page 13: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 12

АРХИТЕКТУРА РАЗРАБОТКИ И ИНСТРУМЕНТЫ На рисунке 4 представлена архитектура разработки и инструменты OpenEdge Mobile.

Рисунок 4 OpenEdge Mobile: архитектура разработки и инструменты

Набор средств разработки OpenEdge Mobile состоит из двух основных компонент:

Progress Developer Studio for OpenEdge (Developer Studio) – основной инструмент разработки

OpenEdge, разворачиваемый на вашем компьютере, в котором инициируется разработка всех

приложений OpenEdge Mobile.

Progress OpenEdge Mobile App Builder – облачный сервис для визуализации и завершающего

кодирования мобильных приложений для всех поддерживаемых типов платформ (Web и

Native App). Этот инструмент предоставляет встроенные JSDO-сервисы, помогающие

выполнять связку локального хранилища JSDO с элементами пользовательского интерфейса

мобильного приложения. Как только мобильное приложение будет готово к тестированию,

вы можете запустить мобильное приложение в эмуляторе для выбранной платформы.

Создание Mobile-проекта Создание мобильных сервисов и приложений выполняется в мобильном проекте, представляющим

собой разновидность OpenEdge-проекта в Developer Studio. Вы можете создать мобильный проект

либо как новый проект, либо путем добавления необходимых аспектов для исполнения мобильных

функций в существующий OpenEdge- проект. Также, когда вы в первый раз создаете мобильный

проект, вам необходимо ввести данные Progress ID в Developer Studio для обеспечения связи с Mobile

App Builder. Это позволяет мобильному проекту, размещенному локально в Developer Studio,

обмениваться файлами и данными с соответствующим проектом Mobile App Builder в облаке.

Создание мобильных сервисов Как только вы создали мобильный проект в Developer Studio, вы можете приступить к созданию

мобильных сервисов. В зависимости от того, каких целей вы хотите достичь, вы можете начать с

настройки соединения с базой данных для своего проекта и настройки соединения с базой данных

для OpenEdge AppServer (за пределами Developer Studio), который ассоциирован с настройками

AppServer в проекте. Кроме того, при разработке исходного ABL- кода для мобильных ресурсов,

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

AppServer`ом.

Page 14: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 13

Как отмечалось ранее, каждый мобильный ресурс создается из мобильного интерфейса, который

определяет ABL API для этого ресурса в виде одного файла класса или процедуры. Этот класс или

процедура должен быть закодирован как singleton-объект, который мобильное приложение создает

на AppServer`е для работы с соответствующим ресурсом данного мобильного сервиса. Вы можете

использовать специальный мастер настройки в Developer Studio для создания мобильного

интерфейса одним из следующих способов:

С помощью мастера New Business Entity, для создания нового класса бизнес-сущности

(Business entity class) из модели данных основанной на одной временной таблице или наборе

временных таблиц в ProDataSet. Создание класса бизнес-сущности определяет набор по

умолчанию методов ABL-класса, каждый из которых реализует операции Create, Read, Update

или Delete (CRUD-операции) с указанной моделью данных. Кроме того, у вас могут быть

новый класс бизнес-сущности и его методы, автоматически аннотируемые, чтобы определить

интерфейс для встроенных операций мобильного ресурса. Затем вы вручную должны

закодировать тело каждого ABL-метода, чтобы реализовать функциональность каждой

операции. После чего вы можете непосредственно использовать этот новый аннотированный

класс бизнес-сущности, чтобы определить один ресурс в мобильном сервисе.

С помощью мастера Define Service Interface аннотировать ABL-процедуры существующих

файлов класса или процедуры, основываясь на соответствующей модели данных временной

таблицы или набора ProDataSet. Это может быть файл класса или процедуры, который уже

закодирован как singleton, включая существующий класс бизнес-сущности, который еще не

аннотирован как мобильный интерфейс. Это позволяет определить мобильный интерфейс из

существующего App-Server- кода, или определить невстроенные вызываемые операции,

например, в существующем классе бизнес-сущности, который в настоящее время имеет

только описанные встроенные CRUD-операции. В любом случае, как только файл

существующего класса или процедуры аннотирован соответствующим образом, вы можете

использовать его для определения одного мобильного ресурса в мобильном сервисе.

Внимание! Developer Studio полагается на мастера настройки, чтобы аннотировать все файлы

классов и процедур в виде файлов мобильного интерфейса для правильного определения ресурсов

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

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

После того, как вы закодировали и аннотировали все файлы классов и процедур, необходимые для

определения ресурсов мобильного сервиса, вы можете создать сервис в Developer Studio с помощью

мастер настройки New Mobile Service, чтобы выбрать мобильные ресурсы для включения в этот

сервис. Как только вы завершите работу с этим мастером, Developer Studio создаст мобильный

сервис наряду с его файлом JSDO-каталога.

Page 15: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 14

Публикация мобильных сервисов Для создания мобильного приложения для доступа к созданным вами мобильным сервисам вы

можете опубликовать эти сервисы на встроенном Web- сервере (OE Web Server), который установлен

вместе с OpenEdge, и представляет собой веб-сервер Apache Tomcat, настроенный для работы как с

мобильным веб- приложением OpenEdge, так и с OpenEdge REST Web-приложением. При публикации

мобильных сервисов, вы упаковываете их в WAR-файлы, которые содержат мобильное веб-

приложение с одним или более мобильным сервисом, включая JSDO-каталоги и связанные

артефакты и мобильное приложение, которые и будут развернуты на веб-сервере. Для упаковки

ваших мобильных сервисов (наряду с любыми ассоциированными мобильными приложениями) в

WAR-файл и их последующей публикации на OE Web Server`е соответствующие инструменты

предоставляет Developer Studio. По умолчанию Tomcat настроен таким образом, чтобы мобильное

веб – приложение и его мобильные сервисы устанавливались автоматически, и были доступны из

любого авторизованного мобильного приложения.

Создание мобильных приложений Как ранее было описано, Progress OpenEdge Mobile App Builder это основной инструмент OpenEdge

Mobile для создания мобильных приложений. Он размещен в облаке и может быть запущен в любом

внешнем веб-браузере, который поддерживает HTML5, и который вы можете настроить для запуска

Mobile App Builder из Developer Studio. Когда с помощью этого инструмента вы создаете мобильное

приложение, то вы разрабатываете и создаете пользовательский интерфейс и JavaScript для доступа

к мобильным сервисам и связанным JSDO-каталогам, которые ранее вы опубликовали на OE Web

Server. Во время разработки и кодирования пользовательского интерфейса в Mobile App Builder, в

рамках проекта мобильного приложения создаются HTML- и JavaScript- файлы, которые также

размещаются в облаке и которые доступны вашему мобильному проекту в Developer Studio на вашем

компьютере.

Инструмент Mobile App Builder позволяет вам визуально разрабатывать пользовательский интерфейс

мобильного приложения с помощью технологии drag-and-drop аналогично тому, как используется

Visual Designer в Developer Studio для создания пользовательского интерфейса в .Net. Он также

предоставляет различные шаблоны для разработки HTML-страниц для конкретных типов устройств,

таких как смартфон или планшет. Вы также можете добавлять JavaScript при кодировании различных

событий на элементах HTML-страницы. В Mobile App Builder вам также предоставляется встроенный

код сервисов (JSDO-сервисов) для связки JSDO-данных c HTML-элементами на основе мобильных

ресурсов, которые вы намереваетесь использовать из выбранных файлов JSDO-каталога.

Когда вы будете готовы к тестированию, в Mobile App Builder вы можете опубликовать файлы HTML и

JavaScript для мобильного приложения в вашем локальном мобильном проекте в Developer Studio,

где затем их можно будет опубликовать на OE Web Server. Функция тестирования в Mobile App

Builder запускает эмулятор на основе типа мобильного приложения, которое вы строите (мобильное

веб-приложение, или родное мобильное приложение для устройств на базе iOS или Android), и

таким образом вы можете посмотреть, как работает приложение на соответствующей платформе, но

отображаемое в вашем HTML5-веб-браузере. Для приложений, предназначенных для работы на

мобильных устройствах в качестве родных приложений (Mobile Native App), у вас также есть

возможность упаковать их в специальный файл развертывания на мобильном устройстве (IPA для

Apple iOS или APK для Android), который можно установить для тестирования на соответствующее

мобильное устройство.

Page 16: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 15

Параметры развёртывания Для промышленного развертывания, параметры развертывания в основном состоят из того, что

можно развернуть на веб-сервере Apache Tomcat (предпочтительно OE Web Server) и что нужно для

развертывания в Mobile App Store, чтобы скачивать и устанавливать приложение на мобильное

устройство, и конечно из соображений безопасности для всего этого.

Как минимум, вы можете развернуть мобильные сервисы для одного мобильного приложения на

веб-сервере, как правило, всё в одном WAR-файле мобильного веб-приложения. Если вы

разворачиваете мобильное веб- приложение для доступа через веб-браузер на мобильном

устройстве, вы можете развернуть либо в тот же WAR-файл с вашими мобильными сервисами, если

вы используете тот же веб-сервер, либо в отдельный WAR-файл веб-приложения, если вам нужно

мобильное приложение для загрузки с другого веб-сервера.

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

(Mobile Native App), необходимо упаковать его в IPA-файл для приложений Apple iOS и APK-файл для

приложений Android, чтобы развернуть их в соответствующем магазине приложений (App Stores).

Каждый тип такого приложения имеет дополнительные требования для развертывания, которые

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

На все встроенные мобильные приложения (Mobile Native App) и мобильные веб- приложения

(Mobile Web App), развернутые на веб-сервере отличном от веб-сервера, на котором вы развернули

свои мобильные сервисы, оказывает влияние необходимость использования абсолютных URI для

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

поддерживать отдельные JavaScript-источники для различных сред, в которых вы разворачиваете эти

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

промышленного развертывания.

Вопросы безопасности должны быть обозначены на этапе разработки мобильного приложения, так

как дизайн мобильного приложения может повлиять на параметры безопасности в дальнейшем.

Некоторые важные решения относительно безопасности вы можете принять во время разработки

мобильного приложения, которые затем могут быть продублированы во время развертывания

мобильных сервисов. Другие вопросы безопасности, особенно касающиеся пользовательских

элементов управления, можно настроить только во время промышленного развертывания.

Page 17: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 16

ПРОСТЕЙШЕЕ МОБИЛЬНОЕ ПРИЛОЖЕНИЕ В этой главе мы по шагам создадим простейшее мобильное приложение. Для этого мы разработаем

простой мобильный сервис с доступом к базе данных OpenEdge, используя Progress Developer Studio

for OpenEdge. А также используем Progress OpenEdge Mobile App Builder для разработки простого

мобильного интерфейса, который будет иметь доступ к этому сервису для отображения информации

из базы данных.

Первоначальная настройка При первом старте Progress Developer Studio for OpenEdge (в дальнейшем для упрощения будет

использоваться сокращение PDSOE) для создания мобильных приложений, необходимо выполнить

некоторые настройки в PDSOE. Первое, что нужно сделать, это настроить Mobile App Builder для

работы в веб-браузере. Веб-браузер должен быть HTML5-совместимым. В нашем случае мы будем

использовать веб-браузер Chrome. Кроме того, для целей изучения, мы воспользуемся облачным

сервисом Progress Arcade, где заранее подготовим соответствующую виртуальную машину с

предустановленными продуктами OpenEdge 11.3. Информацию о том, как это сделать вы найдете в

статье «Progress Arcade — облачный сервис Progress Software».

Стартуем PDSOE:

1. Выберите иконку Developer Studio в меню «Start»

2. Во время старта Developer Studio у вас будет запрошен путь к рабочему каталогу, вы можете

выбрать каталог по умолчанию, либо использовать собственный каталог. В нашем случае мы

будем использовать каталог C:\workspace

Примечание. Имена проектов, мобильных приложений, бизнес-сущностей и прочие названия,

указанные в наших примерах, должны быть такими же, как указаны в примерах, что обеспечит

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

самостоятельно позаботиться об идентичности используемых вами имен в программном коде

примеров.

Настраиваем веб-браузер в PDSOE:

1. В меню PDSOE выберите Windows -> Preferences -> General -> Web Browser

2. Выберите Use external web browser

3. В списке выберите веб-браузер. В нашем случае, мы будем использовать Chrome. Если этого

веб-браузера нет в списке, сделайте соответствующую настройку:

a. Щелкните на кнопке New

Page 18: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 17

b. В открывшемся окне введите название веб-браузера и путь к исполняемому exe-

файлу. Нажмите кнопку Ок для сохранения.

4. В списке External web browsers выберите Chrome и щелкните по кнопке Apply.

Теперь необходимо ввести пользовательские учетные данные для доступа к Mobile App Builder. Это

может быть тот же Progress ID, который вы использовали для создания виртуальной машины в

Progress Arcade, либо вы можете заказать отдельный Progress ID у вашего поставщика программных

продуктов Progress Software.

Page 19: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 18

Настраиваем доступ к Mobile App Builder:

1. В настройках Windows -> Preferences раскройте список Progress OpenEdge и выберите Mobile

App Builder.

2. В поле User name введите Progress ID, а в поле Password пароль от Progress ID, после чего

щелкните по кнопке Apply. PDSOE проверит подключение к Mobile App Builder, в случае

ошибки вы получите сообщение «Login failed. Specify valid user credentials», в случае успеха,

никаких сообщений выведено не будет, можете закрыть окно настройки щелкнув по кнопке

Ok.

Page 20: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 19

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

шаги:

1. В меню PDSOE выберите File -> New -> OpenEdge Project, вы также можете нажать

комбинацию клавиш Alt + Shift + N. В открывшемся окне введите название проекта MyMobile,

а во всплывающем списке Project type configuration выберите тип проекта Mobile. Щелкните

кнопку Next для продолжения.

2. Вновь щелкните кнопку Next, чтобы принять значения по умолчанию, предлагаемые на

странице «AVM and layout options».

3. На странице «Define AppServer content module page» выберите restbroker1 в качестве вашего

сервера и щелкните кнопку Next.

4. Мобильный сервис будет создан автоматически, для этого на странице «Create a Mobile

Service» выберите в качестве сервера restmgr1 и щелкните кнопку Next.

5. На странице «Create a Mobile App» выберите restmgr1 в качестве сервера и щелкните кнопку

Next. Обратите внимание, Developer Studio автоматически добавит «App» в конец имени

вашего мобильного проекта, чтобы сформировать имя мобильного приложения. Вы можете

изменить это имя. Также, на этой странице вы можете выбрать тип мобильного приложения в

секции Mobile App type – в этом примере мы будем создавать мобильное приложение с

типом «Phone App» (значение по умолчанию).

6. На следующей странице снова щелкните кнопку Next, чтобы принять значения PROPATH по

умолчанию.

Page 21: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 20

7. На странице «Select database connections» необходимо указать базу данных OpenEdge, с

которой будет работать наше мобильное приложение. В нашем примере мы будем

использовать базу данных Sports2000, настройке которой будет посвящены следующие

несколько шагов.

8. В меню Windows Start -> All Programs -> Progress -> OpenEdge 11.3 щелкните по иконке

Proenv, откроется экран с командной строкой, настроенной на работу с OpenEdge. Текущим

рабочим каталогом будет C:\OpenEdge\WRK, создайте в этом каталоге каталог testdb и

перейдите в него:

mkdir testdb

cd testdb

9. Скопируйте в этот каталог тестовую базу данных Sports2000 из инсталляционного каталога

OpenEdge:

procopy %DLC%\sports2000 .\sports2000

10. Откройте OpenEdge Management, используя меню Windows Start -> All Programs -> Progress ->

OpenEdge 11.3 -> Database Administration Console. Если вы ранее не использовали OpenEdge

Management, обратитесь к статье «OpenEdge Management и OpenEdge Explorer –

первоначальная настройка». Вы также можете использовать адрес http://localhost:9090.

Кроме того, со своего компьютера мы можем подключиться к OpenEdge Management,

работающим на виртуальной машине в Progress Arcade, предварительно открыв порт 9090 в

настройках виртуальной машины Arcade:

После этого можно использовать адрес вида http://ec2-ХХ-ХХ-Х-ХХХ.compute-

1.amazonaws.com:9090, где ХХ-ХХ-Х-ХХХ – это IP вашей виртуальной машины в Arcade,

который можно найти в заголовке окна Remote Desktop.

11. Для управления базой данных Sports2000 создаем новый ресурс в OpenEdge Management.

Для этого в меню Resources вы берите пункт New OpenEdge Resources -> Database. Где в поле

Database Display Name введите имя ресурса Sports2000Mobile (имя может быть любым, без

Page 22: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 21

пробелов), в поле Database Path and Filename введите полный путь к базе данных

C:\OpenEdge\WRK\testdb\sports2000, в поле Database Port укажите номер порта 50500:

Щелкните по кнопке Submit, для создания нового ресурса.

12. На открывшейся странице управления базой данных в OpenEdge Management перейдите в

раздел Control и выполните старт базы данных, щелкнув по кнопке Start Database. Как только

старт базы данных будет выполнен, вернитесь в PDSOE.

13. Находясь в окне «Select database connections» в PDSOE щелкните по ссылке «Configure

database connections». В открывшемся окне щелкните по кнопке New и заполните параметры

подключения к базе данных Sports2000, как показано на рисунке:

Page 23: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 22

Не прибегая к проверке подключения, щелкните по кнопке Next.

14. В окне «Define a SQL Connection» оставьте значения по умолчанию и щелкните по кнопке

Next.

15. В окне «Add SQL Connection Profile» убедитесь в правильности параметров подключения, как

показано на рисунке:

Page 24: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 23

Щелкните по кнопке «Test Connection» для проверки соединения, вы должны получить

сообщение «Connection succeeded», после чего щелкните по кнопке Next.

16. В окне «Define Database Server Configuration» снимите галочку Auto-start database server и

щелкните по кнопке Finish. После этого, база данных Sports2000 появится в списке доступных

баз данных в PDSOE. Нажмите кнопку Ok, чтобы вернутся в окно «Select database

connections». Установите галочку напротив базы данных sports2000 и щелкните по кнопке

Finish.

17. Если PDSOE запросит у вас разрешение на открытие модуля контроля серверов - «the server

perspective», щелкните Yes.

По умолчанию в веб-браузере будет стартован Mobile App Builder. На данном этапе он нам не

понадобится. Сверните его и вернитесь в PDSOE.

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

мобильного приложения к OpenEdge-данным нам необходимо подключить AppServer к базе данных.

Для подключения AppServer к базе данных выполните следующие шаги в PDSOE:

1. Перейдите во вкладку Servers, либо, если этой вкладки нет, откройте её через меню Window -

> Show View -> Servers, если Servers в списке нет, используйте пункт Other, где Servers

размещен в папке Server.

2. Во вкладе Servers щелкните два раза на брокере restbroker1, откроется окно настройки

брокера. Щелкните по ссылке Open launch configuration.

3. В открывшемся окне перейдите на вкладку Databases и выберите Show All.

4. Выберите базу данных sports2000 и щелкните по кнопке Ok для сохранения и закрытия окна

настройки конфигурации брокера.

5. Теперь можно стартовать брокера. Для этого щёлкните правой кнопкой мыши на брокере

restbroker1 и выберите пункт меню Start.

6. Теперь мы должны стартовать REST Manager. Для этого щёлкните правой кнопкой мыши на

restmgr1 и выберите пункт меню Start.

Прежде чем переходить к следующему этапу, убедитесь, что restmgr1 стартован и получил статус

Synchronized (дождитесь завершения процесса старта, который отображается в индикаторе в правом

нижнем углу PDSOE).

Возможные проблемы. В некоторых случаях OE Web Server может оказаться недоступным, в

результате чего restmgr1 не сможет стартовать, выдав соответствующее сообщение на экран. В этой

ситуации проверьте работу Apache Tomcat, выполнив в proenv следующую команду:

protc start

Page 25: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 24

Вы должны получить сообщение «Tomcat is now running on port: 8980». Проверить работу Apache

Tomcat можно также по адресу http://localhost:8980/

После того как Apache Tomcat стартован, restmgr1 будет стартован автоматически, в противном

случае повторите попытку старта restmgr1 вручную.

В результате, статусы restmgr1 и restbroker1 у вас должны выглядеть, как показано на рисунке:

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

приложения.

Создаем Include-файл Перед тем как приступить к созданию бизнес-сущности для нашего мобильного сервиса, мы должны

создать include-файл, который будет содержать описание временной таблицы, соответствующей

схеме таблицы Customer базы данных Sports2000. Для этого:

1. Разместим include-файл в каталоге AppServer нашего проекта. Для этого выберите каталог

AppServer в Project Explorer, щелкните по нему правой кнопкой мыши и выберите пункт меню

New -> ABL Include.

2. В открывшемся окне в поле контейнер должен быть указан путь к каталогу AppServer. В поле

File name введите имя нашего файла – dsCustomer.i:

Остальные поля можете заполнить на свое усмотрение или оставить пустыми.

3. Щелкните по кнопке Finish.

Page 26: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 25

4. В открывшемся файле, в секции Definitions скопируйте и поместите следующий код:

DEFINE TEMP-TABLE eCustomer NO-UNDO BEFORE-TABLE beCustomer

FIELD CustNum AS INTEGER

FIELD Name AS CHARACTER FORMAT "X(20)"

FIELD Address AS CHARACTER

FIELD Phone AS CHARACTER

FIELD SalesRep AS CHARACTER

FIELD Balance AS DECIMAL

FIELD State AS CHARACTER

FIELD numOrders AS INTEGER

INDEX CustNum IS UNIQUE PRIMARY CustNum

INDEX Name NAME.

DEFINE DATASET dsCustomer

FOR eCustomer.

5. Сохраните изменения, нажав комбинацию клавиш Ctrl+S.

Убедитесь в том, что файл dsCustomer.i появился в каталоге AppServer.

Создаем бизнес-сущность Бизнес-сущность, это файл ABL-класса (CLS), который содержит предопределенные аннотации

мобильного сервиса. Для создания бизнес-сущности выполните следующие шаги:

1. В Project Explorer выберите каталог AppServer (здесь мы разместим .cls-файл), щелкните на

нём правой кнопкой мыши и выберите пункт меню New -> Business Entity:

2. Убедитесь в том, что поле Package root содержит \MyMobile\AppServer, и введите название

бизнес-сущности dsCustomer в поле Business Entity name. Щелкните на кнопке Next.

Page 27: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 26

3. В поле Schema file щелкните на кнопке Browse и выберите файл dsCustomer.i, ранее

сохраненный нами в каталоге C:\workspace\MyMobile\AppServer.

4. В поле Schema появятся описание схемы временной таблицы eCustomer и DATASET

dsCustomer. Выберите dsCustomer и щелкните по кнопке Finish.

5. В открывшемся файле, перейдите к описанию метода ReaddsCustomer и скопируйте в него

следующий код, который будет отвечать за чтение записей из базы данных Sports2000:

DEFINE DATA-SOURCE srcCustomer FOR Customer.

EMPTY TEMP-TABLE eCustomer.

BUFFER eCustomer:ATTACH-DATA-SOURCE(DATA-SOURCE srcCustomer:HANDLE).

filter = "where custnum < 100".

IF filter NE "" AND filter NE ? THEN

DATA-SOURCE srcCustomer:FILL-WHERE-STRING = filter.

DATASET dsCustomer:FILL().

BUFFER eCustomer:DETACH-DATA-SOURCE().

RETURN.

6. Выполните проверку синтаксиса, нажав комбинацию клавиш Ctrl+Shift+C. Если синтаксис

правильный, сохраните внесенные изменения.

Теперь мы должны добавить бизнес-сущность в мобильный сервис, для этого:

1. В панели Project Explorer разверните пункт Defined Services и щелкните правой кнопкой на

сервисе MyMobileService, в открывшемся меню выберите пункт Edit.

2. Щелкните на кнопке Next на странице Edit a Mobile Service.

3. На следующей странице выберите файл бизнес-сущности dsCustomer.cls и щелкните по

кнопке Finish.

Теперь мы можем приступить к созданию интерфейса мобильного приложения в Mobile App Builder.

Page 28: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 27

Создаем мобильное приложение Стартовать Mobile App Builder вы можете двойным щелчком на имени мобильного приложения (в

нашем случае это MyMobileApp) в панели Project Explorer в PDSOE, после чего Mobile App Builder

откроется в веб-браузере на странице вашего проекта. Или, использовать адрес

http://mobile.progress.com в веб-браузере, чтобы подключиться к вашему проекту, выбрав его из

списка доступных проектов. Перед стартом, Mobile App Builder запросит у вас учетные данные,

открыв страницу Progress Software Login Page. Здесь вы должны ввести те же учетные данные, что

вводили в настройках PDSOE для подключения к Mobile App Builder перед созданием мобильного

проекта в нашем примере.

Как только вы подключитесь к Mobile App Builder, приступим к настройке нашего мобильного

приложения.

Для создания пользовательского интерфейса мобильного приложения выполните следующие шаги:

1. На панели проекта (слева) разверните каталог Pages и щелкните по странице приложения

MyPhoneApp. Дождитесь загрузки шаблона нашей стартовой страницы.

2. В шаблоне страницы щелкните по заголовку, и в свойствах (панель справа) измените поле

text на My Mobile App.

3. Добавить компонент List на страницу путем перетаскивания с панели компонентов. На панели

свойств в поле Name введите CustList, а в поле Items установите значение 1

4. Щелкните непосредственно на элемент списка в шаблоне, и на панели свойств в поле Name

введите CustItem

Page 29: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 28

5. Перетащите компонент Label поверх элемента списка. В свойствах компонента Label в поле

Name введите CustName

Page 30: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 29

Теперь добавим событие на страницу, для чего:

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

2. В меню Component выберите MyPhoneApp.

3. В меню Event, выберите Load.

4. В меню Action, выберите Run JavaScript.

5. В открывшийся редактор JavaScript скопируйте и вставьте следующий код:

var settings; var cMsg = "ok"; var pdsession; try { /* CHANGE THIS TO POINT TO YOUR SETTINGS SERVICE */ settings = MyMobileService_dsCustomer_Settings; pdsession = new progress.data.Session(); var loginResult = pdsession.login(settings.serviceURI,"",""); if (loginResult != progress.data.Session.LOGIN_SUCCESS) { console.log('ERROR: Login failed with code: ' + loginResult); switch (loginResult) { case progress.data.Session.LOGIN_AUTHENTICATION_FAILURE: cMsg = 'Invalid user-id or password'; break; case progress.data.Session.LOGIN_GENERAL_FAILURE: default: cMsg = 'Service is unavailable'; break; } } } catch (e) { cMsg = "Failed to log in"; console.log(e.stack); } if (cMsg != "ok") { alert(cMsg); return; } pdsession.addCatalog(settings.catalogURI);

6. Щелкните на кнопке Add event.

Page 31: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 30

Добавляем JSDO-сервис в клиентскую часть Клиентский доступ к ABL-данным предоставляет OpenEdge JavaScript Data Object (JSDO). Сервис JSDO

это программируемый сервис в Mobile App Builder, который упрощает маппирование между JSDO-

данными и HTML-элементами мобильного приложения. Для добавления JSDO-сервиса в клиентскую

часть выполните следующие шаги:

1. На панели проекта щелкните по кнопке Create New и выберите Service.

2. В открывшемся окне выберите JSDO Service

3. Щелкните по кнопке Upload a file и выберите файл MyMobileService.json, который

размещен в вашей рабочей области мобильного проекта в PDSOE в каталоге

\MyMobile\WebContent

4. Щелкните по кнопке Select resources.

5. Выберите MyMobileService.dsCustomer и щёлкните Create Services. Вы должны увидеть

сообщение о создании семи сервисов

6. Щёлкните кнопку Close.

7. На панели проекта, в каталоге Services разверните каталог MyMobileService.ds.Customer, и

щелкните на MyMobileService_ds_Customer_Settings.

8. Измените значение по умолчанию для catalogURI, используя следующий формат:

http://<your IP address>:<port>/MyMobileService/static/mobile/MyMobileService.json

Page 32: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 31

Где,

<your IP address> - IP-адрес вашей виртуальной машины в Progress Arcade, который вы

найдете в заголовке Remote Desktop Connection. Вы должны видеть что-то вроде этого

ec2-54-205-0-206.compute-1.amazonaws.com – это ваш IP.

<port> - номер порта, на котором стартован OpenEdge Web Server. В случае с Progress

Arcade этот порт по умолчанию имеет номер 8990. Вы можете узнать действующий

номер порта, выполним команду protc start в proenv.

Подсказка. Сохраните IP в Nottepad, поскольку этот адрес понадобится при создании и

тестировании мобильного приложения в будущем.

9. Измените значение по умолчанию для serviceURI, используя следующий формат:

http://<your IP address>:<port>/MyMobileService

10. Щёлкните по кнопке Save.

11. На панели проекта, в каталоге Pages щёлкните по MyPhoneApp, чтобы вернуться в дизайнер

интерфейса. Щелкните по вкладке Data, которая располагается слева от панели компонентов.

12. В разворачивающемся меню Add data source выберите пункт Service, и затем выберите

MyMobileService_dsCustomer_JSDO. Щёлкните Add и измените имя сервиса по умолчанию с

restservice1 на Customer.

13. Добавите ещё один источник данных, снова выбрав Service, а затем

MyMobileService_dsCustomer_Read. Щёлкните Add и назовите сервис Read

14. Далее, напротив сервиса Read щелкните по ссылке Edit mapping.

15. Выберите вкладку Response.

Page 33: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 32

16. Разверните dsCustomer и все его компоненты на панели слева, и сделайте то же самое для

MyPhoneApp и всех его компонент на панели справа.

17. Найдите компонент Name в списке eCustomer, щелкните по нему мышкой и, удерживая,

переместите на компонент Text списка CustName, тем самым создав связь между ними.

18. Точно также переместите eCustomer на CustItem

Page 34: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 33

19. Щелкните Back to datasources.

20. Щёлкните на вкладе Design и разверните вкладку Events внизу страницы.

21. Создайте новое событие:

a. В меню Component выберите MyPhoneApp.

b. В меню Event выберите Load.

c. В меню Action выберите Invoke Service.

d. Выберите в меню Datasource сервис Customer.

e. Щёлкните по кнопке Add event.

22. Щёлкните по вкладке Data и разверните вкладку Events (если не развернута).

23. Создайте новое событие:

a. В меню Component выберите Customer.

b. В меню Event выберите Success.

c. В меню Action выберите Invoke Service.

d. Выберите в меню Datasource сервис Read.

e. Щёлкните по кнопке Add event.

24. Щёлкните кнопку Save.

Сборка и тестирование мобильного приложения Наше простейшее мобильное приложение теперь готово к тестированию внутри встроенного

эмулятора. Мы протестируем его в Developer Studio.

Перейдите на вкладку Servers в PDSOE, и убедитесь в том, что restmgr1 находится в состоянии Started.

Если сервер не стартован, щёлкните по нему правой кнопкой мыши и выберите Start. Точно также

проверьте состояние сервера restbroker1, и при необходимости стартуйте его.

Перейдите в Project Explorer, щелкните на MyMobileApp, в открывшемся меню выберите Copy Local

Source. Дождитесь завершения процесса копирования, после чего еще раз убедитесь в том, что

серверы restbroker1 и restmgr1 стартованы и синхронизированы. Если сервер restmgr1 стартован, но

имеет состояние Republish, выполните публикацию вручную, для чего щёлкните правой кнопкой

мыши на сервере и в меню выберите пункт Publish. Дождитесь завершения процесса.

Чтобы убедиться, что мобильное приложение и сервис были успешно опубликованы, перейдите в

каталог C:\Progress\OpenEdge\servers\tomcat\webapps и проверьте наличие в нём каталогов

MyMobileApp и MyMobileService, а также файлов MyMobileApp.war и MyMobileService.war.

Следующие действия должны быть выполнены только после того, как эти файлы и каталоги будут

созданы.

Для старта нашего мобильного приложения выполните следующие шаги:

1. В PDSOE выберите пункт меню Run -> Run Configurations.

2. В открывшемся окне в левой панели выполните двойной щелчок мышью на Progress

OpenEdge Mobile.

3. Введите имя новой конфигурации. В меню Project выберите MyMobile. В меню Mobile App

выберите MyMobileApp.

Page 35: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 34

4. Выберите радио-кнопку Run on server, и в автоматически подставленной адресной строке

замените IP-адрес на корректный адрес (тот, что ранее мы сохраняли в Notepad).

5. Щёлкните по кнопке Run. Как только старт приложения будет завершен, откроется веб-

браузер, и мобильное приложение будет стартовано в эмуляторе.

Возможно, что старт приложения может занять несколько минут, так как в это время выполняется его

публикация в каталог Tomcat.

Для просмотра приложения на мобильном устройстве, откройте браузер на устройстве и в адресной

строке введите URL в следующем формате: http://<ip address>:8980/MyMobileApp.

Page 36: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 35

Решение возможных проблем Если мобильное приложение MyMobileApp не отобразит данные, проверьте следующие возможные

источники ошибки.

В Developer Studio

Выберите вкладку Servers:

1. Убедитесь, что restbroker1 работает и синхронизирован. Если нет, проверьте, стартован ли

сервер базы данных и restbroker1 подключен к нему.

2. Убедитесь, что restmgr1 содержит мобильный сервис и синхронизирован. Если нет,

остановите сервер Tomcat, удалите некоторые артефакты, и перезапустите Tomcat.

a. Откройте proenv, введите команду protc stop и нажмите Enter.

b. Перейдите в каталоге Progress/OpenEdge/servers/tomcat/webapps в инсталляционном

каталоге OpenEdge. В каталоге должны находиться два WAR-файла с именами

MyMobileApp и MyMobileService, а также два каталога с такими же именами. Удалите

WAR-файлы и каталоги. Если этих четырех артефактов нет в каталоге – удалите то, что

есть.

c. В proenv введите команду protc start и нажмите Enter.

d. Во вкладке Servers щелкните правой кнопкой мыши на restmgr1 и выберите Publish.

Потребуется некоторое время для выполнения публикации, следите за индикатором в

правом нижнем углу PDSOE.

Примечание: после некоторого количества повторных публикаций, иногда оставшиеся файлы

должны быть удалены вручную. Для их удаления используйте команду protc clean после

выполнения команды protc stop, а затем команду protc start.

В Mobile App Builder

Перейдите в Mobile App Builder и проверьте следующее:

1. Откройте MyMobileService_dsCustomer_Settings в каталоге Services.

a. Проверьте правильность пути в поле catalogURI. Должен быть следующий вид:

http://<your-ip-address>:8980/MyMobileService/static/mobile/MyMobileService.json

Если вы не использовали MyMobileService в качестве имени вашего сервиса, замените

MyMobileService на имя вашего сервиса.

b. В поле resourceName должны быть название dsCustomer. Если вы не использовали

dsCustomer в качестве имени вашей бизнес-сущности, замените dsCustomer на имя

вашей бизнес-сущности.

2. Проверьте JavaScript, ассоциированный с событием Load стартовой страницы:

a. Первый параметр в вызове pdsession.login должен иметь значение

MyMobileService_dsCustomer_Settings.serviceURI. Если имя вашего сервиса не

MyMobileService и/или имя вашей бизнес-сущности не dsCustomer, замените их

соответствующими именами, использованными вами.

b. Первый параметр в вызове pdsession.addCatalog должен быть

MyMobileService_dsCustomer_Settings.catalogURI. Если имя вашего сервиса не

MyMobileService и/или имя вашей бизнес-сущности не dsCustomer, замените их

соответствующими именами, использованными вами.

Page 37: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 36

c. Убедитесь, что событие Run JavaScript это первое событие Load, а Invoke Service –

второе событие Load по порядку.

Web Browser

Откройте новое окно веб-браузера и проверьте:

1. Следующий URL должен отобразить домашнюю страницу Tomcat:

http://<your-ip-address>:8980

Если страница не открылась, откройте proenv, введите protc start, нажмите Enter.

2. Следующий URL должен показать доступные сервисы:

http://<your-ip-address>:8980/MyMobileService/rest

Если доступных сервисов RESTfull нет, сделайте republish сервиса MyMobileService.

Общее

Убедитесь, что порт 8980 открыт в Windows Firewall.

Page 38: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 37

РАЗВЁРТЫВАНИЕ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ В этой главе содержится информация о том, как упаковать ваше мобильное приложение для его

работы на устройствах Apple или Android.

Существует три варианта упаковки и развертывания мобильных приложений:

iOS App

Android App

Mobile Web App

Терминология, используемая в этой главе, представлена в следующей таблице. С её помощью будет

проще понять различия между типами мобильных приложений.

Термин Описание

Mobile Web application

Мобильное приложение и/или мобильные сервисы, развернутые на веб-сервере

Mobile services Сервисы, развернутые на веб-сервере и доступные из приложений Mobile Native App или Mobile Web App

Mobile App Некоторый мобильный пользовательский интерфейс, работающий как родное приложение мобильного устройства (Mobile Native App) или в веб-браузере на мобильном устройстве (Mobile Web App)

Mobile Native App Приложение, работающее как родное приложение мобильного устройства

Mobile Web App Приложение, работающее в веб-браузере на мобильном устройстве

Mobile application Приложение Mobile App и все ассоциированные с ним внутренние сервисы

Упаковка и развертывание мобильных сервисов Для упаковки мобильных сервисов для развертывания («с» или «без» включения мобильного веб-

приложения), используется мастер экспорта мобильного веб-приложения в Progress Developer Studio

for OpenEdge.

Для упаковки мобильных сервисов, выполните следующее:

1. В PDSOE щёлкните правой кнопкой мыши по имени вашего проекта в Project Explorer и

выберите пункт меню Export -> Mobile Web Application.

2. В открывшемся окне Export Mobile Web Application выберите название проекта (Mobile

project), место размещения WAR-файла (Destination), и мобильные сервисы (Mobile and REST

services). Дополнительно вы можете выбрать мобильное веб-приложение (Mobile App),

которое будет упаковано вместе с сервисами.

3. Щёлкните по кнопке Finish. WAR-файл будет создан и помещен в выбранный каталог.

Чтобы развернуть полученный WAR-файл в OE Web Server на другой машине вы можете

использовать OpenEdge Explorer или OpenEdge Management, которые применят настройки по

умолчанию, необходимые для активации и сборки Mobile Web application, чтобы сделать его

доступным из клиента Mobile App. Альтернативный варианта развертывания – это вручную

скопировать WAR-файл в каталог webapps сервера Apache Tomcat, что потребует от вас выполнения

некоторых настроек конфигурации, необходимых для сборки мобильного веб-приложения.

Инструмент и параметры развертывания WAR-файла для мобильного веб-приложения аналогичны

тем, которые используются для развёртывания WAR-файла для приложений REST WEB. Подробную

Page 39: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 38

информацию о том, как это сделать, вы найдете в документации по OpenEdge, книга «OpenEdge

Application Server: Administration».

Упаковка и развертывание приложений для Android Прежде чем вы сможете успешно развернуть своё приложение на Android-устройстве, вы должны

упаковать (выполнить сборку) для этой платформы. Для начала необходимо ознакомиться с

настройками проекта (Project -> App setting), где вы найдете 2 вертикальные вкладки, имеющие

отношение к разработке под Android:

Android binary

Android permissions

Вкладка Android binary предназначена для настройки таких параметров как метка (Label) и иконка

(Icon) приложения, информация о версии, минимальная версия Android и прочее.

Вкладка Android permissions предназначена для настройки параметров загрузки и выполнения

определенных опций для платформы Android. Больше информации об этих опциях вы найдете в

документации к Android.

Как только вы выполните все необходимые вашему приложению настройки, вы можете приступить к

сборке и упаковке приложения, щелкнув по кнопке Export в Mobile App Builder.

Здесь вы можете выбрать, в каком виде необходимо упаковать ваше приложение. В случае с

контейнером для Android, в колонке Release binary щёлкаем по кнопке «.apk». Дожидаемся

завершения формирования файла, после чего файл с расширением .apk готов для размещения на

Android-устройстве.

Как вариант, для тестирования приложения на Android-устройстве, т.е. для загрузки APK-файла на

Android-устройство можно использовать следующие шаги:

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

сервисе.

Сохраните APK-файл в Dropbox (или Яндекс.Диск) и сделайте его доступным извне.

Используя общедоступную ссылку на ваш файл APK, загрузите его через веб-браузер на

Android-устройство.

После загрузки щелкните по загруженному файлу APK, и следуйте инструкциям устройства по

установке приложения.

Page 40: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 39

Упаковка и развертывание приложений для iOS В случае размещения мобильного приложения в iOS, некоторые шаги аналогичны тому, как они

выполнялись для Android, но есть некоторые существенные различия.

Первым делом необходимо зарегистрироваться в качестве iOS-разработчика на сайте Apple

(http://developer.apple.com). После этого вы должны создать Distribution-сертификат и Provisioning-

файл для приложения. Подробную информацию о том, как это сделать ищите на вебсайте Apple.

Далее, в Mobile App Builder переходим в настройки приложения (Project -> App setting) и находим

вкладки:

iOS binary

iOS keys

Вкладка iOS binary предназначена для настройки метки, версии, иконки приложения и прочее,

аналогично настройкам для Android. Дополнительно, здесь настраиваются специфические для

iOS параметры, такие как Bundle ID (уникальный идентификатор вашего приложения),

distribution-сертификат и provisioning-файл.

Вкладка iOS keys, так же как и для Android, предназначена для настройки параметров загрузки и

выполнения определенных опций, характерных для iOS. Больше информации об этих опциях вы

найдете в документации к iOS.

После выполнения всех настроек, вы можете приступить к сборке и упаковке приложения, щелкнув

по кнопке Export в Mobile App Builder, и сформировать IPA-файл.

Сформированный IPA-файл вы можете импортировать в iTunes, и затем, используя iTunes

синхронизировать ваше приложение с вашим мобильным устройством. В качестве

альтернативного варианта вы можете использовать созданный QR-код, отсканировав этот код

устройством, на которое вы хотите установить приложение.

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

необходимо загрузить приложение в AppStore, то о том, как это сделать, вам необходимо

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

Page 41: OpenEdge Mobile - разработка мобильных приложений

OpenEdge Mobile - разработка мобильных приложений

С т р а н и ц а | 40

ЗАКЛЮЧЕНИЕ С помощью OpenEdge Mobile вы можете создавать не только OpenEdge-сервисы и мобильные

приложения для OpenEdge. Это мощная платформа, которая позволяет создавать множество

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

twitter-каналы, захват видео, сервисы определения местоположения и прочее, прочее…

Благодаря использованию OpenEdge Mobile ваши возможности разработки приложений значительно

расширяются!

Больше информации об OpenEdge Mobile вы найдете на сайте корпорации Progress Software

www.progress.com