UIEvolutionのラボで公開されているRecordset のソースコード解説 サーバーサイド RecordSet.php(2006/07/07)
前回、クライアントサイド(UJML)で重要となるソース llmodel.ujms について解説した。「もう少し丁寧に頼む」という声もあったりなかったりだが、まずは一通り解説するために先に進む。
※このエントリーは初めて本ブログに来た方が読むには敷居が高い。まずは、初心者向けまとめページに目を通すことをおすすめする。
UIEvolutionのラボで公開されているRecordsetについて考察 ソースコードにコメントで解説
今回解説するのはサーバーサイドのスクリプトの使い方である(PHPを主として解説していく)。サーバーサイドの処理を簡単に解説すると、
「RecordSet.phpというモジュールを活用し、動的にujbcを生成する。」
ということである。公開されているサンプルの ziptocity.php のソースコードは以下の通りである。
※色分けは今のところXMLのみ対応なので、一色で見にくいのは見逃して欲しい。
<?php
require "RecordSet.php";
$command = "cut -d ',' -f 2,3,4 zips.txt |grep " . $HTTP_GET_VARS['uid'];
$text_record=exec($command);
list($file_zip,$file_state,$file_city, $fline) = split(',', $text_record, 3);
$data = array(array("post"), array("2"), array("true"), array($file_city,$file_state) );
$rset = new RecordSet(0, $data, 2, 3);
header('Content-type: application/ujml');
header("Content-Transfer-Encoding: binary");
$bytes = $rset->generate();
$new_length = strlen($bytes);
header("Content-Length: $new_length");
print $bytes;
?>
重要なのは太線部分である。まず、
$data = array(array("post"), array("2"), array("true"), array($file_city,$file_state) );
で、クライアントに渡したいデータを生成している。データ内容は無視して欲しい。とにかく
「配列で渡したいデータを作成する。」
のだ。そして、
$rset = new RecordSet(0, $data, 2, 3);
で、ujbc 作成させる。最初の引数 0 はUJML側のhandlerと対応、最後の二つは recordsets.ujms の変数 mFields の配列サイズに対応している。
※このmFieldsの配列サイズがずれていると期待通りに動作しないので注意!
Import variable "RecordSet.sData" failed.
というエラーメッセージが出たら、配列サイズが同じになっていないのであわせること!サンプル作成中にここがずれていることに気づかず3時間以上格闘していた。
このように使い方は極めて簡単である。RecordSet.phpのPerl版、Ruby版、JSP版、それぞれ同じような仕組みで動いているのでいずれも簡単である。
今回はここまで。
コメント