RPG# とは EnterpriseServer 独自に開発されたWeb開発のための RPG 言語です。
あなたはただ、ユーザーのボタン操作やマウス操作のイベントに対するプロシージャーを記述するだけ。
HTMLに対する出力もREAD/WRITEだけでOK!
それでいて、レコードロック排他処理や、スクロールもサポート。
RPG#で、Web化はもっと、やさしくなります。
RPG# はメイン・ルーチンを持たないイベント駆動型の言語です。
キーボードの入力や、マウスクリックなどのイベント(事象)に対してプロシージャを記述するだけ。
VC++やVisualBASICの直感的なわかりやすさ、RPGの生産性、双方の長所を兼ね備えた新言語です。
■ なぜイベント駆動型?
近年、Web2.0 powerd by Ajax によって動的なGUIコントロール制御、
いわゆるリッチインターフェースが目覚しい勢いで普及しています。
遷移を行わずシームレスに画面を更新してく、スムーズでストレスを感じさせないその操作性は、
ユーザビリティに大いに貢献しています。
しかし従来の手続き型(ウォーターフォール)の開発言語である RPG では、
リッチインターフェース化のためにひとつの画面に対して数多くの CGI が必要となってしまいます。
これではひとつの画面を保守するにも多大な労力を必要とし、開発も複雑化してしまいます。
もしイベント駆動型の開発言語であれば、GUIコントロールを制御する多くの CGI をひとつにまとめることが
できるようになります。C++ や BASIC が、 イベント駆動型の VC++ や VisualBASIC へと進化したように、
RPG も RPG# へと進化することは、今や必然であると言えます。
■ メインル−チンは無し
RPG# にメインルーチンはありません。
Web2.0 の普及によって、今や処理の主導権はプログラムからユーザー操作へと移っています。
リッチクライアント実現のためには、メインルーチンによって処理を行うのような
手続き型の言語(ウォーターフォール型)の RPG ではもはや限界です。
■ プロシージャーの記述
イベント駆動型の RPG# であれば、ユーザーの操作(イベント)を処理するプロシージャーを記述するだけです。
ロジック処理の苦手なプログラマーの方でも簡単にわかりやすく記述することができます。
RPG# では HTMLファイルの入出力の記述も驚くほど簡単。
HTML に対する入出力は RPG の READ/WRITE命令だけで行うことができるのです。
そのため、従来の記述を大幅に短縮でき、効率よくWeb適用業務を開発することができます。
また、わずらわしい独自の任意タグを学習する必要もありません。
■ READ/WRITE命令だけで HTML へ入出力
RPG# は HTML への入出力が、DSPFファイルへの入出力と同じように、
READ/WRITE命令だけで行うことができます。
HTML単位での WRITE/READ命令のみなので、コーディングはきわめてシンプルですみます。
また、SFLレコード数の制限もなく、しかも任意のSFLレコードの取得/更新が可能です。
READ DSPHEAD ・・・ DSPHEAD.HTMの入力フィールドを全て読み取り
WRITE DSPDTA01 ・・・ DSPDTA01.HTMとして出力
■ HTML の外部ファイル化
HTML は CGI から見て DSPF と同じように完全な外部記述となり、
フィールド単位の長さや 属性、編集コード、編集語も HTML へ記述します。
しかも、記述した属性から入力妥当性検査を行いますので、ユーザー自身が配慮する必要がありません。
RPG# では HTML上の GUIコントロールをRPGによって細かく制御できます。
これによって、動的な GUIコントロールの制御を行い、Ajaxに代表されるリッチインターフェイスも
思いのままに実現できます。
■ GUIコントロール一覧
SFL コントロール (SFLCTL) | SFL形式のREPORT文 |
---|---|
ボタン (BUTTON) | 押しボタン |
エディット・コントロール(EDTCTL) | 入力ボックス |
テキスト・エリア(TEXTARA) | テキスト入力エリア |
コンボボックス(COMBOBOX) | プル・ダウン選択表示のコンボボックス |
ラジオ・ボタン(RADIOBTN) | 択一選択のラジオ・ボタン |
チェック・ボックス(CHECKBOX) | 複数選択可能なチェック・ボックス |
XML データ(XML) | XML応答データ |
MVC3階層モデルとは
- モデル(MODEL)
処理の中核を行うビジネス・ロジック
- ビュー(VIEW)
表示・出力のインターフェース
- コントロール(CONTROL)
入力を受け取ってモデルとビューを制御
という処理構造を持つソフトウェアにとっての理想的な構造のことです。
RPG# であれば、RPG の知識と経験だけで、意識することなく理想的な MVC3階層モデルを構築することが可能です。
■ MVC3階層モデルのメリット
例えばHTML内部にJavascriptやPHPが直接埋め込まれているとします。 この場合、それらの言語全てに精通した開発者以外に保守を行うことはできません。 System i で例えるなら、RPGソース内に DSPF 記述が混在して記述されているようなものです。
しかし MVC3階層モデルを意識して構築していれば、s
保守・管理に優れたアプリケーション構造
処理が目的によって分離され品質に優れたソフトウェア
将来の拡張に備えたスケーラビリティに富む適用業務
を実現することができます。
また、メインルーチンが無いので誰が開発しても同じロジックに統一が可能なため、誰が見てもソースの判別を容易に行うことができます。
RPG# は、プロシージャーを中核として形成されるオブジェクト指向モデルでもあります。オブジェクト指向で開発されたビジネスロジックは将来、あるいは現在でも他のプログラムや CGI から容易に再利用できるような構造となります。
RPG#なら開発者は意識することなく、このような柔軟で、かつスケーラビリティに富んだオブジェクト指向モデルの適用業務を作成することができます。
レコードロック
RPG# はステートレスな CGI です。従来の CGI と同様に HTML を出力して実行を終了すると CGI も終了します。 このため、更新用のファイルのレコードを獲得している場合でもレコード・ロックが失われてしまいます。
しかし、RPG# は、System i そのものの機能を利用し、更新用としてレコードを獲得していた場合、CGI の終了後もレコード・ロックだけは残り続けます。 5250 エミレータ環境のときと同じように更新レコードは、ジョブによってロックされて他の更新ジョブから保護されます。
セッション管理
ステートレスな CGI では、セッション管理に頭を悩ませることが多々あります。
パフォーマンスを著しく低下させない。
セッションの残骸を残さない。
入れ違いなどの障害を起こさない。
このような問題を RPG# では高度な技術により、パフォーマンスを低下させること無く、柔軟性に富んだセッション管理を実現しています。