本篇教程适合: 一切有毅力做持续性学习的朋友
本篇教程不适合: 懒鬼
序言
ColdFusionMX能干什么?
帮你运行你的ColdFusion格式文件。包括后缀名为.cfm和.cfc等等类型程序文件(当然,你用.cfm的文件包含全是静态HTML代码在ColdFusion上运行也没人说你)。
内置的FlashRemoting能够高效安全快速的向Flash为界面的应用传递大量的数据(众所周知,通过get和post传递数据总是那么不叫人放心),通过CFMX内置的Remoting,不仅仅能传数据,还能依照开发者的逻辑去处理数据。
ColdFusionMX能够让你成立自己的公司,做自己的业务应用,开发自己的产品,体验自己的成功(此乃后话)。
ColdFusionMX不能干什么?
帮你找女朋友,或者更多的女朋友。如果你的目的是这个,请去学习使用QQ或MSN。
帮你做饭或者叫你起床。
还有更多不能帮你做,尤其是不能帮你写程序。如果想写程序,请使用自己的头脑和双手。
上面我们讲到的ColdFusion就是我们所说的“冰”。接下来,我们要介绍“火”。它就是Macromedia刚刚推出的FlashMX全功能数据操作组件“FireFly”。
FireFly是什么?
全名为“Data Connection Kit”,以组件的形式存在于FlashMX中,用于FlashMX开发出能够和后台数据库及多种数据格式文件进行数据协同操作的工具。真正意义上讲,应该是“Data Connection Kit”(以下简称为DCK)这款工具包含“FireFly”这个Flash的数据组件。由于DCK中还带有一款开发者版本的Flash Remoting,所以DCK包含FireFly。但是我们在拥有了专业或者企业版本的ColdFusionMX的时候,就不在需要开发者版本的FlashRemoting。全功能的FlashRemoting已经内置在CFMX之中。我们所要的就是DCK中的FireFly组件。所以,在本篇教程中,FireFly就代表DCK,DCK指的就是FireFly。
FireFly英文文档说了一大堆介绍性废话,真正的FireFly的定义实际上就是一句,那就是(大家快拿好小板凳,小铅笔,小本本仔细听):
FireFly组件是让FlashMX同VB,VC,DELPHI和JAVA一样,拥有操作后台数据库和数据文件的API接口。
FireFly能干什么?
让FlashMX开发的Flash程序访问数据库或者数据文件(如XML)。
让FlashMX开发的Flash程序操作数据库或者数据文件(如XML)。
合起来操作第一点和第二点(^_^,塔积木的开发程序模式总是那么强大而有效)。
FireFly能够同.net.java.cfmx相结合。所有的逻辑不是都写在Flash里(好安全啊!),就像Flashcom一样,还有很多逻辑是在main.asc中,flash中的逻辑程序是和后台相互呼应的。
*请注意“访问”和“操作”的区别,前者可以理解为Select的Query,后者则是insert和update等等。
FireFly不能干什么?
它自己一个人什么也干不了。就像生小孩,一个男人或者一个女人总是不能成气候。Firefly是非常的,完全的,迫切的需要后台数据库或者数据格式文件和他协同工作。
它不能直接喂饱你的肚子。
同样,它也不能帮你找女朋友。
FireFly是怎样工作的?
这一段我偷个懒,FireFly自带的帮助对于它工作原理的描述实在是细致。它的帮助位置在C:\Program Files\Macromedia\Flash MX\Help\Firefly\FireflyHelp\FireflyHelp.htm,里面How does Firefly work就有这个部分的内容。
这个教程有必要稍微解释一下下面这张图:
- FireFly Data Engine是一个层,不是2个层。Connector/Resolver/DataSet共同构成这个中间层。
- 这个中间层的含义是一个容器,一个容纳数据集合的容器,这个容器中的数据供Flash player调用和操作。
- 这个层的数据处理能力和VB,VC中的数据控件实际上完成同样的功能。
在基本的都介绍过了以后,进入本篇教程的正题。
环境的配置
安装好FireFly和ColdFusionMX。Firefly的安装就是“双击Setup文件”,然后跟着提示往下装,直到“Finish”。如果这个还搞不定,还是不要看这篇教程了。ColdFusionMX的安装也是易如反掌,推荐你选择使用端口8500的Standalone模式(本篇教程也采用Standalone模式)。这种模式对于开发应用而言,安装就是一步到底。
软件都安装完毕后,接下来就是设定自己的运行环境,请跟着以下步骤做:
- 在C:\CFusionMX\wwwroot\路径下创建一个文件夹,名称叫做“Firecold”。如下图所示:
- 在C:\Program Files\Macromedia\Flash MX\Configuration\Firefly\Lib目录中,找到下图所示三个swf文件。依照不同的Firefly版本,可能文件名略有不同,不过没有关系。
- 将上图中的3个swf文件拷贝到第一步创建的Fireice文件夹中去。
- FireFly的组件能够从其本身内部映射到你的ColdFusion。Firefly组件能够把CFC和其中可用的方法都罗列出来。但是开发者还是需要做一件事情。在路径C:\Program Files\Macromedia\Flash MX\Configuration\Firefly\CFIDE下找到下图显示的文件。
- 把FxCFCInfo.cfc文件拷贝到路径C:\cfusionmx\wwwroot\CFIDE\下,如下图所示。只有这样,才能让Firefly组件侦测ColdFusion cfc Component的功能万无一失。注,Macromedia官方强调,如果用于产品服务器部署运行,请删除这个cfc文件,因为会有安全问题。
- 在DWMX中创建一个叫做Fireice的使用Coldfusion的站点。在fireice下创建一个叫做employee.cfc的页面。很快,我们就要在这个页面中添加方法。如下图所示。
- Fireice站点中的employee.cfc将要添加操作的方法。在添加操作的方法之前,先说明一下employee.cfc将用到安装完CFMX系统后自带的Data Source,名称是exampleapps。各位开发者在ColdFusionMX的数据源管理中都能看到这个DSN,这个数据源用于演示ColdFusion的示例。这个数据库也是CFMX安装后就有的。
- 接下来向employee.cfc中加入操作雇员的2个方法。注意,这两个方法的访问属性都是remote,是允许远程请求的方法。两个方法返回的值全部都是Query查询的数据集合。所以,<cfreturn>的值和<cfquery>的name属性的值一致。代码如下图。
- 为了保险,运行一下这个employee.cfc看看,打开http://localhost:8500/Fireice/employee.cfc。如果没有什么错误的话,应该是下面的图示:
- 在Fireice文件夹中创建一个Flash文件叫做employee.fla。如下图所示。
好了,环境基本搭好了,接下来就是准备创建Firefly的前台应用了。
Firefly组件开发详解
不要一听开发详解就觉的有多难,其实真正难的是我啊!!!想想,我先要搞定所有E文文档,然后自己先做一遍,最后才感拿出来给大家共享。还背着被骂的危险.......,我这个当的不容易啊。跑题了,言归正传。
首先,我们要做的能够让Firefly的组件在Flashmx环境中能够成功的连接ColdFusionMX的组件,就是刚才我们创建的employee.cfc文件。想想,做这个应用,你的组件连cfc的连接都不成功,你还玩个什么劲啊。所以,首要条件是搞定Firefly同Coldfusion的连接。
Firefly同ColdFusionMX的CFC连接靠什么?当然不是在办公室里大喊“你们俩快给我连上”就完事了。要用到的(也是必须用到的)就是Firefly的Remoting组件。你可以从FlashMX中找到这个组件,如下图所示:
接下来就跟着下面的步骤做:
- 打开我们先前创建的employee.fla。场景多大我不管,你自己决定,只要能放下数据组件并且显示数据就行。测试的时候感觉不合适,再调整也不迟。Firefly Remoting的组件一共有三个。分别是FxRecordSetConnector、FxRecordSetResover、FxSQLRecordSetConnector(不要被这么长的名字唬住了)。顾名思义,我们首先是要用到FxRecordSetConnector,这个组件就是创建一个数据访问集的连接器。它访问数据并返回符合要求的数据集合。说白了,就跟asp的recordset干的事情一样。点击FxRecordSetConnector并把它拖拽到flashmx的场景中,因为它是功能性组件,所以,没有图形界面(GUI),所以它在Flash场景中就显示一个小图标。如下图所示:
- 接下来说一下FxRecordSetConnector和FxSQLRecordSetConnector的区别。两者非常类似,但是前者的所有SQL语句都是放在服务器端的cfc中,后者则是不需要创建cfc文件,将sql语句放在客户端的flash中。哇!!!如果你搞个产品服务器运行,你自己说,SQL语句是放在服务器端安全呢,还是sql语句被客户端连同flash一起下载安全呢?由于前面我们看到的Firefly结构图中表示firefly传输的数据通过http方式传输,所以FxSQLRecordSetConnector的sql数据很容易被人修改成恶意的代码后再提交。我们还是用FxRecordSetConnector最好。
- 给场景中的这个组件一个实例名字叫做employee_con。如下图:
- 在属性面板中点击启动组件参数,如下图所示:
紧接着,我们就看到FxRecrodSetConnector组件的参数面板如下图所示:
- 我们需要设定组件参数面板中的Gateway、Service、Method三个参数。实际上,我们在Gateway一栏中输入以下地址:
http://localhost:8500/flashservices/gateway
然后点击地址右边的刷新的小图标,随后,点击Service的下拉按钮,从中选定我们想要的fireice.employee的服务即可,如下图所示:
- 选定了Fireice.employee服务后,method窗口同样可以选择对应fireice.employee服务的方法。我们选定UsersList方法。如果,我们没有把FxCFCInfo.cfc文件拷贝的操作按照我们上面的要求放在C:\cfusionmx\wwwroot\CFIDE\路径下,我们可能刷新的操作就失效了,那么就需要手动输入,最后设定好的形式就像下图。
- 现在数据集已经通过FxRecordSetConnector请求回来了,我们接下来需要一个类似容器的东西来装这些数据。就像我们去超市已经付帐买了一堆东西,钱都交了。最后总该有个大塑料带来装它们。在Flashmx里,我们进一步需要添加一个Firefly的FxDataSet的组件来负责容纳数据这个工作。FxDataSet如下图所示:
- 把FxDataSet组件拖动到场景上,给它一个实例名称叫做employee_ds。
- 启动employee_ds的组件参数面板,看到的情形如同下图。
- 选中Active的框选项,这样才能让数据集生效。
- 切换到Fields(数据集DataSet字段设定)面板,按照我们cfc中employee的query查询的字段来对应设定这里的内容。设定的字段包括EmployeeID,FirstName,LastName,Title,IsTemp,EMail,Phone,DeptIDFK,Personal。其中EmployeeID的Read Only应该选中,因为它是数据表的主键。另外,IsTemp的Type类型选成Boolean的值,只有0和1两个值。 设定的情况如下图所示。
- 除了EmployeeID和IsTemp两个字段以外,其他字段都类似下图设定,我们需要手动修改的只有Label和Name属性。其他都使用flash自动填入的属性值。
- 我们必须让employee_con和employee_ds能够通信,所以,还要做一项匹配的工作。打开employee_con实例的组件参数面板,在Property标签面板中的DataSet中输入employee_ds。这样就把两者联系起来了。
- 说到这里,我们豁然开朗。原来Firefly的数据操作方式和ColdFusion如此惊人的相似!!!设定FxRecordSetConnector的数据连接就像设定ColdFusionMX 数据源一样,都是做一个数据库的连接。而FxDataSet所作的事情就像coldFusionMX的<cfquery>标签一样!做的是数据库的查询。最后,还差一点!就是数据的显示!ColdFusionMX用<cfoutput>标签输入出<cfquery>中的字段查询结果值。而Firefly则需要用FxGrid组件去显示FxDataSet得到的查询结果。
- 同样在Firefly面板中选择FxGrid组件,拖拽到场景中,在属性中设定这个组件的宽和高的值(依自己爱好设定)。打开组件参数面板,按照下图设定组件参数。
Column Lines是选择数据表输出时是否用显示线分开每列数据。Dataset设定成FxDataSet的实例名称employee_ds。Row Lines是是否用显示线分开每行数据。Horiz Scroll则是水平方向上是否带有滚动条。
- 现在,该测试一下结果了。存储文件,用Ctrl+enter来看看结果:
我们已经前进了一大步!!!是否有成功的喜悦感?后面还有更精彩的!!!
本文作者: