Содержание


Расширение возможностей по управлению корпоративной информацией

Разработка мобильного приложения поиска и рассылки уведомлений для IBM Content Manager с использованием IBM Bluemix

Бизнес-приложения для пользователей смартфонов становятся все популярнее и приобретают все более важное значение для систем управления информацией. В этом руководстве на примере сценария из индустрии финансовых услуг показано, как на платформе IBM Bluemix™ написать мобильное приложение, использующее в качестве централизованного хранилища данных IBM Content Manager.

Сценарий: вымышленная ипотечная компания хочет создать приложение для службы поиска займов. Это приложение предоставляет пользователям быстрый и простой доступ к информации о займах, хранящейся на сервере Content Manager. Пользователи могут получать информацию о займах через веб-браузеры настольных компьютеров, планшеты и смартфоны. Когда на сервере Content Manager информация о займах обновляется, в мобильное приложение направляется уведомление, которое пользователи получают через службу обмена сообщениями Google Cloud Messaging (GCM).

Я покажу, как создать решение поисковой службы в виде веб-приложения и мобильного приложения. Затем мы добавим в мобильное приложение поддержку уведомлений. Схему этого приложения можно использовать в качестве образца для разработки аналогичных мобильных приложений IBM Content Manager с применением технологии Bluemix. Интеграция Bluemix и Content Manager для мобильного приложения расширяет возможности системы управления информацией организации.

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

Что требуется для создания приложения

  • Учетная запись Bluemix и учетная запись DevOps Services, обе должны быть привязаны к вашему ID IBM.
  • Знакомство со средой разработки Android
  • Среда разработки Content Manager и доступ с правами администратора к экземпляру IBM Content Manager версии 8

Запустить приложениеПолучить код

Чтобы получить представление о службе поиска займов, нажмите кнопку Запустить приложение. Для выполнения поиска введите в качестве номера займа 12-345-6789 или 12-345-6000. (Данные займа остаются неизменными).

Обзор решения

Content Manager (версии 8 на момент написания этой статьи) поддерживает платформу управления событиями, которая обеспечивает интеграцию внешних приложений. Она контролирует события, влияющие на информацию (создание, редактирование, удаление и т.п.), и предоставляет средства для интеграции приложений. Во время определения событий в Content Manager их можно подписать на записи определенного типа. Во время выполнения среда обеспечивает платформу:

  • для контроля событий из операций в Content Manager;
  • обработки событий для интеграции приложений на основе событий в репозитории.

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

В примере приложения для хранения веб- и мобильных данных используется база данных NoSQL Cloudant. С помощью платформы управления событиями Content Manager данные приложения для поиска займов автоматически передаются из централизованного репозитория Content Manager в базу данных Cloudant для доступа через веб-браузеры и мобильные приложения.

Служба поиска содержит три основных компонента:

  • веб приложение, которое работает на платформе Bluemix, обеспечивает основные функции службы поиска и доступно из веб-браузера. Веб-приложение также отвечает за отправку уведомлений в мобильное приложение;
  • мобильное приложение, которое работает на Android-устройстве и позволяет подключаться к веб-приложению и службе поиска. Когда мобильное приложение получает уведомление от веб-приложения, оно выдает уведомляющее сообщение;
  • специальный обработчик событий, который работает в централизованном хранилище и передает обновления информации о займах в базу данных Cloudant для доступа через веб-браузеры и мобильные устройства.

Шаг 1. Копирование примера проекта

Начните с копирования примера проекта, чтобы у вас был свой собственный проект DevOps Services с необходимым исходным кодом.

  1. Нажмите кнопку Получить код в начале этого руководства.
  2. На обзорной странице проекта ayaung | bluemix4cm8 нажмите кнопку EDIT CODE (введите свои учетные данные DevOps Services, если вы еще не вошли) и выберите FORK из меню.
  3. Введите имя своего нового проекта, установите флажок Deploy to Bluemix и выберите организацию и пространство для процесса выставления счетов.
  4. Нажмите кнопку Save для создания нового проекта с исходным кодом.
  5. Следуйте инструкциям по развертыванию, содержащимся в файле проекта README.md.

После редактирования приложения и его развертывания в Bluemix войдите в Bluemix и найдите вновь развернутое приложение на панели управления.

Приложение bluemix4cm8 в Bluemix

Шаг 2. Добавление в приложение базы данных NoSQL Cloudant

  1. На панели управления Bluemix нажмите кнопку ADD A SERVICE, выберите из каталога службу БД NoSQL Cloudant и добавьте ее к приложению.
  2. Когда служба Cloudant будет создана, нажмите кнопку Show credentials на значке Cloudant на обзорной странице приложения, чтобы отобразить учетные данные Cloudant, которые требуются программе app.js для доступа к клиентской службе.
  3. Запустите консоль управления Cloudant и создайте новую базу данных. Убедитесь, что в файле app.js веб-приложения используется то же имя базы данных, что и в URL-адресе поиска Cloudant. (Я использую имя test.)
  4. Для ускорения поиска добавьте индекс поиска, который Cloudant будет использовать при поиске URL-адреса в app.js. В этом примере loan_design — это имя проекта документа, а loan_no — имя индекса поиска. Настройка индекса поиска Cloudant
    Настройка индекса поиска Cloudant
  5. В целях тестирования добавьте в новый документ следующие данные JSON и нажмите кнопку Save (база данных Cloudant автоматически создаст поля _id и _rev):
    {
      "loan_no": "12-345-6789",
      "first_name": "Peter",
      "last_name": "Pan",
      "loan_amount": "200000",
      "duration": "360",
      "interest_rate": "0.05",
      "yearly_income": "80000",
      "credit_score": "795"
    }

Шаг 3. Тестирование приложения

  1. Веб-приложение готово к тестированию. Откройте панель управления Bluemix и выберите URL-адрес, связанный с приложением, чтобы открыть главную страницу. Главная страница веб-приложения
    Главная страница веб-приложения
  2. Выполните поиск с идентификатором займа 12-345-6789, чтобы извлечь информацию из базы данных Cloudant. Результаты поиска
    Результаты поиска

Шаг 4. Добавление обработчика событий централизованного репозитория

  1. Убедитесь, что среда разработки Content Manager настроена.
  2. В клиенте администрирования Content Manager определите тип элемента LoanApplication со следующими атрибутами:
    Тип элемента LoanApplication
    • LoanNumber: уникальный идентификатор займа (пример: 12-345-6789);
    • Duration: срок займа в месяцах (пример: 360);
    • InterestRate: процентная ставка займа (пример: 0.05);
    • LoanAmount: сумма займа (пример: 200000);
    • YearlyIncome: годовой доход заявителя (пример: 80000);
    • CreditScore: кредитная оценка заявителя (пример: 750);
    • FirstName: имя заявителя (пример: Peter);
    • LastName: фамилия заявителя (пример: Pan);
    • EmailAddress: адреса электронной почты лиц для рассылки уведомлений (не обязательно).
  3. В диалоговом окне Item Type Properties подпишитесь на события пяти типов: добавление записи, добавление в папку, удаление записи, удаление из папки и обновление записи.
    Типы событий
    Типы событий

    Для событий каждого типа включите все атрибуты типа записи LoanApplication.

    Подписка на событие добавления записи
    Подписка на событие добавления записи
  4. Скопируйте в свою среду разработки код обработчика событий cm8EventHandler.java. Следуйте инструкциям по компиляции и сборке обработчика событий из файла README.md в DevOps Services.

Шаг 5. Сборка мобильного приложения

  1. Убедитесь, что среда разработки Android настроена, и ключ API Google Play получен.
  2. Добавьте ключ API Google Play в файл config.json веб-приложения для отправки уведомления через GCM.
  3. Создайте новый проект Android и скопируйте код в папку mobileapp своего проекта. При необходимости обновите файл AndroidManifest.xml.
  4. Скомпилируйте и соберите Android-приложение и запустите эмулятор для его запуска.

Теперь информацию о займе можно просматривать в мобильном приложении.

Интерфейс мобильного приложения LookupApp
Интерфейс мобильного приложения LookupApp

Когда информация о займе обновляется в централизованном репозитории Content Manager, в мобильном приложении создается уведомление.

Мобильное уведомление
Мобильное уведомление

Шаг 6. Разбор деталей разработки

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

Код веб-приложения

Веб-приложение служит основным компонентом для централизованного хранения данных в базе данных Cloudant для веб- и мобильного доступа и для отправки уведомлений в мобильные приложения через GCM.

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

// "test" — это пример базы данных Cloudant. Замените его именем своей базы данных Cloudant.
// «loan_design» — это проект документа в базе данных Cloudant test, 
// который определяет индекс поиска по «loan_no».
var db_url = cloudant_url + "/test/_design/loan_design/_search/loan_no?q='" + loannumber + 
   "'&include_docs=true&limit=1";
...
request.get(db_url, function(err, res, body) {
...

Делается HTTP-запрос GET по URL индекса поиска loan_no в проекте документа Cloudant с именем loan_design. loannumber — номер займа, вводимый пользователем на веб-странице. include_docs=true – параметр Cloudant для включения в результат содержимого документа, а limit=1 указывает, что запрашивается только один результат.

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

app.get('/register', function(req, res){
    var id = req.query.device_id;
    console.log("register device_id =" + id);
    registrationIds.push(id);
    res.redirect(302, '/');
});

app.get('/send', function(req, res){
    var msg = req.query.message;
    console.log("send a message...");

    var message = new gcm.Message({
        collapseKey: 'demo',
        delayWhileIdle: true,
        timeToLive: 3,
        data: {
            notification: msg
        }
    });
    ...
});

Запрос register позволяет Android-устройству зарегистрироваться в веб-приложении: мобильное приложение делает запрос register, а веб-приложение принимает идентификатор устройства в качестве идентификатора регистрации. Запрос send рассылает сообщение GCM на зарегистрированные Android-устройства. Запрос send выполняется обработчиком событий Content Manager.

Код мобильного приложения

LookUpApp — это простое приложение для рассылки мобильных уведомлений. Оно подключается к веб-приложению службы поиска займов и позволяет пользователю выполнять поиск. При обновлении информации о займе в централизованном репозитории Content Manager уведомление, созданное веб-приложением, передается в мобильное приложение через GCM.

Обратите внимание, что в качестве имени пакета в примере указано com.ibm.ecm.lookupapp. Вам следует указать свое собственное имя пакета. Для справки приведен также пример файла AndroidManifest.xml. Как минимум, можно проследить раздел разрешений:

<!-- Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<permission android:name="com.ibm.ecm.lookupapp.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.ibm.ecm.lookupapp.permission.C2D_MESSAGE" />

Основная программа – это класс MainActivity. Обратите внимание, что для отображения веб-страницы из веб-приложения используется WebView:

mWebView = (WebView) findViewById(R.id.activity_main_webview);

/**
 * Замените на свой собственный URL.
 */
// Отредактируйте URL-адрес bluemix в файле strings.xml соответствующим образом,
// например: <string name="bluemix_url">http://cm8test.mybluemix.net</string>
String url = (String)getText(R.string.bluemix_url);	

mWebView.loadUrl(url);

Метод sendRegistrationIdToBackend вызывается для регистрации Android-устройства в веб-приложении с целью получения мобильных уведомлений. Производится HTTP-запрос с URL-адресом метода register в веб-приложении:

private void sendRegistrationIdToBackend() {
    // Ваша реализация.

    DefaultHttpClient httpclient = new DefaultHttpClient();

    /**
     * Замените на свой собственный URL. "register" зарегистрирует идентификатор устройства на вашем сервере bluemix
     */		
    // Отредактируйте URL-адрес bluemix в файле strings.xml соответствующим образом,
    HttpGet httpget = new HttpGet(getText(R.string.bluemix_url) + "/register?device_id=" + regid);

    try {
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        ...

Класс GcmIntentService содержит метод sendNotification, который отображает уведомление на Android-устройстве:

private void sendNotification(String msg) {
    ...

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_stat_gcm)
    .setContentTitle("GCM Notification")
    .setStyle(new NotificationCompat.BigTextStyle()
    .bigText(notification))
    .setContentText(notification);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

Код обработчика событий

Пример обработчика событий представляет собой Java-приложение, которое демонстрирует, как перенести информацию из централизованного репозитория Content Manager в облачную среду. Обработчик событий подключается к базе данных Cloudant. При обнаружении обновления информации о займе в репозитории Content Manager обработчик событий направляет обновленную информацию в базу данных. Веб-приложение использует данные из базы данных Cloudant для службы поиска займов. Метод sendDataToCloud иллюстрирует, как добавить или обновить информацию в базе данных Cloudant.

К базе данных Cloudant делается HTTP-запрос POST:

public void sendDataToCloud(String type, String baseURL, String id, 
                            String pw, String db, String key, 
                            String jsonText) throws Exception {
  DefaultHttpClient httpclient = new DefaultHttpClient();
  try {
    httpclient.getCredentialsProvider().setCredentials(
    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
    new UsernamePasswordCredentials(id, pw));
    if (type.equalsIgnoreCase("item-create")) {
       // добавление новой записи в cloudant
       HttpPost req = new HttpPost(baseURL + "/" + db);

       StringEntity myEntity = new StringEntity(jsonText, ContentType.APPLICATION_JSON);

       req.setEntity(myEntity);
       System.out.println("executing request ... " + req);

       HttpResponse rsp = httpclient.execute(req);
       HttpEntity entity = rsp.getEntity();
       ...

Обнаружив обновление информации о займе, обработчик событий также отправляет сообщение в веб-приложение. Получив сообщение, веб-приложение передает уведомление в Android-устройства через GCM. Метод sendNotificationToCloud показывает, как отправить сообщение в веб-приложение, которое разошлет GCM-уведомление в зарегистрированные устройства. Для рассылки GCM-уведомлений производится HTTP-запрос с URL-адресом метода send в веб-приложении:

public void sendNotificationToCloud(String baseURL, String loanNumber) throws Exception {
  DefaultHttpClient httpclient = new DefaultHttpClient();
  try {

    String urlReq = baseURL + 
           "/send?message=From%20CM8%20BlueMix:%20The%20loan%20information%20of%20Loan%20No.%20" 
           + loanNumber + "%20was%20updated.";
    System.out.println("url request: " + urlReq);
    HttpGet httpget = new HttpGet(urlReq);
    System.out.println("executing request ... " + httpget);
    HttpResponse rsp = httpclient.execute(httpget);
    HttpEntity entity = rsp.getEntity();
    ...

Заключение

IBM Content Manager служит одним из ключевых репозиториев управления корпоративной информацией, которые используются в сфере финансовых услуг, страхования и многих других отраслях. В этом руководстве на примере простого сценария обработки займов показано, как объединить Bluemix с Content Manager для разработки специального мобильного приложения. Качестве службы хранения данных для веб- и мобильного доступа также используется база данных NoSQL Cloudant. С помощью технологии Bluemix и инструментов DevOps можно создавать сложные приложения и решения для IBM Content Manager.


Ресурсы для скачивания


Похожие темы

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Мобильные приложения, Облачные вычисления
ArticleID=1010488
ArticleTitle=Расширение возможностей по управлению корпоративной информацией
publish-date=07082015