SHOEISHA iD

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

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

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

基幹系システムの基本構成とCloud SQLのCRUD処理

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

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

2.3 従業員マスタ登録の画面操作

 2.1で見たように、基幹系システムではマスタ・テーブルが数多くあり、それらのテーブルにはシステム可動の前に、必要とされるデータをすべて準備しておく必要があります。このあたりがマスタデータの準備があまり必要でないソーシャル系との違いであり、また大変なところでもあるのですが、連載ではCloud SQLでのマスタデータ登録から見ていきます。

初期表示

 図5は従業員マスタ情報の初期表示画面で、この画面から従業員情報の登録・参照・更新・削除処理を行うことができます。

図5 従業員マスタCRUD処理の初期表示画面
図5 従業員マスタCRUD処理の初期表示画面

登録処理

 登録処理では画面上の入力/選択項目をセット後、「登録」ボタンをクリックすることによって実行されます。

 図6は登録処理実行後の画面ですが、初期表示画面にはなかった資格のフィールドに、「基本情報処理技術者」などのチェックボックスの選択項目が表示されており、そのいくつかが選択されています。

 このフィールドの表示は「職種」でSEを選択した場合に表示されるようになっており、この他職種で「経理」を選択した場合にも対応した選択項目が表示され、営業、人事、総務を選択した場合は資格フィールドがクリアされます。

図6 従業員マスタ登録処理
図6 従業員マスタ登録処理

参照処理

 参照処理では、図5の初期表示画面でキー項目(この場合は従業員番号になるでしょう)を入力して「参照」ボタンをクリックします。この場合も職種に対応する資格フィールドが、登録時にチェックされた状態で自動表示されます。

図7 従業員マスタ参照処理
図7 従業員マスタ参照処理

更新処理

 更新処理では、参照表示した内容を更新した後、「更新」ボタンをクリックします。図8では職種を営業に変更しているため、資格フィールドの表示はクリアされています。

図8 従業員マスタ更新処理
図8 従業員マスタ更新処理

削除処理

 削除処理は参照表示で内容確認後、「削除」ボタンのクリックで実行されます。

図9 従業員マスタ削除処理
図9 従業員マスタ削除処理

2.4 Cloud SQLで テーブル作成

 以上見てきた画面操作のCloud SQLのプログラムをここから作成していきます。最初に行うのは、従業員情報を格納するテーブルの作成です。テーブル作成は図10のApp Engine Consoleで作成済みのデータベース(business)を選択して、SQL PromptからDDL(CREATE TABLE)文を入力して行います。

 なお、データベースbusinessはSQL Promptから次の構文で簡単に作成できます。

CREATE DATABASE business
図10 App Engine Consoleでテーブル作成
図10 App Engine Consoleでテーブル作成

 従業員マスタのCRUD処理ではemp_masとlicenseの2つのテーブルを使用しています。それぞれのテーブルは次のCREATE TABLE文で作成しています。

リスト1 emp_masテーブル作成のDDL文
CREATE TABLE emp_mas (
  emp_no varchar(8) NOT NULL ,
  name varchar(20) default NULL,
  job varchar(10) default NULL,
  assign varchar(30) default NULL,
  PRIMARY KEY (emp_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
リスト2 licenseテーブル作成のDDL文
CREATE TABLE license (
  emp_no varchar(8) NOT NULL ,
  qua varchar(50) default NULL,
  KEY  (emp_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 licenseテーブルでは同じemp_noに対して任意数のレコード登録が行われます。従ってキー値重複のエントリを許さないPRIMARY KEYの使用は不可で、KEYにしてあります。

2.5 Webクライアント側プログラムの作成

 Cloud SQLでのマスタ登録サンプルは「Google Cloud SQLとBigtableのコード記述と処理スピードを比較・検討してみる」でも紹介しており、基本的な画面構成とプログラム処理は同じです。ただし今回のサンプルでは資格のフィールドでライセンス項目をセットするため、これまでに比べてその部分だけプログラム処理が追加されます。

 リスト3はこのサンプルのWebクライアントプログラムです。(A)~(D)でそれぞれ登録、参照、更新、削除処理を行っていますがポイントとなる処理にはコメントを入れてあります。jQueryを使用した一般的な非同期通信処理なので基本的に問題はないと思います。

リスト3 Webクライアント(index.htm)
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"/> 
<title>従業員マスタ情報</title>
<script type="text/javascript" src="/jslib/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
    ///////////////////////////////////////////
    //  (A) 登録処理
    $("#add").click(function(){    
        var query = {};
        query["mode"] = "add";
        query["emp_no"] = $("#emp_no").val();
        query["name"] = $("#name").val();
        //ラジオボタン値読み取り
        query["job"] = $("input[name='jobitem']:checked").val();
        //セレクトメニュー値読み取り
        query["assign"] = $("#assign").val();
        //チェックボックス値読み取り
        var license= "";
        $("[name='qua[]']:checked").each(function(){
            license += this.value + ",";
        });
        license = license.substr(0, license.length -1);
        query["license"] = license;
        //非同期通信で登録リクエスト送信
        $.post("/hrsvlt", query, function(res){
            var r = $.parseJSON(res)
            $("#stat").text(r.stat);
        });
    });
    /////////////////////////////////////////////////
    //  (B) 参照処理
    $("#rev").click(function(){
        var query = {};
        query["mode"] = "rev";
        query["emp_no"] = $("#emp_no").val();
        //非同期通信から参照処理実行
        $.get("/hrsvlt", query, function(res){
            var r = $.parseJSON(res);
            $("#stat").text(r.stat);
            $("#name").val(r.name);
            //ラジオボタン値セット
            $("input[name='jobitem']").val(new Array(r.job));
            //セレクトメニュー値セット
            $("#assign").val(r.assign);
            if (r.job == "SE"){
                set_se();
            }else if(r.job == "経理"){
                set_ac();
            }
            //チェックボックス値セット
            license = new Array();
            for(var i = 0; i < r.license.length; i++){
                license.push(r.license[i].qua);
            }
            $("input[name='qua[]']").val(license);
        });
    });
    ///////////////////////////////////////////////
    //  (C) 更新処理
    $("#upd").click(function(){
        var query = {};
        query["mode"] = "upd";
        query["emp_no"] = $("#emp_no").val();
        query["name"] = $("#name").val();
        //ラジオボタン値ゲット
        query["job"] = $("input[name='jobitem']:checked").val();
        //セレクトメニュー値ゲット
        query["assign"] = $("#assign").val();
        //チェックボックス値ゲット
        var license= "";
        $("[name='qua[]']:checked").each(function(){
            license += this.value + ",";
        });
        license = license.substr(0, license.length -1);
        query["license"] = license;
        //非同期通信で更新リクエスト送信
        $.post("/hrsvlt", query, function(res){
            var r = $.parseJSON(res)
            $("#stat").text(r.stat);
        });
    });
    ////////////////////////////////////////////////
    //   (D) 削除処理
    $("#del").click(function(){
        var query = {};
        query["mode"] = "del";
        query["emp_no"] = $("#emp_no").val();
        //非同期通信で削除リクエスト送信
        $.post("/hrsvlt", query, function(res){
            var r = $.parseJSON(res)
            $("#stat").text(r.stat);
        });
    });
    ////////////////////////////////////////////////////
    //  職種選択から資格項目表示
    $("#job").click(function(e){
        var job = e.target.id;
        if (job=="job1" || job=="job4" || job=="job5"){
            $("#license").html("");
        }else if (job == "job2"){
            set_se();
        }else if(job == "job3"){
            set_ac();
        }
    });
});
function set_se(){
    var tags = '<span>';
    tags += '<input type="checkbox" name="qua[]" value="基本情報技術者">基本情報技術者&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="システムアナリスト">システムアナリスト&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="ソフトウェア開発技術者">ソフトウェア開発技術者<br/>';
    tags += '<input type="checkbox" name="qua[]" value="アプリケーションエンジニア">アプリケーションエンジニア&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="プロジェクトマネージャー">プロジェクトマネージャ&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="オラクルマスター">オラクルマスタ&nbsp;';
    tags += '</span><hr/>';
    $("#license").html(tags);
}
function set_ac(){
    var tags = '<span>';
    tags += '<input type="checkbox" name="qua[]" value="簿記1級">簿記1級&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="簿記2級">簿記2級&nbsp;';
    tags += '<input type="checkbox" name="qua[]" value="簿記3級">簿記3級<br/>';
    tags += '<input type="checkbox" name="qua[]" value="公認会計士">公認会計士';
    tags += '<input type="checkbox" name="qua[]" value="税理士">税理士&nbsp;';
    tags += '</span><hr/>';
    $("#license").html(tags);
}
</script>
</head>
<body bgcolor="#f8f8f8">
    <span style="color:#aa0022;font-weight:bold" >従業員マスタ情報
    <input type="button" id="add" value=" 登録 "/></span>
    <input type="button" id="rev" value=" 参照 "/></span>
    <input type="button" id="upd" value=" 更新 "/></span>
    <input type="button" id="del" value=" 削除 "/></span>
    <hr/>ステータス: <nobr id="stat"></nobr><hr/> 
    キー:<input type="text" id="emp_no" size="12"/><br/>
    名前:<input type="text" id="name"/><hr/>
    <!-- ラジオボタン -->
    職種:<span id="job">
        <input type="radio" name="jobitem" id="job1" value="営業"/>営業
        <input type="radio" name="jobitem" id="job2" value="SE"/>SE
        <input type="radio" name="jobitem" id="job3" value="経理"/>経理
        <input type="radio" name="jobitem" id="job4" value="人事"/>人事 
        <input type="radio" name="jobitem" id="job5" value="総務"/>総務
    </span><hr/>
    <!-- セレクトメニュー -->
    所属:<select id="assign">
        <option value="">所属</option>
        <option value="東京本社">東京本社</option>
        <option value="新宿支店">新宿支店</option>
        <option value="新橋支店">新橋支店</option>
        <option value="横浜支社">横浜支社</option>
        <option value="横浜支社">大阪支社</option>
    </select><hr/>
    <!-- チェックボックス -->
    資格:<div id="license"></div>
</body>
</html>

 このWeb画面では3種類のコントロール(ラジオボタン、セレクトメニュー、チェックボックス)を使用していますが、jQueryでセットされた値を読み取る方法については、(A)登録処理でのコードサンプル、サーバから受信したデータからコントロールに値をセットする方法については、(B)の参照処理でのコードサンプルが参考になるはずです。

次のページ
まとめ

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング