Первые шаги в работе с ColdFusion MX и Flash Remoting MX

Технологию Flash Remoting, появившуюся не так давно, можно назвать "инструментом повышенной эффективности" для работы с ColdFusion MX. Flash Remoting позволяет легко использовать функциональность ColdFusion MX в ваших flash-приложениях, не выходя при этом за рамки привычного синтаксиса и объектной модели ActionScript. Далекое становится доступным.

 

Что вы узнаете из этой статьи

В этой статье по шагам описан процесс создания простого приложения на основе Macromedia Flash Remoting. Конечный .swf-файл будет использовать Flash Remoting для вызова серверного компонента ColdFusion MX (эти компоненты сокращенно называют CFC).

 

Для начала нужно сделать следующее

 

Написание серверного скрипта

Серверный скрипт представляет собой простой компонент ColdFusion. Вы можете найти файл под названием "HelloWorld.cfc" в каталоге с распакованным zip-файлом (cf_webroot\com\macromedia\test). Имя файла HelloWorld.cfc определяет имя сервиса (название серверного процесса, при помощи которого мы обращаемся к компоненту - прим. переводчика) для компонента. В данном случае имя сервиса - это "HelloWorld". Если вы откроете файл HelloWorld.cfc в любом текстовом редакторе, вы увидите следующий код:

Как вы видите простой компонент создается легко: сначала мы создаем сам компонент при помощи тега cfcomponent. Хотя этот компонент и представляет собой сервис для Macromedia Flash Remoting, сам по себе он еще ничего не делает.

Чтобы заставить этот компонент работать, добавим тег cffunction. При помощи этого тега мы добавляем к компоненту метод. Таким образом, у компонента появился метод (тег) cffunction с именем "sayHello", в который вложен тег cfreturn . Когда мы вызываем этот компонент, он возвращает строку "HelloWorld" тому приложению, которое его вызвало (URL, какая-либо служба и т.д.).

Примечание: в вашем компоненте может быть сколько угодно методов, в данном примере в нашем компоненте один метод "sayHello".

Обратите внимание, что атрибут access внутри тега cffunction имеет значение "remote". Этот атрибут необходим, если вы хотите предоставить вашим flash-клипам (или другим удалённым службам) доступ к методам компонента. Собственно, это всё, что нужно для создания компонента. Помните о пути к файлу:

cf_webroot\com\macromedia\test\HelloWorld.cfc
Почему необходимо размещать файл в этом каталоге?

Компоненты вызываются не только по их имени, для этого также используется путь к ним (в данном случае это cf_webroot\com\macromedia\test\). Размещая компонент в директории com\macromedia\test, мы получаем:

  1. Уверенность в том, что другой разработчик из вашей команды не перепишет ваш компонент "HelloWorld" другим компонентом с именем "HelloWorld".
  2. Наиболее предпочтительный способ организации компонентов.
Вы, наверное, заметили, что com\macromedia - это всего лишь обращенная строка macromedia.com. Используйте для своих компонентов свои доменные имена, например, net/foo для foo.net.

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

В директории cf_webroot\com\macromedia\test\ находится файл test.cfm со следующим кодом:
Файл test.cfm использует тег <cfinvoke> для вызова компонента и дальнейшей передачи результата через тег <cfoutput>. Рассмотрим тег <cfinvoke>, узнаем поподробнее, что же там происходит.

Cтрока component="com.macromedia.test.HelloWorld" указывает вызываемый компонент. Путь com.macromedia.test.HelloWorld указывает на файл com\macromedia\test\HelloWorld.cfc (указан относительный по отношению к директории сервера путь).

Cтрока method="sayHello" указывает, какая именно функция или метод должны быть исполнены в теле компонента.

Cтрока: returnVariable="message" определяет имя переменной для хранения данных, поступивших от компонента. Эта переменная нужна для возврата строки, поступившей от метода компонента. Тег cfoutput используется для отображения переменной в вашем браузере.

Сохраните вашу страницу ColdFusion под именем test.cfm и просмотрите её в окне браузера. В строке адреса необходимо ввести http://localhost/com/macromedia/test/test.cfm (поменяйте имя домена на нужное или добавьте номер порта к строке localhost в соответствии с вашими настройками, например http://localhost:8500/com/macromedia/test/test.cfm). В окне браузера должно отобразиться: "Hello World". Если ничего не отображается или вы получаете сообщение об ошибке, проверьте код компонента, код в файле test.cfm и правильность адреса в браузере.

Вы только что испытали мощь компонентов ColdFusion. Они позволяют создавать модульную программу, которая может использоваться совершенно по-разному, и даже разными приложениями (в нашем случае это ColdFusion MX и Macromedia Flash MX). Теперь мы готовы вызвать наш компонент из flash-клипа.

 

Создание flash-клипа для клиента

Создайте новый файл .fla в Macromedia Flash MX. В директории, куда вы распаковали zip-файл, можно найти файл gatewayHelloWorld.fla.

Файл .fla, который вы создадите в Macromedia Flash MX, довольно прост: он будет соединяться с сервером, вызывать в файле компонента HelloWorld.cfc метод, загружающий данные с сервера, и отображать их в окне output. Для начала посмотрите код для нашего flash-файла. Ниже дана пошаговая разбивка этого кода.

Клип состоит из одного кадра.

Вот код для нашего файла:
Сначала код присоединяет библиотеки ActionScript:
#include "NetServices.as"
#include "NetDebug.as"
Прикрепление этих файлов необходимо, так как они содержат код ActionScript и объекты, необходимые для соединения с Macromedia Flash Remoting. NetDebug.as необходим для проверки и отладки связи между Flash и сервером. После включения файла NetDebug.as можно отследить установку связи между клиентом и сервером в окне NetConnection в Flash МХ (Ищите в меню Window > NetConnection Debugger).

Затем наш код создаёт новый класс под названием Result. Методы в экземпляре данного класса используются для перехвата данных с сервера и последующей их обработки.

function Result() {
    this.onResult = function(result) {
        trace("onResult " + result);
	}

    this.onStatus = function(error) {
        trace("onStatus called " + error.description);
	}
}
В этом коде создаётся класс Result с двумя методами. Первый метод:
this.onResult = function(result) {
trace("Полученные данные с сервера: " + result);
}
получает ответ от компонента, находящегося на сервере. Когда поступают данные с сервера, вызывается метод onResult. В этом случае данные, полученные с сервера, с помощью метода trace() выводятся в окне output в Macromedia Flash MX.

Второй метод называется onStatus. Он вызывается в случае, если при попытке загрузки данных с сервера произошла ошибка. В таком случае данные об ошибке передаются методу onStatus. Описание ошибки можно получить через свойство description так, как это реализовано в данном методе. Сообщение об ошибке выводится в окне output в Flash MX с помощью метода trace(). Вот как это работает:

this.onStatus = function(error) {
trace("Ошибка: " + error.description);
}
Класс, содержащий эти методы, не обязательно должен называться Result.

После создания класса Result все готово для установки соединения с сервером. Сначала необходимо прописать путь к вашему серверу ColdFusion при помощи следующего кода. Если ваш сервер находится по другому адресу, внесите в этот код необходимые коррективы.

NetServices.setDefaultGatewayUrl("http://localhost:8500/flashservices/gateway");
Далее, используя объект NetServices, установим соединение с сервером. Вот код:
var gw = NetServices.createGatewayConnection();
Обратите внимание на то, что на данном этапе Flash MX не устанавливает соединения с сервером. Думайте, что объект, возвращаемый этим кодом, является соединением с сервером. Далее нам следует указать путь к компоненту (к которому мы хотим получить доступ) на сервере:
var server = gw.getService("com.macromedia.test.HelloWorld", new Result());
Обратите внимание, что этому методу передаются два параметра. Первый, com.macromedia.test.HelloWorld является путём к компоненту, и определяет тот компонент, с котором мы хотим соединиться (вы можете изменить этот путь в соответствии с местоположением вашего компонента). Второй параметр, new Result()создаёт экземпляр класса Result. Передача экземпляра new Result() данному методу означает, что метод должен вызвать функции объекта Result (onResult, onStatus), когда сервер посылает информацию или данные.

Примечание: Вам может показаться странным передача экземпляра класса Result через new Result(). Мы могли бы сделать это таким образом:

var r = new Result(); 
var server = gw.getService("com.macromedia.test.HelloWorld", r);
Однако поскольку мы не будем использовать этот экземпляр после загрузки данных, нам нет необходимости сохранять экземпляр класса в переменной.

Метод getService() возвращает объект, который представляет собой реальный компонент на сервере. В нашем случае мы сохранили его в переменной server. Теперь мы можем вызвать метод в нашем компоненте через переменную server, как показано в примере:
server.sayHello();
Именно здесь наш код вызывает сервис и компонент на сервере. Вот как протекает этот процесс:
  1. lash MX вызывает сервер ColdFusion MX, передавая ему имя компонента.
  2. Macromedia Flash Remoting определяет местонахождение компонента на основании пути, заданного во flash-клипе, и после этого вызывает функцию, также определённую в клипе.
  3. Функция в компоненте возвращает строку.
  4. Межсетевой интерфейс (gateway) получает от функции в компоненте строку и передаёт её flash-клипу.
  5. Flash-клип получает от сервера строку (через Flash Remoting) и передаёт её методу onResult()указанного объекта (в данном случае это экземпляр класса Result).
  6. Метод onResult()обрабатывает полученные данные.
Конечно, вам необязательно знать все подробности этого процесса, так как ColdFusion MX, Flash MX, и Macromedia Flash Remoting сами о них позаботятся.

 

Тестирование примера

Для тестирования нашего примера проделайте следующее.

  1. Убедитесь, что ColdFusion сервер работает.
  2. Протестируйте ваш клип в Flash MX (Control > Test Movie). В окне output должно появиться сообщение "Hello World", как показано ниже:

    Тестирование примера

  3. Обработайте полученную строку так, чтобы она отображалась в swf или html файлах. Например, можно присвоить данные динамическому текстовому полю.
  4. Опубликуйте приложение.
  5. Просмотрите его в web-браузере.

 

Заключение

Вы узнали, как сделать простой flash-клип, который использует Flash MX, ColdFusion MX и Macromedia Flash Remoting. Возможно, вам покажется, что вывод "Hello World" - не самое захватывающее из того, что можно сделать. Однако "Hello World" - всего лишь строка. Вы можете изменить компонент так, чтобы он возвращал другие типы данных - массивы, информацию из базы данных и т.д. Кроме того, вы можете использовать такие серверные компоненты и службы как:

для заполнения ваших массивов и баз данных. Эти возможности ColdFusion МХ позволят вам полностью использовать функциональность Macromedia MX на вашем сайте.


Источник: www.macromedia.com/desdev/mx/coldfusion/articles/startremoting.html
Перевод: Гришин Кирилл (sunman5(at)mail.ru)
Редактор: Сирык Ростислав (rost(at)flash-ripper.com)

 


Hosted by uCoz