SHOEISHA iD

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

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

Flash CS3とRoRで構築する業務アプリケーション

Flash CS3とRoRで構築する業務アプリケーション 第2回

Flashによる生産管理系アプリケーション - 品目マスタメンテナンスの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード 003-Flash_.zip (809.9 KB)
ダウンロード 004-RoR_.zip (13.4 KB)

仕入先コードテキストボックスからのフォーカスアウト

 次に、仕入先コードテキストボックスからフォーカスアウトした際に、仕入先名をセットする方法に関して説明します。

仕入先コードテキストボックスからのフォーカスアウト
import mx.data.components.WebServiceConnector;

var shiiresakiCdListener:Object = new Object();
shiiresakiCdListener.result = function(evt:Object) {
    // (1)
    textboxShiiresakiMei.text = evt.target.results.shiiresaki_mei;
};
// (2)
var shiiresaki_cdConn:WebServiceConnector = new WebServiceConnector();
shiiresaki_cdConn.addEventListener("result", shiiresakiCdListener);
shiiresaki_cdConn.WSDLURL = "http://localhost:3000/mst_shiiresaki_service/wsdl";
shiiresaki_cdConn.operation = "FindByShiiresakiCd";

shiiresakiCdListener.focusOut = function() {
    trace("今、フォーカスアウトしました。" + textboxShiiresakiCd.text);
    // (3)
    shiiresaki_cdConn.params = [textboxShiiresakiCd.text];
    shiiresaki_cdConn.trigger();
}
textboxShiiresakiCd.addEventListener("focusOut", shiiresakiCdListener);

 (2)にて、仕入先コードテキストボックスからフォーカスアウトした際に、呼び出すWebサービスの設定を行っています。

 (3)では、引数に仕入先コードを設定し、triggerにてWebサービスを呼び出しています。

 Webサービスを呼び出し結果を受け取った後、(1)で取得した仕入先名を画面上のテキストボックスに設定しています。

品目マスタを登録する方法

 画面に入力された情報を品目マスタに登録する方法に関して、説明します。

品目マスタの準備

 まず、品目マスタをデータベース上に作成します。

0xx_create_mst_hinmoku.rb
class CreateMstHinmoku < ActiveRecord::Migration
  def self.up
    # 品目マスタ
    create_table :mst_hinmokus do |t|
      t.column :hinmei   , :string, :limit=>64
      t.column :zaishitsu, :string, :limit=>64
      t.column :kikaku   , :string, :limit=>64
      
      t.column :buhin_shikibetsu_id, :integer, :limit=>11
      t.column :tehai_kubun_id     , :integer, :limit=>11
      t.column :zaiko_kubun_id     , :integer, :limit=>11
      t.column :shikyu_kubun_id    , :integer, :limit=>11
      
      t.column :pass_flag          , :string , :limit=>1
      t.column :tenkai_stop        , :string , :limit=>1
      t.column :kit_kubun          , :string , :limit=>1
      
      t.column :shiiresaki_cd       , :string , :limit=>10
      t.column :shiiresaki_mei      , :string , :limit=>255
      t.column :shiire_keiyaku_tanka, :integer, :limit=>11
      t.column :keiyaku_date        , :datetime
      t.column :shiire_ruikei       , :integer, :limit=>11
    end
  end

  def self.down
    drop_table :mst_hinmokus
  end
end

 上記のスクリプトを作成し、rakeコマンドにてデータベース上に仕入先マスタを作成します。

rakeコマンドの実行
rake db:migrate

品目モデルクラスの作成

 次に、品目マスタのモデルクラスを作成します。Ruby on Rails 2.0 のActiveRecordクラスを継承した単純なクラスです。

mst_hinmoku.rb
class MstHinmoku < ActiveRecord::Base
end

品目マスタをメンテナンスするWebサービスの作成

 次に、品目マスタをメンテナンスするWebサービスを「MstWebServiceGenerator」により生成します。

 integerdatetimなどのデータ型に対応するため、生成したクラスを修正します。

mst_hinmoku_service_api.rb
module XmlrpcStruct
  class MstHinmoku < ActionWebService::Struct
    member :id, :integer
    member :hinmei   , :string
    member :zaishitsu, :string
    member :kikaku   , :string
    member :buhin_shikibetsu_id, :integer
    member :tehai_kubun_id     , :integer
    member :zaiko_kubun_id     , :integer
    member :shikyu_kubun_id    , :integer
    member :pass_flag  , :string
    member :tenkai_stop, :string
    member :kit_kubun  , :string
    member :shiiresaki_cd , :string
    member :shiiresaki_mei, :string
    member :shiire_keiyaku_tanka, :integer
    member :keiyaku_date        , :datetime
    member :shiire_ruikei       , :integer
  end
end

class MstHinmokuServiceApi < ActionWebService::API::Base

  api_method :find_all,
    :returns => [[MstHinmoku]]

  api_method :create,
    :expects=>[{:arg_mst_hinmoku=>XmlrpcStruct::MstHinmoku}],
    :returns=>[:string]      
    
  api_method :update,
    :expects=>[{:arg_mst_hinmoku=>XmlrpcStruct::MstHinmoku}],
    :returns=>[:string]      

  api_method :destroy,
    :expects=>[{:arg_mst_hinmoku=>XmlrpcStruct::MstHinmoku}],
    :returns=>[:string]      
end

データ型の作成

品目マスタの情報をActionWebServiceに対して引数として与えるためには、そのデータ型をActionScriptで用意する必要があります。

MstHinmoku.as
class MstHinmoku {
  public var id:Number;
  
  public var hinmei:String;
  public var zaishitsu:String;
  public var kikaku:String;
  
  public var buhin_shikibetsu_id:Number;
  public var tehai_kubun_id:Number;
  public var zaiko_kubun_id:Number;
  public var shikyu_kubun_id:Number;
  
  public var pass_flag:String;
  public var tenkai_stop:String;
  public var kit_kubun:String;
  
  public var shiiresaki_cd:String;
  public var shiiresaki_mei:String;
  
  public var shiire_keiyaku_tanka:Number;
  public var keiyaku_date:Date;
  public var shiire_ruikei:Number;
}

 ActionScript側のMstHinmokuとRuby on Rails ActionWebService側のMstHinmokuで、表3のような対応に基づき暗黙の型変換が行われ、Webサービスに対してデータを渡すことができます。

表3
ActionScript Ruby on Rails
Number integer
String string
Date datetime

データ型のインポート方法

 作成したデータ型をFlashの画面から利用するために、インポートする必要があります。まず、[挿入]メニューから新規シンボルを選択します。

 次に、図9に示される画面で、[名前]に「MstHinmoku」を入力し、[ActionScriptに書き出し]と[最初のフレームに書き出し]にチェックし[OK]ボタンを押下することで、MstHinmokuのデータ型が使用できるようになります。

図9-トゥイーン

ActionWebServiceによる品目マスタの登録

 最後に、ActionWebServiceを呼び出して、品目マスタを登録します。

ActionWebServiceによる品目マスタの登録
import mx.data.components.WebServiceConnector;

var torokuAfterListener:Object = new Object();
// (1)
torokuAfterListener.result = function(evt:Object) {
    trace("登録できました。");
    labelMessage.text = evt.target.results;
};
// (2)
torokuAfterListener.status = function(stat:Object) {
    if (stat.code == "WebServiceFault"){
        trace(stat.data.faultcode);
        trace(stat.data.faultstring);
        trace(stat.data.detail);
    }
};

var torokuListener:Object = new Object();
torokuListener.click = function(eventObj:Object) {
    var hinmoku:MstHinmoku = new MstHinmoku();
    // (3)
    hinmoku.id = 1;

    hinmoku.hinmei    = textboxHinmei.text;
    hinmoku.zaishitsu = textboxZaishitsu.text;
    hinmoku.kikaku     = textboxKikaku.text;
    
    // (4)
    hinmoku.buhin_shikibetsu_id = comboboxBuhinShikibetsu.selectedItem.data;
    hinmoku.tehai_kubun_id       = comboboxTehaiKubun.selectedItem.data;
    hinmoku.zaiko_kubun_id       = comboboxZaikoKubun.selectedItem.data;
    hinmoku.shikyu_kubun_id     = comboboxShikyuKubun.selectedItem.data;
    
    // (5)
    if (checkboxPassFlag.selected) {
        hinmoku.pass_flag = "1";
    } else {
        hinmoku.pass_flag = "0";
    }
    if (checkboxTenkaiFlag.selected) {
        hinmoku.tenkai_stop = "1";
    } else {
        hinmoku.tenkai_stop = "0";
    }
    if (checkboxKitKubun.selected) {
        hinmoku.kit_kubun = "1";
    } else {
        hinmoku.kit_kubun = "0";
    }
    
    hinmoku.shiiresaki_cd = textboxShiiresakiCd.text;
    hinmoku.shiiresaki_mei = textboxShiiresakiMei.text;
    
    // (6)
    if (textboxShiireKeiyakuTanka.text.length > 0) {
        hinmou.shiire_keiyaku_tanka = parseInt(textboxShiireKeiyakuTanka.text);
    } else {
        hinmoku.shiire_keiyaku_tanka = 0;
    }
    
    // (7)
    hinmoku.keiyaku_date = new Date();
    if (textboxShiireKeiyakuDate.text.length == 10) {
        trace(textboxShiireKeiyakuDate.text.substring(0,4));
        trace(textboxShiireKeiyakuDate.text.substring(5,7));
        trace(textboxShiireKeiyakuDate.text.substring(8,10));
        hinmoku.keiyaku_date.setFullYear(parseInt(textboxShiireKeiyakuDate.text.substring(0,4)));
        hinmoku.keiyaku_date.setMonth(parseInt(textboxShiireKeiyakuDate.text.substring(5,7))-1);
        hinmoku.keiyaku_date.setDate(parseInt(textboxShiireKeiyakuDate.text.substring(8,10)));
        trace(hinmoku.keiyaku_date.getFullYear());
        trace(hinmoku.keiyaku_date.getMonth());
        trace(hinmoku.keiyaku_date.getDate());
    }
    
    if (textboxShiireRuikei.text.length > 0) {
        hinmoku.shiire_ruikei = parseInt(textboxShiireRuikei.text);
    } else {
        hinmoku.shiire_ruikei = 0;
    }
    
    // (8)
    var torokuConn:WebServiceConnector = new WebServiceConnector();
    torokuConn.addEventListener("result", torokuAfterListener);
    torokuConn.addEventListener("status", torokuAfterListener);
    torokuConn.WSDLURL = "http://localhost:3000/mst_hinmoku_service/wsdl";
    torokuConn.operation = "Create";
    torokuConn.params = [hinmoku];
    trace("これから登録します。");
    torokuConn.trigger();
    trace("登録後");
};
buttonToroku.addEventListener("click", torokuListener);

 (1)にて、Webサービスの呼び出しが成功した場合の処理を記述します。

 (2)にて、Webサービスの呼び出しが失敗した場合の処理を記述します。faultcodeおよびfaultstringdetailにより、失敗した原因を判断できます。

 (3)以降のコードにて、Webサービスに送るためのデータであるhinmokuに画面の情報をセットしています。

 (4)では、コンボボックスで選択されているデータをselectedItem.dataに取得できるので、その値をセットしています。

 (5)では、selectedプロパティによりチェックボックスがチェックされているかどうかを判断できるので、チェックされている場合は1をセットします。

 (6)では、仕入契約単価が整数型なので、テキストボックスの内容をparseIntにより整数へ変換しています。

 (7)では、仕入契約日付テキストボックスに「YYYY/MM/DD」のようなデータが入っていると仮定して、テキストボックスの内容を日付型へ変換し、その値をhinmoku.keiyaku_dateにセットしています。

 (8)では、Webサービスの引数にMstHinmoku型のデータをセットし、Webサービスを呼び出すことで、画面上のデータを品目マスタに登録しています。

次のページ
品目マスタの登録テスト

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Flash CS3とRoRで構築する業務アプリケーション連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2881 2008/09/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング