ちょっとAjaxの本を読んでみました
ASTERIAはサーバサイドのプロダクトなのでAjaxとは直接関係ありませんけどサーバサイドの仕組みは必要なはずですから、今回は簡単な例で雰囲気だけでもお伝えしましょう。
参考にした書籍は「入門Ajax(高橋登史朗さん著)」です。
個人的にはすごい読みやすかったし解説も丁寧だったのでお勧めの本です。
この本のサポートサイトが以下となっています。
http://jsgt.org/js/ajax
こちらのサイトで本に載ってるサンプルの動作が確認できますので、
「サンプル」「入出力エフェクト」「半透明DIVへの出力」を動かしてみてください。
このサンプルはマウスポインターを乗せると現れるサブメニューの中身をサーバに問い合わせて入手し表示するものなんですけど、このサブメニューの中身を渡す部分をASTERIAで作ります。肝のAjax部分はほとんどそのままサンプルを利用させてもらいます。
出来れば書籍を読んでみてください。よく判ると思いますよ。Ajax部分の解説はこのサイトの範疇外ですので・・・。
フロー自体は楽勝ですね。
サンプルではメニューが二つあってそれぞれ違う内容のサブメニューが表示されるようになってますので、フロー側も条件によって2つのパターンでデータを返さなければなりません。Branchでもいいですけど今回はMapper内でChoiceさせてしまいましょう。
作るフローはこんな感じ。
サブメニューデータ生成フロー
配置するコンポーネントは以下の通りです。
「Start」→「Mapper」→「EndResponse」
- Startコンポーネント
GETパラメーターで何番目のメニューのデータを返せばいいのか判断しますので、「arg00/Integer」をArgumentタブに追加します
- Mapperコンポーネント
OutputStreamFormatはHTMLにしておきます。
Choice関数を使って与えられた値によって出力する内容を振り分けます。
Mapper内ではこんなマッピングをします。[arg00]---1---|-->[Choice]-->[OutputStream] [CONST1]--2---| [CONST2]--3---| [CONST3]--4---| ※線の途中の数字はChoice関数に引き込む順番です。CONST1は何も設定しません。
CONST2はこんな内容です。<a href="http://www.yahoo.co.jp">Yahoo</a>CONST3はこんな内容です。
<a href="http://www.yahoo.co.jp">Yahoo</a> <a href="http://www.google.co.jp">Google</a>
Choice関数のプロパティBaseは0に設定します。
これにより
- 1番目に引き込まれた値が0ならCONST1の内容
- 2番目に引き込まれた値が0ならCONST2の内容
- 3番目に引き込まれた値が0ならCONST3の内容
を出力するようになります
- EndResponse
特に設定なし
例によってコンパイル&実行設定しておきましょう。
あとはAjax側(クライアントサイド)の用意ですね。
HTML置き場が必要なのでユーザーGuestのホームディレクトリ(「ASTERIAインストールディレクトリ/home/guest」)にディレクトリ「htdocs」を作ってその中にHTMLを入れることにしましょう。
ユーザーGuestはデフォルト設定でコンテキストパスは「/guest」でドキュメントルートが「htdocs」になっているはずですので上記ディレクトリを作ってそこにHTMLを置けばhttp://ホスト名:21380/guest/○○○.htmlでアクセスできるようになります。
置き場が用意できたらあとは中身ですね。
著者も本の中で述べてますが、JavaScriptなのでソースは見放題というか勉強し放題です。
ありがたく参考にさせていただきましょう。
冒頭で説明したAjaxサンプルよりCSSおよびJacaScriptを含んだソースが入手できます。あとはその中のURL情報をASTERIAのフローにしてあげればOKですね。
修正箇所はソース内の「sendRequest」の部分です。
HTTPメソッドをGETにしてURLを書き換えます。
こんな感じ
'http://localhost:21380/guest/Project1/Ajax_sample?arg00='+num
「jslb_ajax.js」
あとこのサンプルソースは外部のスクリプトjslb_ajax.jsを更に呼び出します。
クロスブラウザ対策のスクリプトで著者が提供してます。DLして同じくhtdocsに収めておきましょう。
http://jsgt.org/mt/archives/01/000409.html
ファイル名を変更するかソースの方を書き換えるかする必要があります。
あとは本当ならJPG画像も読み込んでるので用意した方がいいんですけど、それはまぁお好きなようにw
準備できたらブラウザーから叩いてみましょう〜
http://ホスト名:21380/guest/○○○.html
私の場合は
http://localhost:21380/guest/sample2.html
となりました。
実行結果を貼っておきます。
またまた小さいですけどこんな感じです!ってゆうのは伝わったかな?
- 作者: 高橋登史朗
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/11/15
- メディア: 単行本
- 購入: 4人 クリック: 95回
- この商品を含むブログ (101件) を見る
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
RDB(GET)コンポーネント
RDBMSからのSELECT結果をストリームとして読み込みます。
主要プロパティ
名前 データ型/候補値 マッピング 説明 Connection connection −
接続先のRDBを指定します。
ASTERIA Server Management Consoleにて作成されたRDB接続名を選択します。
Mode choice SQL 入力&出力
SQLの入力方法を選択します。
SQL−SQLBuilderによって自動的にSQLを作成する場合に指定します。
SQL(Manual)−SQLを手入力する場合に指定します。
SQL(Manual) SQL string 入力&出力
SQLを指定します。実際にRDBMSに対して発行されるSQLです。
「Mode」プロパティがSQLの場合、SQLBuilderによって自動的に作成されます。その場合、このプロパティを開くことによって作成されたSQL文を確認することができます。
「Mode」プロパティの指定に関わらずSQLはMapperによって値を差し込むことができます。LoopProcess boolean −
結果セットをまとめて出力するか1レコードずつループして出力するか選択します。
True−ループの起点となって1レコード(行)ずつストリームに出力されます。
False−すべてのレコード(行)がまとめてストリームに出力されます。CountZeroException boolean −
結果セットのレコード件数が0件だった場合にExceptionとするかどうかを選択します。
True−Exceptionとなります。
False−空のストリームを出力します。RecordCount integer 出力
「LoopProcess」プロパティがFalseの場合、RDBから取得したレコード件数が取得できます。
「LoopProcess」プロパティがTrueの場合、常にnullになります。QueryTimeout integer 出力
RDBMSに対してSELECT文を発行してから結果が返ってくるまでの待ち時間を秒単位で指定します。
指定時間を経過しても実行が終わらない場合はExceptionとなります。
0の場合はタイムアウトすることはありません。RecordFilter boolean −
SELECTした結果セットに対してStartRowプロパティとGetCountプロパティでフィルタリングを行うかどうかを指定します。
true - 結果セットをStartRowプロパティとGetCountプロパティでフィルタリングします。
false - 結果セットのフィルタリングは行われません。StartRow int 入力&出力
RecordFilter=Trueの場合に出力するレコードの開始行を指定します。
行のインデックスは1ベースのインデックスです。
StartRowが結果セットの件数よりも大きい場合はRecordNotFoundExceptionが発生します。(CountZeroExceptionがfalseの場合は空の結果セットが出力されます。)GetCount int 入力&出力
RecordFilter=Trueの場合に出力するレコードの行数を指定します。
例えば「StartRow=11」、「GetCount=10」の場合は入力レコードセットの11行目から10行が出力されます。
GetCountに達する前に入力レコードが最終行に達した場合はそこまでのレコードが出力されます。
GetCountが0の場合は、StartRow以降の全ての行が出力されます。SQLParameter category 入力&出力
SQL中にパラメータ書式を埋め込むことにより、SQLParameterの値をパラメータ、または置換文字列として使用することができます。
詳細については下記トピックを参照してください。
コメント
RDBを使わないシステムなんて滅多にありませんから、これも最重要コンポーネントと言っていいでしょうね。
SQLを書き慣れている人は直接コテコテと書いちゃった方が早い!という場合もあるかと思います。そのときはマニュアルモードでどうぞ。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
FileSystem(Put)コンポーネント
ファイルシステムにストリームをファイルとして書き出します。
名前 データ型/候補値 マッピング 説明 HomeDirectory choice ProjectOwner −
「FilePath」プロパティが相対パス指定の場合にベースディレクトリとして何を使うかを指定します。
ProjectOwner−プロジェクトオーナーのホームディレクトリを使用します。
ExecuteUser−実行ユーザーのホームディレクトリを使用します。ExecuteUser FilePath String 入力&出力
書き込むファイルのパスを指定します。区切り文字「\」と「/」は区別されません。
相対パスの場合は「HomeDirectory」プロパティの指定に基づいて解釈されます。
例:
directory/file.txt
C:\directory\file.txt
\\server\share\file.txtAppendMode choice New −
「FilePath」プロパティで指定されたファイルが既に存在していた場合の書き込みを選択します。
New−上書きします。
Append−追加書き込みします。
Append
コメント
こちらはストリームの中身をファイルに書き出すコンポーネントです。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
FileSystem(Get)コンポーネント
ファイルシステムからファイルをストリームとして読み込みます。
名前 データ型/候補値 マッピング 説明 HomeDirectory choice ProjectOwner −
「FilePath」プロパティが相対パス指定の場合にベースディレクトリとして何を使うかを指定します。
ProjectOwner−プロジェクトオーナーのホームディレクトリを使用します。
ExecuteUser−実行ユーザーのホームディレクトリを使用します。ExecuteUser FilePath string 入力&出力
読み込むファイルのパスを指定します。区切り文字「\」と「/」は区別されません。
相対パスの場合は「HomeDirectory」プロパティの指定に基づいて解釈されます。
「**」と「*」と「?」の3つのワイルドカードが使用できます。「**」は0個以上の任意のパスセグメントに、「*」は0個以上の任意の文字に、「?」は任意の1文字にマッチします。
例:
directory/file.txt
C:\directory\file.txt
\\server\share\file.txt/*.txt - HomeDirectory以下の全ての「*.txt」ファイル
C:\directory\*.txt - C:\directory直下の「*.txt」ファイル
FileDelete boolean −
コミット時に読み込んだファイルを削除するかどうか選択します。
True−削除します。
False−削除しません。LoopProcess boolean −
「FilePath」プロパティにワイルドカードが指定され、複数のファイルが指定にマッチする場合にファイルをまとめて出力するか1ファイルずつループして出力するか選択します。
True−ループの起点となって1ファイルずつストリームに出力されます。
False−すべてのファイルがコンテナ化されてまとめてストリームに出力されます。FileEncoding string 入力&出力
読み込むファイルのストリームフォーマットがText、HTML、CSVの場合にそのエンコーディングを指定します。
「(AutoDetect)」が指定された場合は可能な限りエンコーディングを自動検出します。
ここでの指定がStreamPropertyのエンコーディングと異なっていても構いません。
コメント
かなり多用するコンポーネントです。ファイルからのデータ読み込みですから基本的な機能ですね。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
Logコンポーネント
ログを出力します。
名前 データ型/候補値 マッピング 説明 Message string 入力&出力
ログに出力するメッセージを指定します。LogLevel choice fatal 入力&出力
ログ出力レベルを指定します。
debugInfoを指定するとフローがデバッグモードで実行されている場合のみログ出力されます。error warn info debugInfo debug
コメント
ASTERIAは自動である程度のログはシステムが取得していますが、より詳しくピンポイントでログが欲しいときはこのコンポーネントを利用します。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
Mutexコンポーネント
指定されたIDに対してロックを作成し、ロックが解除されるまで他のスレッド(フロー)のそのIDへのロックをブロックします。
ロックの期間はUnLockが実行された時、またはフローの終了までとなり、フローをまたがるロックは生成できません。
ロックが解除された時に複数のスレッドが、そのIDに対して待機状態であった場合、次にロックを獲得するスレッドがどれになるかは不定です。
名前 データ型/候補値 マッピング 説明 ID string 入力&出力
生成するロックのIDです。
IDが指定されない場合はフロー名(オーナー名 + プロジェクト名 + フロー名)がIDとなります。Timeout integer −
ロック獲得までに待機する時間を秒単位で指定します。
指定時間を経過してもロックが獲得できなかった場合はExceptionとなります。
0を指定した場合はタイムアウトは発生しません。Action choice Lock −
動作を指定します。
Lock−ロックします。
UnLock−ロックを解除します。他のスレッドのかけたロックを強制的に解除することもできるので使い方には注意が必要です。UnLock
コメント
ちょっと並列処理の項でも取り上げたMutexロックを行うコンポーネントです。
基本的にはこのコンポーネントは2つ対で利用します。ロックと解除ということですね。性能向上のためにもロックする区間は短ければ短いほどいいです。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る
Abortコンポーネント
フローの終了コンポーネントです。
Abortコンポーネントはフロー終了後に出力ストリームを返します。
EndやEndResponseと異なり、Abortではパラレル化した処理やループ処理が残っていてもこのコンポーネントが実行された時点で直ちにフローが終了します
名前 データ型/候補値 マッピング 説明 RollbackTransaction boolean −
トランザクションが有効な場合にRollbackを実行するかどうかを指定します。
トランザクションが無効な場合は無視されます。
True−Rollbackを実行します。
False−Rollbackを実行しません。
ReturnValue string 入力&出力
フローの返り値です。
フローがHTTPから起動された場合はHTTPのStatusコードとなります。その場合、「NNN XXXXX」のように「数字3桁 文字列」の形式で指定します。
このプロパティが空の場合HTTPのStatusコードは「500 Internal Server Error」になります。
フローがHTTPから起動されたのでない場合は、任意の文字列を設定できます。CloseSession boolean −
フローの終了時にセッションを終了するかどうかを指定します。
True−フローの終了時にセッションを終了します。
False−フローの終了時にセッションを終了せず、タイムアウトするまで有効にします。Location string 入力&出力
HTTP起動のフローでReturnValueに「302」を指定した場合にリダイレクトするURL(Locationヘッダ)を指定します。
ReturnValueが「302」以外の場合はこのプロパティは無視されます。
コメント
あんまり使わないコンポーネントなんですよね。
強引にフローを終了してしまいますので、なるべくこのコンポーネントが使われないようにフローを組みたいものですが・・・。
- 作者: 東海林賢史,中川智史,江島健太郎,インフォテリア株式会社
- 出版社/メーカー: 翔泳社
- 発売日: 2005/05/16
- メディア: 単行本
- クリック: 252回
- この商品を含むブログ (21件) を見る