レコード更新画面を構成するMXMLとAcrtionScriptの生成
レコード更新画面を構成するMXMLとAcrtionScriptを生成するためのテンプレートクラスを下記に示します。
<?xml version="1.0" encoding="utf-8"?> <mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
width="400" height="500"
creationComplete="fnCreationComplete()"> <!-- 【1】 --> <mx:Script source="Update<%= class_name %>Function.as"/> <mx:VBox> <mx:HBox> <mx:Label width="130" text="~の更新" /> </mx:HBox> <!-- 【2】 --> <% for column in @model_klass.columns %> <% if column.name == "id" or column.name == "created_at" or column.name == "updated_at" %> <mx:HBox> <mx:Label width="80" text="ID" id="label_<%= column.name %>" /> <mx:Label id="text_<%= column.name %>" /> </mx:HBox> <% else %> <mx:HBox> <!-- 【3】 --> <% @dict = Dictionary.find_by_english("#{column.name}") %> <% if @dict %> <mx:Label width="80" text="<%= @dict.japanese %>"
id="label_<%= column.name %>" /> <% else %> <mx:Label width="80" text="<%= column.name %>"
id="label_<%= column.name %>" /> <% end %> <mx:TextInput id="text_<%= column.name %>" /> </mx:HBox> <% end %> <% end %> <mx:Button click="updateItem();" label="更新"
id="updateItemButton" /> </mx:VBox> </mx:Window>
<mx:Script source="Update<%= class_name %>Function.as"/>で、MXMLからAcrtionScriptを分離しています。<% for column in @model_klass.columns %>でデータベース上のテーブルにアクセスし、更新に必要なテキストボックスとラベルを生成します。<% @dict = Dictionary.find_by_english("#{column.name}") %>で、Dictionaryテーブルを使用して英語の列名を日本語に変換しています。idは新規作成後に振られる番号、created_atとupdated_atはRuby on Railsにより割り当てられる値のため、レコード更新画面では表示のみを行うコードを生成しています。
import mx.rpc.soap.WebService; import mx.rpc.soap.LoadEvent; import mx.rpc.Fault; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.controls.Alert; private var webService:WebService; private var _id:Number; public function setId(id:Number):void{ _id = id; } private function fnCreationComplete():void{ text_id.text = String(_id); webService = new WebService(); webService.wsdl = "http://localhost:3000/<%= file_name %>_service/service.wsdl"; webService.addEventListener(LoadEvent.LOAD, onWSDLFindById); webService.FindById .addEventListener(ResultEvent.RESULT, onFindById); webService.loadWSDL(); webService.FindById .addEventListener(FaultEvent.FAULT, onFaultFindById); } // 【5】 private function onFindById(event:ResultEvent):void{ <% @model_klass = Module.const_get(class_name) %> <% for column in @model_klass.columns %> <% if column.name == "id" %> <% elsif column.name == "created_at" or column.name == "updated_at" %> text_<%= column.name %>.text = event.result.<%= column.name %>.getFullYear() + "/" + (event.result.<%= column.name %>.getMonth()+1) + "/" + event.result.<%= column.name %>.getDate() + " " + event.result.<%= column.name %>.getHours() + ":" + event.result.<%= column.name %>.getMinutes() + ":" + event.result.<%= column.name %>.getSeconds(); <% else %> text_<%= column.name %>.text = event.result.<%= column.name %>; <% end %> <% end %> } private function onFaultFindById(e:FaultEvent):void{ Alert.show("Fault string"+e.fault.faultString); } private function onWSDLFindById(loadEvent:LoadEvent):void{ webService.FindById(text_id.text); } //-------------------------------------------------------------------- // 更新 //-------------------------------------------------------------------- // 【6】 private function updateItem():void{ webService = new WebService(); webService.wsdl = "http://localhost:3000/<%= file_name %>_service/service.wsdl"; webService.addEventListener(LoadEvent.LOAD, onWSDLUpdate); webService.Update.addEventListener(ResultEvent.RESULT, onUpdate); webService.loadWSDL(); webService.Update.addEventListener(FaultEvent.FAULT, onFaultUpdate); } private function onUpdate(event:ResultEvent):void{ Alert.show(event.result.toString()); } private function onFaultUpdate(e:FaultEvent):void{ Alert.show("Fault string"+e.fault.faultString); } private function onWSDLUpdate(loadEvent:LoadEvent):void{ <% @model_klass = Module.const_get(class_name) %> var item:<%= class_name %> = new <%= class_name %>; <% for column in @model_klass.columns %> <% if column.name == "id" %> item.<%= column.name %> = Number(text_id.text); <% elsif column.name == "created_at" or column.name == "updated_at" %> <% else %> item.<%= column.name %> = text_<%= column.name %>.text; <% end %> <% end %> webService.Update(item); }
onFindByIdでレコード更新画面のオープン時にレコードを検索するウェブサービスを呼び出し、レコードを画面上に表示します。updateItemで[更新]ボタンの押下時にウェブサービスを呼び出し、データベース上のテーブルのレコードを更新します。
アプリケーションを実行するためのXMLの生成
最後に、アプリケーションを実行するためのXMLを生成するテンプレートを以下に示します。
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://ns.adobe.com/air/application/1.0"> <id><%= class_name %></id> <version>1.0</version> <filename><%= file_name %></filename> <name><%= class_name %></name> <description><%= class_name %></description> <copyright>seiichisan</copyright> <initialWindow> <title><%= class_name %></title> <content><%= class_name %>List.swf</content> <systemChrome>standard</systemChrome> <transparent>false</transparent> <minimizable>true</minimizable> <resizable>true</resizable> <visible>true</visible> </initialWindow> <installFolder>./</installFolder> <fileTypes> <fileType> <name>adobe.VideoFile</name> <extension>avf</extension> <description>Adobe Video File</description> <contentType>application/vnd.adobe.video-file</contentType> </fileType> </fileTypes> </application>
