Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Некоторое время назад я писал о своих экспериментах с DataSnap. Сейчас, в рамках всё того же проекта, у меня появилась  несколько модифицированная задача, где использование данной технологии будет более чем уместно. Вкратце опишу задачу.

Итак, имеется настольное приложение, работающее с БД MS Access (это не мой выбор и мы условились не обсуждать его здесь). Функционал приложения довольно обширный, но некоторая его часть связана с учетом рабочего времени. На ПК запускается таймер, по окончанию его работы в БД заносятся данные об отработанном времени, выполняемом проекте и т.д. Идея заключается в том, что бы этот таймер можно было запускать на мобильном устройстве, а информация с него попадала в базу на ПК.

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

Создание сервера

Создаем новый проект.

  • Выбираем  File > New > Other из главного меню;
  • В ветке DataSnap Server выбираем DataSnap REST Application;

DataSnap00

 

  • Настраиваем тип приложения.

 

Я выбрал Stand-alone application.  Проще в отладке, да и в использовании.

DataSnap01

 

На втором экране визарда – VCL Application. Согласитесь, ни под чем, кроме Windows мы с БД MS Access не свяжемся. Смысл использовать FireMonkey отпадает.

DataSnap02

Порты проверить не лишне, но в принципе все по-умолчанию.

DataSnap03

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

DataSnap04

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

DataSnap05

И, наконец, проект следует сохранить.

DataSnap06

  • Переименовываем модули и сохраняем проект

С помощью визарда мы создали шаблон приложения с заготовками кода и двумя тестовыми методами сервера (большинство руководств по DataSnap как раз и ограничиваются примерами работы с этими методами)

Дабы в последствии не плодить модули с именами подобными FormUnit723 я предпочитаю сразу переименовывать модули и имена форм. Здесь нужно быть внимательным и при необходимости использовать Refactoring, поскольку имена форм могут встречаться в автоматически сгенерированном коде.

Формы я переименовал в fSrvMainMyServerMethods и MyWebModule. Соответствующие модули получили имена uSrvMain, uServerMethods и uWebModule.

Запускаем приложение. Если в процессе переименования возникли ошибки – исправляем.

DataSnap08

  • Тестируем сервер;

Запускаем сервер кнопкой Start. Затем нажимаем “Open Browser”. По адресу http://localhost:8080/ должна появитья страница следующего вида:

DataSnap09

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

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

 Настройка подключения к БД с помощью FireDAC компонентов

Нашей задачей на данном этапе будет отобразить список пользователей из таблицы tblEmplyees.

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

  • Размещаем в DataModul’е MyServerMethods компонент TFDConnection; Настраиваем  подключение к БД;

DataSnap10

  • Размещаем компоненты TFDGUIxWaitCursor, TFDPhysMSAccessDriverLink. Они не требуют настроек.
  • Размещаем компоненты TFDStanStorageJSONLink и TFDStanStorageBinLink.
  • Размещаем компонент TFDQuery и настраиваем его.
  • Переименовываем его в qEmployees;
  • Определяем значение свойства Connection;
  • Вводим SQL выражение (в моем случае SELECT * FROM tblEmployees);
  • В редакторе полей задаем список полей (пункт Field Editor из контекстного меню);

Определение методов сервера

  • В модуле uServerMethods в секции Uses подключаем модуль Data.FireDACJSONReflect;
  • В секции Public (рядом заголовками двух тестовых методов) создаем заголовок функции GetEmployees;

 

  public
    { Public declarations }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
 
    function GetEmployees: TFDJSONDataSets;
 

  • Используя class completion (CTRL-SHIFT-C), создаем тело метода в разделе implementation и вписываем следующий код.

 

function TMyServerMethods.GetEmployees: TFDJSONDataSets;
begin
  // Делаем запрос неакитвным.
  qEmployees.Active := False;
  Result := TFDJSONDataSets.Create;
  // Класс "TFDJSONDataSetsWriter" предоставляет статический метод "ListAdd".
  // Преобразует результат запроса в "TFDJSONDataSets".
  TFDJSONDataSetsWriter.ListAdd(Result, qEmployees);
end;

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

Во-первых, для подключения к DataSnap серверу нам потребуется знать IP машины, на которой он запущен. Умеете определять IP своей машины? Правильно, ipconfig /all

DataSnap11

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

В следующем посте рассмотрим создание клиентского приложения.

 

365


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

2 комментария: Создание мобильного DataSnap приложения #0

  • Доброго здоровья Александр.

    Прежде всего хочу поблагодарить за труд в написании подобных статей. Очень помогает разобраться с новыми (для себя) технологиями.

    Попробовал создать свой проект на основе Ваших статей, все заработало с первого раза.
    Но есть один вопрос. Все работает замечательно только если и сервер и клиент вертятся на одной машине.
    Как только я переношу сервер на другую машину в локальной сети (админ создал для экспериментов вирт. машину) то все ломается, получаю ошибку – HTTP/1.1 500 Internal Server Error.
    IP-адрес на клиенте указываю сетевой машины.
    На ней же стартую сервер и проверяю его работоспособность, работает (баузер реагирует). Но клиент не может достучаться до него. Куда смотреть, что править не пойму.

    • Дмитрий, думаю это Firewall. Хотя может быть и неверные сетевые настройки виртуальной машины.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика