SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

RoRのWebサービスと連携する、Adobe AIRアプリケーションの自動生成

Adobe AIRアプリケーションの自動生成とWebサービスとの連携

ダウンロード サンプルソース (7.7 KB)

AIRアプリケーションとActionWebService間をやり取りするデータ型を生成

 ActionWebServiceを通して、AIRアプリケーションからテーブルのレコード作成・更新・削除を行えますが、あらかじめテーブル構造に対応したデータ型を、AIRアプリケーション側でも作成しておく必要があります。

 このデータ型を作成するテンプレートを下記に示します。

data_type.rb
package
{
  public class <%= class_name %>
  {
    public function <%= class_name %>() {}
        <% @model_klass = Module.const_get(class_name) %>

    <% for column in @model_klass.columns %>
    <% if column.name == "id" %>
    public var <%= column.name %>:Number;
    <% elsif column.name == "created_at"
             or column.name == "updated_at" %>
    <% else %>
    public var <%= column.name %>:String;
    <% end %>
    <% end %>
  }
}

レコード作成画面を構成するMXMLとAcrtionScriptの生成

 レコード作成画面を構成するMXMLとAcrtionScriptを生成するためのテンプレートクラスを下記に示します。

new_mxml.rb
<?xml version="1.0" encoding="utf-8"?>
<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
width="300" height="350"
creationComplete="fnCreationComplete()">
<!-- 【1】 --> <mx:Script source="New<%= class_name %>Function.as"/> <% @model_klass = Module.const_get(class_name) %> <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" %> <% else %> <!-- 【4】 --> <% @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 %>" /> <% end %> <% end %> <!-- 【5】 --> <mx:Button click="newItem();" label="新規作成" id="newItemButton" /> </mx:VBox> </mx:Window>
  1. <mx:Script source="New<%= class_name %>Function.as"/>で、MXMLからAcrtionScriptを分離しています。
  2. <% for column in @model_klass.columns %>でデータベース上のテーブルにアクセスし、レコードの新規作成に必要なテキストボックスとラベルを生成します。
  3.  
  4. idは新規作成後に振られる番号、created_atupdated_atはRuby on Railsにより割り当てられる値のため、レコード作成画面ではこれらに対応するコードを生成していません。
  5.  
  6. <% @dict = Dictionary.find_by_english("#{column.name}") %>で、Dictionaryテーブルを使用して英語の列名を日本語に変換しています。
  7. newItemで[新規作成]ボタンの押下時にウェブサービスを呼び出し、
  8. データベース上のテーブルに新しいレコードを作成します。
new_function.rb
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 function fnCreationComplete():void{
}

//--------------------------------------------------------------------
// 新規作成
//--------------------------------------------------------------------
// 【5】
private function newItem():void{
  webService = new WebService();
  webService.wsdl =
      "http://localhost:3000/<%= file_name %>_service/service.wsdl";
  webService.addEventListener(LoadEvent.LOAD, onWSDLCreate);
  webService.Create.addEventListener(ResultEvent.RESULT, onCreate);
  webService.loadWSDL();
  webService.Create.addEventListener(FaultEvent.FAULT, onFaultCreate);
}

private function onCreate(event:ResultEvent):void{
  Alert.show(event.result.toString());
}

private function onFaultCreate(e:FaultEvent):void{
  Alert.show("Fault string"+e.fault.faultString);
}

private function onWSDLCreate(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 %> = 1;
    <% elsif column.name == "created_at"
             or column.name == "updated_at" %>
    <% else %>
      item.<%= column.name %> = text_<%= column.name %>.text;
    <% end %>
  <% end %>
  webService.Create(item);
}

次のページ
レコード更新画面を構成するMXMLとAcrtionScriptの生成

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

ryujinseiichi(リュウジンセイイチ)

http://ryujinseiichi.sblo.jp/ RubyやAIRなどの新規技術に興味があり、研究を行っています。 最近、seasar2やBPMの研究も始めました。  

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2715 2009/10/20 17:09

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー