Macromedia Flash Remoting MX с использованием Macromedia ColdFusion MX

Flash Remoting упрощает разработку Flash-приложений, позволяя напрямую взаимодействовать с удаленными серверными объектами. В данной статье описываются библиотеки и классы Flash Remoting МХ, а также подробно рассматриваются 3 варианта использования Flash Remoting MX: с ActionScript на стороне сервера, с применением обычных страниц ColdFusion, с помощью Компонентов ColdFusion.

Flash Remoting MX поддерживает объектно ориентированный доступ к компонентам ColdFuiosn MX, Java объетам и обработке XML документов для обмена данными с такими удаленными сервисами, как ColdFusion приложения, Enterprise Java Beans (EJB), Java классы, Mbean компоненты и .NET приложениям.

На сегодняшний день Macromedia Flash Remoting MX можно использовать на серверах приложений J2EE, Micrpsoft .NET, а также в сочетании с сервером ColdFuion MX. В этой статье будет уделено внимание последнему варианту.

 

Flash Remoting MX и типы данных

Когда Flash Remoting MX посылает данные от флеш приложения с серверу приложений, а затем они возвращаются обратно во флеш, то эти данные подвергаются конвертированию дважды:

  1. В клиенте флеш - между типами данных ActionScript и Action Message Format (AMF);
  2. В шлюзе сервера - между Action Message Format и родным языком одного из приложений (Visual Basic, CFML, Java или C#).
Процесс преобразования данных в 2 шага позволяет использовать Flash Remoting MX как нейтральную систему, которая является для передаваемых данных более эффективной. Таким образом, вы можете создавать флеш приложение, которое может работать со многими серверными приложениями (см. Рисунок 1).

Процесс преобразования данных Flash Remoting MX
Рисунок 1. Процесс преобразования данных Flash Remoting MX

Flash Remoting MX делает все преобразования данных автоматически. В большинстве случаев преобразование прямое: вы просто передаете ActionScript данные удаленной службе как аргументы и обращаетесь с возвращенными данными в ваших функциях обратного вызова. Чтобы гарантировать правильное поведение приложения, в некоторых случаях надо указывать типы возвращаемых данных.

 

Подключение Flash Remoting MX библиотек в ActionScript файлы

В первой версии Flash Remoting MX есть возможность подключать 3 библиотеки:

  1. #include NetServices.as - эта библиотека включает NetServices класс. Все Flash Remoting клиенты обычно используют этот класс. Это подключение также включает RecordSet класс.
  2. #include NetDebug.as - эта библиотека включает отладчик соединения NetConnection и классы NetDebug и NetDebugConfig. Включение этой библиотеки необходимо в период процесса разработки приложения. Для уже готовых рабочих проектов желательно удалять подключение этой библиотеки. Удаляя это подключение, вы предотвращаете доступ к отладке информации с отдаленных сайтов
  3. #include DataGlue.as - эту библиотеку следует использовать, если вам необходимы DataGlue методы для упрощения обеспечения набора данных RecordSet, чтобы отражать MX UI компоненты.

 

Классы Flash Remoting MX

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

  1. NetServices - устанавливает шлюз сервера и обеспечивает связь (NetConnection). Шлюз (gateway) - программное обеспечение, которое находится на стороне сервера.
  2. NetConnection - конфигурирует и управляет связями к шлюзу. Метод NetConnection.getService обеспечивает доступ к шлюзу сервера. Метод NetConnection.setCredentials предоставляет доступ к информации шлюза сервера по логину (login), обеспечивая определенный уровень безопасности. Этот класс также включает 4 меттода для отладки индивидуальных связей.
  3. NetDebug - необходим для отладчика NetConnection. Управляет местной связью между отлаживаемымм флеш приложением и NetConnection отладчиком. Включает единственный метод NetDebug.Trace, который позволяет отслеживать события отладчика NetConnection с определенным объектом ActionScript. Отладчик NetConnection информирует относительно Flash Remoting событий. Для ColdFusion MX эти события также включают деятельность сервера типа SQL-запроса.
  4. RecordSet - создает и управляет объектами набора данных RecordSet. Методы RecordSet включают функции, позволяющие создать наборы данных, добавлять, удалять, изменять и получать выборку набора данных.
  5. DataGlue - связывает объекты RecordSet с Flash MX компонентами типа ListBox или ComboBox, которые имеют ярлыки со связанными данными. Методы DataGlue.bindFormatStrings и DataGlue.bindFormatFunction позволяют заполнять UI-компонент данными из объекта RecordSet.

 

Flash Remoting MX с использованием ColdFusion MX

В компании Macromedia прекрасно осознают, что технология Flash Remoting MX может быть центром внимания как со стороны флеш разработчиков, успевших привыкнуть к синтаксису ActionScript, так и со стороны CF разработчиков, прекрасно освоивших язык разметки CFML.

В этой связи Macromedia предлагает один из 3-х вариантов Flash Remoting MX с использованием ColdFusion MX:
  1. ActionScript на стороне сервера с возможностью использования встроенных функций CF.HTTP и CF.QUERY;
  2. Страницы ColdFusion;
  3. Компоненты ColdFusion (CFC).

Компоненты ColdFusion являются новым понятием в весрии ColdFusion MX и в бльшей степени предназначены для "прогрессивных" CF-разработчиков. Консервативные же CF-разработчики могут использовать привычные страницы ColdFusion.

1) ActionScript на стороне сервера

Данный способ использования Flash Remoting MX подразумевает, что обмен данными с флеш клиентом осуществляется с использованием ActionScript кода на стороне сервера. Причем этот код должен раниться в файле с расширением ASR (ActionScript Remoting).

Предположим, нам необходимо передать информацию о запланированной встрече на сторону флеш клиента. При этом информация обо всех встречах хранится в базе данных. Для реализации этой задачи создадим файл curMeeting.asr и поместим его на стороне сервера ColdFusion MX.

Код в файле curMeeting.asr будет следующим:

Отметим, что в данном примере мы использовали одну из уже упомянутых функций CF.GUERY. Нетрудно заметить, что эта встроенная функция предназначена для выполнения SQL-запросов. Мы не будем подробно описывать все аргументы этой функции и останавливаться на синтаксисе, напомним лишь то, что в asr файлах вы также можете использовать встроенную функцию CF.HTTP для выполнения методов GET и POST к удаленным серверам по протоколу HTTP. Обратите внимание на предпоследнюю строку кода, расположенной перед завершающей фигурной скобкой. Команда return позволяет возвращать значения переменных, в данном случае мы возвращаем результат запроса. В данном примере мы не проверям результат запроса на количество получаемых записей, т.к. предполагаем, что запись всего одна.

Теперь, когда у нас уже организован ActionScript файл на стороне сервера, остается поработать над флеш клиентом. Для этой цели используем программу Macromedia Flash MX, где создаем файл curMeeting.fla и для первого же кадра в Actions - Frame записываем следующий код:

В приведенном выше примере в первую очередь подключаем две библиотеки NetServices.as и NetDebug.as для организации соединения со шлюзом и, при необходимости, для отладки этого соединения. Затем определяем путь к шлюзу и объявляем переменную CurrentMeeting. Заметим, значение этой переменной состоит из наименования каталога (где расположен ваш проект) и наименования asr файла, которые разделены между собой точкой.

Далее определяем функцию getCurMeet_Result и здесь необходимо вспомнить код файла curMeeting.asr. Наименование функции на стороне флеш клиента состоит из наименования функции, объявленной в ActionScript файле на стороне сервера, и ключевым словом Result, отделенным нижним подчеркиванием.

Таким образом, мы вызываем функцию из удаленного файла, расположенного на стороне сервера, и обрабатываем полученные данные на стороне флеш клиента. В данном случае мы просто присваиваем 3-м текстовым объектам полученные значения (дата, тема и тип встречи).

И последняя строка кода CurrentMeeting.getCurMeet(); уже непосредственно предполагает вызов функции на стороне сервера через заранее объявленную переменную CurrentMeeting.

Не забудьте - текстовые объекты во флеш клиенте, которым вы собираетесь присваивать значения, должны быть определены как Dynamic Text. Для получения сжатого файла curMeeting.swf в среде Macromedia Flash MX произведите публикацию или просто запустите тест фильма, нажав <Ctrl>+<Enter>.

Режим работы в Macromedia Flash MX
Рисунок 2. Режим работы в Macromedia Flash MX

2) Страницы ColdFusion

Такой способ использования Flash Remoting MX подразумевает, что обмен данными с флеш клиентом осуществляется с использованием обычных страниц ColdFusion (CFM/CFML файлы).

Например, для реализации поставленной нами задачи по транслированию информации о запланированной встрече на сторону флеш клиента создадим файл curMeeting.cfm.
Важно отметить, что для возврата значений переменных на сторону флеш клиента необходимо использовать внутреннюю переменную Flash.Result, как это показано в примере кода. В этом коде мы уже заботимся о том, чтобы результат запроса состоял из одной записи, применяя атрибут maxrows в теге cfquery.

В качестве флеш клиента за основу можно взять исходник (fla файл) из первого примера. Однако переменной СurrentMeeting следует указывать только наименование каталога, где расположен ваш проект:

CurrentMeeting - GatewayConnection.getService("MySite", this);
Причем наименование функции на стороне флеш клиента должно включать имя страницы ColdFusion и ключевого слова Result, отделенного нижним подчеркиванием:
function CurMeeting_Result(result) { }
И, соответственно, в этом случае вызов функции на стороне сервера через заранее объявленную переменную CurrentMeeting будет выглядеть так:
CurrentMeeting.curMeeting();
На страницах ColdFusion помимо переменной Flash.Result, позволящей возвращать значения переменной флеш клиенту, также можно использовать внутренние переменные Flash.Params (позволяет передавать значения переменных из флеш клиента в ColdFusion страницу) и Flash.Pagesize (определяет число записей возвращаемого набора данных из ColdFusion во флеш клиент).

Например, нам необходимо из флеш клиента передать 2 параметра на страницу ColdFusion, произвести с ними определенные действия и результат этого действия возвратить обратно флеш клиенту. Опять же, используя программу Macromedia Flash MX, создадим файл с именем muSumFLClient и для первого кадра в Actions записываем следующее:

#include "NetServices.as"

if (inited == null) {
inited = true;
NetServices.setDefaultGatewayUrl("http://localhost/flashservices/gateway/");
GatewayConnection = NetServices.CreateGatewayConnection();
CFMService - GatewayConnection.getService("MySite", this);
}

function mySumCFServer_Result(result) {
_root.SumValue.text = result;
}

var param1 = 4;
var param2 = 5;

CFMService.mySumCFServer(param1, param2);
Далее создадим страницу ColdFusion c именем mySumCFServer.cfm и укажем в ней этот код:
<cfset p1 = Flash.Params[1]>
<cfset p2 = Flash.Params[2]>
<cfset Flash.Result = p1 + p2>
Где в качестве возвращаемого значения передаем сумму 2-х параметров, полученных из флеш клиента.

3) Компоненты ColdFusion (CFC)

Данный способ более предпочтителен, нежели использование обычных cfm страниц. Вспомним нашу задачу - передача информации о запланированной встрече из базы данных на сторону флеш клиента, где в качестве запланированной встречи является запись с более поздней датой. Для реализации этой задачи на первом этапе создадим компонент curMeeting.cfc, воспользовавшись программой Macromedia Dreamweaver MX. Код в компоненте у нас будет таким:
<cfcomponent>

<cffunction name="getCurMeet" access="remote" returntype="query">
<cfquery name="CurMeetQuery" datasource="MyDataSourceName" maxrows="1">
SELECT date_meet, topic_meet as topic, name_typemeet as typemeet
FROM meeting, typemeeting
WHERE meeting.id_typemeet - typemeeting.id_typemeet AND date_meet > #Now()#
</cfquery>
<cfreturn CurMeetQuery>
</cffunction>

</cfcomponent>
Все компоненты начинаются и заканчиваются тегом cfcomponent. В нашем примере мы создали в компоненте одну функцию с удаленным доступом (remote), применяя атрибут access. Также вы можете организовывать фугкции и с другими уровнями доступа, но для флеш клиента следует указывать именно remote доступ.

Описывая типы данных Flash Remoting MX мы говорили, что для правильного поведения приложения в некоторых случаях надо указывать типы возвращаемых данных. Это тот самый случай и, здесь мы указываем тип query в атрибуте returntype в теге cffunction.

Режим работы в Macromedia Dreamweaver MX
Рисунок 3. Режим работы в Macromedia Dreamweaver MX

Для возврата значений переменных из Компоненты ColdFusion во флеш клиент следует использовать тег <cfreturn>. В нашем примере мы возвращаем значение переменной CurMeetQuery, являющейся результатом запроса. Обратите внимание на имя функции. По этому имени мы будем обращаться к функции из флеш клиента.

Теперь, когда у нас уже есть компонента, создадим файл curMeetingFromCFC.fla и для первого кадра в Actions - Frame запишем следующий код:

В представленном примере кода мы подключили уже знакомые нам библиотеки NetServices.as и NetDebug.as. Также определили путь к шлюзу. Заметим, что значение переменной CurrentMeeting состоит из наименования каталога (где расположен проект) и наименования cfc файла, которые разделены между собой точкой.

Далее обращаемся к функции getCurMeet компоненты ColdFusion по всем правилам, описанным в примере использования ActionScript на стороне сервера.

Результат работы приложения
Рисунок 4. Результат работы приложения


Источник: http://www.cfug.ru/publication.cfm?p=pub11

 


Hosted by uCoz