SHOEISHA iD

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

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

Cloud SQLで学ぶ業務・基幹系アプリ再入門

Cloud SQLとHTML5のWeb Storageで高速仕訳入力

Cloud SQLで学ぶ業務・基幹系アプリ再入門(2)

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

Cloud SQLとWeb Storageを使用した仕訳データ登録サンプル

 ここから第2回のサンプルに入っていきますが、サンプルは2つの処理プログラムから構成されます。

 1つはクラウドデータベース(MySQL)にある勘定データをWebクライアントのlocalStorageに書き込む処理で、もう一つは書き込まれたローカルの勘定データを使用して仕訳データを登録する処理です。

1 アカウントデータのlocalStorage書き込み

1.1 localStorageアカウント管理画面

図2 localStorageアカウント管理画面
図2 localStorageアカウント管理画面

 図2はlocalStorageアカウント管理の初期表示画面です。この画面では画面上部の4つのボタンが主に使用されます。

図3 アカウントデータのlocalStorage書き込み
図3 アカウントデータのlocalStorage書き込み

 図3は右上の「アカウント全件ローカル登録」ボタンをクリックした時の画面表示です。このボタンクリックでクラウド上にあるMySQLからアカウントデータ(勘定コードと勘定科目名のセット)を全件ダウンロードし、ローカルPCにキー・バリュー型データとして書き込みます(Web Storage)。

 他に「クラウドアカウント全件参照」ではクラウドMySQLに書き込まれているアカウントデータを全件表示し、「ローカルアカウント全件参照」ではローカルのWeb Storageに書き込まれているアカウントデータの全件表示を行います。また、「ローカルアカウント表示クリア」では画面表示のアカウントデータをクリアします。

1.2 クライアントコード

リスト2 クライアントHTMLとJavaScript(addAcctLocal.htm)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>localStorage</title>
<script type="text/javascript" src="../jslib/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
  //(1)このブラウザでWeb Storageが使用可能か確認
  if (localStorage){
    $("#stat").text("このブラウザはlocalStorage使用可能です。");
  }else{
    $("#stat").text("このブラウザはlocalStorage使用できません。");
  }
  //(2)以下画面上部のボタンクリックに対応した処理関数呼び出し。
  $("#revallcloud").click(revallcloud);
  $("#addalllocal").click(addalllocal);
  $("#revalllocal").click(revalllocal);
  $("#clralllocal").click(clralllocal);
});
function revallcloud(){  //(3)クラウドMySQL登録の勘定データ表示
  var query = {};
  query["mode"] = "getAllAcct";
  $.get("/acctsvlt", query, function(json){    //(4)
    var dat = $.parseJSON(json);               //受信データ(勘定データ)をJSオブジェクトに変換
    for(var i = 0; i < dat.acct.length; i++){  //ループ処理で受信勘定データを全件表示
      var acct_code = dat.acct[i].acct_code;
      var acct_name = dat.acct[i].acct_name;
      items.options[items.options.length] = new Option(acct_code+" : "+acct_name, acct_code);
      //(5)勘定データの全件表示(selectメニューフィールド)
    }
    $("#stat").text("クラウド登録 アカウント 参照完了");
  });
}
function addalllocal(){  //(6)Web Storageを使用して勘定データlocalStorage書き込み
  var query = {};
  query["mode"] = "getAllAcct";
  $.get("/acctsvlt", query, function(json){  //クラウドサーバに勘定全件参照リクエスト送信
    var dat = $.parseJSON(json);
    for(var i = 0; i < dat.acct.length; i++){
      var acct_code = dat.acct[i].acct_code;
      var acct_name = dat.acct[i].acct_name;
      localStorage.setItem(acct_code, acct_name);
      //(7)勘定データをlocalStorage書込
      var acct_name2 = localStorage.getItem(acct_code);
      //(8)書き込んだローカルの勘定データ読み取り
      items.options[items.options.length] = new Option(acct_code+" : "+acct_name2,  acct_code);
      //(9)読み取った勘定データの表示
    }
    $("#stat").text("クラウド アカウント ローカル登録完了");
  });
}
function revalllocal(){  //(10)localStorageの勘定データ全件表示
  $("#items").html("");  //(11)画面クリア
  for (var i = 0; i < localStorage.length; i++) {
    var acct_code = localStorage.key(i);              //(12)
    var acct_name = localStorage.getItem(acct_code);  //(13)
    items.options[items.options.length] = new Option(acct_code + ":" + acct_name, acct_code);
  }
  $("#stat").text("ローカル登録 アカウント 参照完了");
}
function delalllocal(){  //(14)表示勘定データの全件クリア
  for (var i = 0; i < localStorage.length; i++) {
    var acct_code = localStorage.key(i);
    localStorage.removeItem(acct_code);  //(15)
  }
  $("#stat").text("ローカル登録 アカウント 削除完了");
}
function clralllocal(){
  $("#items").html("");  //selectメニューのオプションフィールドを全件クリア
  $("#stat").text("表示クリア完了");
}
function add() {
  localStorage.setItem($("#key").val(), $("#val").val());
  rev();
}
function rev() {
  $("#items").html("");
  for (var i = 0; i < localStorage.length; i++) {
    var key = localStorage.key(i);
    var val = localStorage.getItem(key);
    items.options[items.options.length] = new Option(key+":"+val, key);
  }
}
function del() {
  var items = $("#items")[0];
  if (items.selectedIndex < 0){ return; }
  var selected = items.options[items.selectedIndex].value;
  localStorage.removeItem(selected);  //選択された項目を削除
  rev();
}
</script>
</head>
<body>
<h2 style="color:#aa0022">localStorageアカウント管理</h2>
<div>
  <input type="button" id="revallcloud" value="クラウドアカウント全件参照 "/>
  <input type="button" id="addalllocal" value="アカウント全件ローカル登録  "/>
</div>
<div>
  <input type="button" id="revalllocal" value="ローカルアカウント全件参照"/>
  <input type="button" id="clralllocal" value="ローカルアカウント表示クリア"/>
</div>
ステータス: <span id="stat"></span>
<hr/>
<select id="items" size="10" style="width: 250px"></select>
<hr/>
<input type="button" onclick="add()" value="アカウント登録 "/>
コード:<input type="text" size="6" id="key"/>
アカウント名:<input type="text" size="16" id="val"/>
<br/>
<input type="button" onclick="del()" value="アカウント削除"/><br/>
</body>
</html>
画面ロード完了時

 リスト2で画面ロード完了後に実行される処理は2種類で、1つは(1)のif文以下で行われる、使用ブラウザのlocalStorage対応確認と、(2)以下での画面上部4種類のボタンクリック時の関数呼び出し定義です。

revallcloud関数

 この関数では、(4)の$.getメソッドでクラウドサーバに勘定全件参照リクエストを送信し、レスポンス受信したJSONフォーマットデータをfor文の繰り返し処理で全件表示しています。Cloud SQLを使用する場合も一般的なサーブレットアクセスと変わるところはありません。

 複数レコードの参照表示などでは、テーブル構成で表示する場合も多いですが、ここでは(5)でselectメニューへのオプション項目追加形式で表示しており、この方法では各項目の表示処理を1行コードで済ませることができます。

addalllocal関数

 この関数での処理内容はrevallcloudとほとんど同じですが(7)(8)の2行が追加されています。クラウドサーバから受信した勘定コード(acct_code)と勘定名(acct_name)を(7)でlocalStorageに書き込み、(8)で確認のため、書き込まれた勘定名をlocalStorageで読み込んでいる部分だけが追加されています。なお、(9)ではlocalStorageを参照した勘定名を表示するようにしています。

 この関数での処理は、クラウド上のデータベースとローカルのWeb Storageの連携準備ということになりますが、このように簡単に行うことができます。

revalllocal関数

 (10)のrevalllocal関数では、localStorageに書き込まれた勘定データを全件表示しています。

 for文内、(12)のlocalStorage.key(i) でi番目の書込項目キーを取得し、(13)では取得したキーを使用して勘定科目名を取得しています。

delalllocal関数

 delalllocal関数の処理手順は、revalllocalと同じですが(15)のremoveItemメソッドで削除しています。

1.3 サーバ側コード

 サーバ側コードは、次の仕訳データ登録と同じサーブレットとビーンズが使用されていますので、仕訳データ登録処理手順の後にまとめて紹介します。

次のページ
2 仕訳データの入力とDB登録

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Cloud SQLで学ぶ業務・基幹系アプリ再入門連載記事一覧

もっと読む

この記事の著者

清野 克行(セイノ カツユキ)

慶應義塾大学工学部電子物理専攻卒。日本IBM、日本HPで、製造装置業を中心とした業務系/基幹業務系システムのSE/マーケティングや、分散アプリケーションによる社内業務システム開発などに携わる。現在は、クラウドやAjax関連の/ソフト開発/書籍執筆/セミナー講師/コンサルティング、などを行っている。情...

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング