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. Процесс преобразования данных Flash Remoting MX
Подключение Flash Remoting MX библиотек в ActionScript файлы
В первой версии Flash Remoting MX есть возможность подключать 3 библиотеки:
Классы Flash Remoting MX
Подключая вышеописанные библиотеки, вы можете использовать 5 классов:
Flash Remoting MX с использованием ColdFusion MX
В компании Macromedia прекрасно осознают, что технология Flash Remoting MX может быть центром внимания как со стороны флеш разработчиков, успевших привыкнуть к синтаксису ActionScript, так и со стороны CF разработчиков, прекрасно освоивших язык разметки CFML.
В этой связи Macromedia предлагает один из 3-х вариантов Flash Remoting MX с использованием ColdFusion MX:Компоненты 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>.
Рисунок 2. Режим работы в Macromedia Flash MX
Такой способ использования 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.
Рисунок 3. Режим работы в Macromedia Dreamweaver MX
Теперь, когда у нас уже есть компонента, создадим файл curMeetingFromCFC.fla и для первого кадра в Actions - Frame запишем следующий код:
В представленном примере кода мы подключили уже знакомые нам библиотеки NetServices.as и NetDebug.as. Также определили путь к шлюзу. Заметим, что значение переменной CurrentMeeting состоит из наименования каталога (где расположен проект) и наименования cfc файла, которые разделены между собой точкой.Далее обращаемся к функции getCurMeet компоненты ColdFusion по всем правилам, описанным в примере использования ActionScript на стороне сервера.
Рисунок 4. Результат работы приложения
© 2002-2005 г. Вадим Пушкарев