Проверка и изменение данных в Mobile Services с помощью серверных скриптов

Для знакомства с возможностями платформы  вы можетеактивировать Microsoft Azure бесплатно!

Тема практической работы — использование серверных скриптов в службах Microsoft Azure Mobile Services. Серверные скрипты регистрируются в мобильной службе и могут использоваться для выполнения различных операций со вставляемыми и обновляемыми данными, включая их проверку и изменение. Учимся определять и регистрировать серверные скрипты, которые проверяют и изменяют данные. Так как реакция на события со стороны серверных скриптов часто влияет на клиента, можно обновить приложение Android, чтобы воспользоваться преимуществами этих новых реакций.

При выполнении практической работы рассмотрим следующие основные этапы:

  1. Добавление функции проверки длины строки
  2. Обновление клиента для поддержки процесса проверки
  3. Добавление метки времени при вставке
  4. Обновление клиента для отображения метки времени

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

Добавление функции проверки

Рекомендуется всегда проверять длину данных, отправленных пользователями. Для начала необходимо зарегистрировать скрипт, который проверяет длину строковых данных, отправляемых в мобильную службу, и отклоняет слишком длинные строки (в нашем случае длиннее 10 символов).

1. Войдите на портал управления Microsoft Azure, нажмите Mobile Services и выберите свое приложение.

2. Нажмите вкладку Data (Данные) и выберите таблицу TodoItem.

3. Нажмите вкладку Script (Скрипт) и выберите операцию Insert (Вставить).

4.  Замените существующий скрипт следующей функцией и нажмите Save (Сохранить).

function insert(item, user, request) {  if (item.text.length > 10) {  request.respond(statusCodes.BAD_REQUEST, 'Text length must be 10 characters or less.');  } else {  request.execute();  } }

Этот скрипт проверяет длину свойства text и отправляет сообщение об ошибке, если длина превышает 10 символов. В противном случае вызывается метод execute, который выполняет вставку.

ПРИМЕЧАНИЕ

Вы можете удалить зарегистрированный скрипт на вкладке Script (Скрипт), нажав Clear (Очистить) и затем Save (Сохранить).

Обновление клиента

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

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

2. В файле ToDoActivity.java найдите метод addItem и замените вызов метода createAndShowDialog на следующий код:

createAndShowDialog(exception.getCause().getMessage(), "Error");

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

3. В меню Run (Выполнение) нажмите Run (Выполнить), чтобы запустить приложение, введите в текстовое поле текст, длина которого превышает 10 символов, и нажмите кнопку Add (Добавить).

Убедитесь, что ошибка обрабатывается и сообщение об ошибке отображается.

Добавление метки времени

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

1. На вкладке Script (Скрипт) в портале управления замените существующий скрипт Insert следующей функцией и нажмите Save (Сохранить).

function insert(item, user, request) {  if (item.text.length > 10) {  request.respond(statusCodes.BAD_REQUEST, 'Text length must be under 10'); } else {  item.createdAt = new Date();  request.execute();  } }

Эта функция расширяет возможности прежнего скрипта вставки путем добавления свойства метки времени createdAt в объект, перед тем как он будет вставлен с помощью вызова request.execute.

ПРИМЕЧАНИЕ

При первом выполнении этого скрипта вставки необходимо включить динамическую схему. Включенная динамическая схема позволяет службам Mobile Services автоматически добавлять столбец userId в таблицу TodoItem при первом выполнении скрипта. Динамическая схема включена по умолчанию для каждой новой мобильной службы. Перед публикацией приложения в Магазине Windows ее необходимо отключить.

9.  В меню Run (Выполнение) нажмите Run (Выполнить), чтобы запустить приложение, введите в текстовое поле текст, длина которого не превышает 10 символов, и нажмите кнопку Add (Добавить).

Убедитесь в том, что новая метка времени не появляется в пользовательском интерфейсе приложения.

10.  В портале управления нажмите вкладку Browse (Просмотреть) в таблице todoitem.

Обратите внимание, что в таблице теперь присутствует столбец createdAt, а для вновь вставленного элемента имеется метка времени.

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

Повторное обновление клиента

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

1. На вкладке Package Explorer (Обозреватель пакетов) откройте файл ToDoItem.java и добавьте следующий оператор import:

import java.util.Date;

2.  Добавьте следующий код в определения частного поля в классе TodoItem:

./**  * Метка времени элемента, вставленного службой.  */ @com.google.gson.annotations.SerializedName("createdAt") private Date mCreatedAt;

ПРИМЕЧАНИЕ

Заметка SerializedName сообщает, что клиент должен выполнить сопоставление нового свойства mCreatedAtв приложении со столбцом createdAt, имеющим другое имя в таблице TodoItem. С помощью данной заметки приложение может задавать свойствам объектов имена, которые отличаются от имен столбцов в базе данных SQL. При отсутствии данной заметки возникает ошибка из-за различий в регистрах.

7.  Добавьте следующие методы в класс ToDoItem, чтобы задать новое свойство mCreatedAt:

./**  * Установка метки времени    *  * задаем метку времени  *            для параметра date  */ public final void setCreatedAt(Date date) {  mCreatedAt = date; } /**  * Возвращение метки времени  */ public DategetCreatedAt() {  return mCreatedAt; }

24.  На вкладке Package Explorer (Обозреватель пакетов) откройте файл ToDoItemAdapter.java и добавьте следующий оператор import:

import java.text.DateFormat;  // В методе GetView добавьте следующий код: String createdAtText = "";   if (currentItem.getCreatedAt() != null){  DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT);  createdAtText = formatter.format(currentItem.getCreatedAt()); }

Этот код генерирует строку с форматированной датой, если существует значение метки времени.

30.  Найдите код checkBox.setText(currentItem.getText()); и замените его следующим:

checkBox.setText(currentItem.getText() + " " + createdAtText);

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

31.  В меню Run (Выполнение) нажмите Run (Выполнить), чтобы запустить приложение.

Убедитесь, что метка времени отображается только для элементов, вставленных после обновления скрипта вставки.

32.  Замените существующий метод RefreshItemsFromTable следующим кодом:

private voidrefreshItemsFromTable() {   mToDoTable.where().field("complete").eq(false).and().field("createdAt").ne((String)null)  .execute(new TableQueryCallback<ToDoItem>() {  public void onCompleted(List<ToDoItem> result, int count, Exceptionexception, ServiceFilterResponse response) { if (exception == null) {  mAdapter.clear(); for (ToDoItem item : result) {  mAdapter.add(item);  } else {  createAndShowDialog(exception, "Error"); }                  }           });        }

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

58.  В меню Run (Выполнение) нажмите Run (Выполнить), чтобы запустить приложение.

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

Практическая работа по работе с данными завершена.