jQuery Mobileを使用したサンプル
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>営業状況報告</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
<script type="text/javascript">
$(function(){
if(getCookie("staff_info") != ""){ //(1)
var staff_info = $.parseJSON(getCookie("staff_info"));
$("#staff_name").val(staff_info.staff_name);
$("#location").val(staff_info.location);
}
$("#setbaseinfo").click(function(){ //(2)
var staff_name_in = $("#staff_name_in").val();
var emp_no_in = $("#emp_no_in").val();
var location_in = $("#location_in").val();
setCookie("staff_info", "{\"staff_name\": \"" + staff_name_in
+ "\", \"emp_no\": \"" + emp_no_in + "\", \"location\": \""
+ location_in + "\"}"); //(3)
$("#staff_name").val(staff_name_in); //(4)
$("#location").val(location_in); //(5)
$("#stat2").text("担当者情報登録完了");
});
$("#invupdate").click(function(){ //(6)
var staff_info = $.parseJSON(getCookie("staff_info")); //(7)
var query = {};
query["mode"] = "stockop";
query["emp_no"] = staff_info.emp_no;
query["stock_op"] = $('[name=stock_op]:checked').val();
query["location"] = $("#location").val();
query["part_no"] = $("#part_no").val();
query["op_quant"] = $("#op_quant").val();
query["remark"] = $("#remark").val();
$.post("/stocksvlt", query, function(res){ //(8)
var r = $.parseJSON(res);
$("#stat1").text(r.stat);
});
});
$("#clr").click(function(){
$("#stat1").text("");
$("#stat2").text("");
$.each(["part_no","op_quant","remark"], function(){
$("#" + this).val("");
});
});
});
function getCookie(key){
var tmp = document.cookie + ";";
var index1 = tmp.indexOf(key, 0);
if(index1 != -1){
tmp = tmp.substring(index1,tmp.length);
var index2 = tmp.indexOf("=", 0) + 1;
var index3 = tmp.indexOf(";", index2);
return(unescape(tmp.substring(index2, index3)));
}
return("");
}
function setCookie(key, val){
document.cookie = key + "=" + escape(val) + ";expires=Fri, 31-Dec-2050 23:59:59;";
}
</script>
</head>
<body>
<!-- main page -->
<div data-role="page" id="menu" data-theme="c">
<div data-role="header" data-theme="b">
<h1>入出庫管理情報 </h1>
</div>
<div data-role="content" data-insert="true" data-theme="c">
<div>処理内容</div>
<ul data-role="listview" data-inset="true">
<li data-role="list-divider" data-theme="c">在庫管理メニュー</li>
<li><a href="#base_info">
<h3>基本情報設定画面</h3></a>
<p> 担当者と在庫場所を指定</p>
</li>
<li><a href="#stock_op"><h3>入出庫処理実行画面</h3></a>
<p> 入庫または出庫数量更新</p>
</li>
</ul>
</div>
<div data-role="footer" data-theme="b">
<h3>Copyright 2012, CyberSpace Co,Ltd</h3>
</div>
</div>
<!-- 入出庫基本情報 -->
<div data-role="page" id="base_info" data-title="入出庫基本情報">
<div data-role="header" data-theme="b">
<a href="#menu" data-icon="arrow-l" data-direction="reverse">メニュー</a>
<h1>入出庫基本情報設定</h1>
</div>
<div data-role="content" data-theme="c">
ステータス : <span id="stat2"> </span>
<h3>入出庫担当者</h3>
<p>担当者名:<input id="staff_name_in" name="staff_name_in" type="text" size="25" style="width:95%" value="" placeholder="担当者名" /></p>
<p>カードNO:<input id="emp_no_in" name="emp_no_in" type="text" size="25" style="width:95%" value="" placeholder="担当者カードNO" /></p>
<h3>倉庫ロケーション</h3>
<select name="location_in" id="location_in">
<option value="">ロケーション</option>
<option value="大森工場第一">大森工場第一</option>
<option value="大森工場第二">大森工場第二</option>
<option value="大森工場第三">大森工場第三</option>
</select>
<p><input type="button" id="setbaseinfo" value=" 登録 " data-inline="true" /></p>
</div>
<div data-role="footer" data-theme="b">
<h3>Copyright 2012, CyberSpace Co,Ltd</h3>
</div>
</div>
<!-- 入出庫管理 -->
<div data-role="page" id="stock_op" data-title="入出庫管理">
<div data-role="header" data-theme="b">
<a href="#menu" data-icon="arrow-l" data-direction="reverse">メニュー</a>
<h1>入出庫管理</h1>
</div>
<div data-role="content" data-theme="c">
<div>ステータス :<span id="stat1"> </span></div>
<div>担当者名:<input id="staff_name" name="staff_name" type="text" size="25" style="width:95%" value="" placeholder="担当者名" /></div>
<div>倉庫ロケーション:<input id="location" name="location" type="text" size="18" style="width:60%" value="" placeholder="倉庫" /></div>
<fieldset data-role="controlgroup" id="stock_op" data-inline="true" data-type="horizontal">
<input type="radio" name="stock_op" id="stock_in" value="stock_in" />
<label for="stock_in"> 入庫 </label>
<input type="radio" name="stock_op" id="stock_out" value="stock_out" />
<label for="stock_out"> 出庫 </label>
</fieldset>
<div>部品番号:<input id="part_no" name="part_no" type="text" size="18" style="width:60%" value="" placeholder="部品番号" /></div>
<div>数量:<input id="op_quant" name="op_quant" type="text" size="6" style="width:40%" value="" placeholder="数量" /></div>
<div data-role="fieldcontain" class="ui-hide-label">
コメント:<label for="remark">コメント:</label>
<textarea id="remark" name="remark" rows="8" cols="30" value="" placeholder="コメント"></textarea>
</div>
<input type="button" id="invupdate" value="在庫数量更新" data-inline="true" />
<input type="button" id="clr" value=" クリア " data-inline="true" />
</div>
<div data-role="footer" data-theme="b">
<h3>Copyright 2012, CyberSpace Co,Ltd</h3>
</div>
</div>
</body>
</html>
リスト3は在庫情報更新を行うjQuery Mobileを使用したスマートフォン用のクライアントコードです。入力フィールドやボタンなどタグ記述は長くなっていますが、基本的なタグ構成はリスト2と同じで、メニュー画面と2種類の処理画面(基本情報設定画面と入出庫処理実行画面)で構成されています。jQuery Mobileでの画面構成については前に見ているので、ここではJavaScriptでの処理について触れていきます。
画面ロード時の処理
画面ロード時には(1)のif文が評価され、評価が真の場合はクッキーにセットされている値を読み取って、図9入出庫管理画面の担当者名と倉庫ロケーションに値をセットして、担当者が都度入力を行わなくともいいようにしています。
基本情報設定画面の処理
入出庫基本情報設定の画面では、入出庫担当者の名前とカードNOと倉庫ロケーションを入力・指定後、「登録」ボタンにタッチすると、(2)の匿名関数が起動されます。匿名関数では、担当者名、従業員番号、それに倉庫ロケーションの値を画面から取得し、JSONフォーマットでクッキーに書き込みます(3)。また初回の場合は(1)からの処理が行われることはないため、(4)と(5)で出庫管理画面の担当者名と倉庫ロケーションの値をセットしています。
入出庫処理実行画面の処理
入出庫処理実行画面では、自動セット以外の項目を入力後、「在庫数量更新」のクリックで(6)の匿名関数が呼び出されます。関数内では、JSONフォーマットで書き込まれている値を読み取った後、$.parseJSONでJavaScriptオブジェクトに変換して変数staff_infoにセットしています。その後staff_infoの値(staff_info.emp_no)も含めて連想配列(query)にセットして(8)の$.postでGAEに送信します。
