Application Server Connectivity > Sample 3: Recordset |
Sample 3: Recordset
Once you have easy access to a database, you add data storage and retrieval to your Flash Communication Server. This simple test retrieves all the recordsets from a database. The work is done by one SQL statement inside a CFM file.
When the user clicks the Get Records button, all the data in the database appears in the list box.
The doc_rset.fla file provides an interface in which the user simply selects the Get Records button and the record set is returned.
Before you start to re-create the sample, see Creating your working environment.
To create the user interface for this sample:
1 |
In the Flash MX authoring environment, select File > New to open a new file. |
2 |
To add an element for listing records, open the Components panel (Windows > Components), drag the List Box component onto the Stage, and give it the instance name |
3 |
To add the button for connecting to the server, drag a push button from the Components panel onto the Stage. In the Property inspector, give it the instance name |
4 |
Save the file as doc_rset.fla. |
5 |
Create a directory named doc_rset in your Flash Communication Server applications directory. |
To write the client-side ActionScript for this sample:
1 |
Create a new network connection and connect to the Flash Communication Server. |
// Create a network connection and connect
nc = new NetConnection();
nc.onStatus = function(info) {
trace(info.level + ": " + info.code + " " + info.description);
}
nc.connect("rtmp:/doc_rset/room_01");
|
|
2 |
Get a shared object, and update the list box ( |
// Get the records from the records shared object
recset_so = SharedObject.getRemote("records", nc.uri, false);
recset_so.onSync = function(list) {
// Clear the list box
records_list.removeAll();
// Fill in the records, with column headers first. Use
// the getColumnString function, defined below, to get
// all of the column information.
records_list.addItem(getColumnString(this.data.__COLUMNS__), -1);
|
|
3 |
In the same method, assign a variable name, |
for (var i in this.data) {
if (i == "__COLUMNS__")
continue;
var recstr = getRecordString(i,this.data[i], this.data.__COLUMNS__);
records_list.addItem(recstr, i);
}
records_list.sortItemsBy("data", "ASC");
}
|
|
4 |
Connect to the shared object. |
recset_so.connect(nc); |
|
5 |
Create the getColumnString function to get all the column data. |
// Get a string out of all column headers
function getColumnString(cols) {
var colstr = "";
if (cols.length > 0)
colstr += cols[0];
for (var i = 1; i < cols.length; i++)
colstr += ", " + cols[i];
return colstr;
}
|
|
6 |
Create the |
// Get a string containing all records in column order
function getRecordString(inx, recs, cols) {
var recstr = "";
if (cols.length > 0)
recstr += recs[cols[0]];
for (var i = 1; i < cols.length; i++)
recstr += ", " + recs[cols[i]];
return recstr;
}
|
|
7 |
Create the event handler for the |
// Call the server to initiate a database query and place
// the recordset data in 'records' shared object
function doGetRecords() {
nc.call("getRecords", null);
}
|
To write the server-side ActionScript for this sample:
1 |
Create a new file using your server-side ActionScript editor, and load the netservices.asc file to enable Flash Remoting through the Flash Communication Server. |
load("netservices.asc");
|
|
2 |
Get the |
gRecords = SharedObject.get("records", false);
//Set the default gateway URL
NetServices.setDefaultGatewayUrl("http://localhost:8500/flashservices/gateway");
//Connect to the gateway.
var gRemotingGateway=NetServices.createGatewayConnection();
|
|
3 |
Create a global object to hold the recordset. |
// An object to hold your service and recordset
gFoo = {};
|
|
4 |
Get a reference to the |
// Get a named service
gFoo.service = gRemotingGateway.getService("foo", gFoo);
|
|
5 |
Create the |
// Set up the onResult callback and call it bar_Result.
// The function must be named such that if you call
// xxx method on the foo service, it will result in
// xxx_Result method being called. You set the data in
// the shared object so the Flash client can display it.
gFoo.bar_Result = function(result) {
var cols = result.getColumnNames();
trace("Columns: " + cols);
gRecords.setProperty("__COLUMNS__", cols);
var reclen = result.getLength();
trace("number of records " + reclen);
for (var i = 0; i < reclen; i++) {
trace(i + "] " + result.getItemAt(i));
gRecords.setProperty(i, result.getItemAt(i));
}
}
|
|
6 |
In the |
application.onConnect = function(client) {
trace(application.name + " connect from " + client.ip);
application.acceptConnection(client);
}
|
|
7 |
Provide a prototype function that the client can call to get the records. |
Client.prototype.getRecords = function() {
// Call the bar method on foo service
var result = gFoo.service.bar();
trace("gFoo.service.bar returned " + result);
}
|
|
8 |
Save the file as main.asc in the /applications/doc_rset directory. |
To write the ColdFusion component for this sample:
1 |
Using your standard editor, create a new file and add code to query the database for all records. |
<cfquery name="flash.result" datasource="ExampleApps">
SELECT * FROM tblItems
</cfquery>
|
|
2 |
Save the file as bar.cfm in the foo directory under the directory where you publish all of your ColdFusion MX files. |