
第 1 回、第 2 回を通して、PowerBuilder (PB) の設計思想やプロジェクト構造を Web 開発のコンテキストに置き換えて理解してきました。
第 3 回となる今回は、PowerBuilder を語る上で欠かすことのできない、そして Web エンジニアが最も衝撃を覚えるであろう機能、「データウィンドウ (DataWindow)」に焦点を当てます。
Web 開発における「API の実装、状態管理、バリデーション、DOM レンダリング」という一連の苦労が、PowerBuilder ではどのように統合されているのか。その技術の裏側を解き明かします。
モダンな Web システムで、データベースの 1 テーブルを編集する画面を作るシーンを想像してください。
この一連の「儀式」を、PowerBuilder はデータウィンドウという単一のオブジェクトで完結させます。
データウィンドウを理解する近道は、それを「SQL」と「UI レイアウト」と「データ管理エンジン」がパッケージ化されたものだと捉えることです。
| コンポーネント | 役割 | Web 開発でのイメージ |
|---|---|---|
| データソース (Data Source) | どのデータを、どう取得するか。 | SQL クエリ / API リソース定義 |
| 提示様式 | どう見せるか (一覧、単票など)。 | HTML テンプレート / CSS コンポーネント |
| データウィンドウコントロール | 画面に配置し、実行時にデータを保持する器。 | State 管理 / DOM コンテナ |
データウィンドウを作成する際、最初に行うのは SQL の定義です。グラフィカルなクエリビルダー、または直接 SQL (SELECT 文) を記述します。
ここでのポイントは、「SELECT で取得したカラムが、そのままプロパティ (列) として定義される」点です。型定義を別途書く必要はありません。DB のメタデータから、データ型や桁数も自動的に引き継がれます。
取得したデータをどう並べるかを選択します。以下はよく利用される提示様式です。
取得する各項目をマウス操作でドラッグ&ドロップして配置します。Web エンジニアが CSS の flex や grid で苦労する配置調整が、ビジュアルエディタ (PowerBuilder では「ペインタ」と呼びます) で完結します。
Web エンジニアがデータウィンドウを最も「賢い」と感じる瞬間は、データの更新処理でしょう。
データウィンドウには内部的に「バッファ (Buffer)」という概念があります。
ユーザーが画面上の値 (DB から検索された値) を書き換えると、データウィンドウはその行に「変更フラグ (Dirty チェック)」を立て、「元の値」と「現在の値」の両方を保持します。
そして、コードで dw_1.Update() という関数を 1 行呼ぶだけで、PowerBuilder は内部で「元の値」と「現在の値」を比較して以下の処理を自動生成・実行します。
データウィンドウによる更新処理では、Web 開発のような「どの行が変更されたかをループで回して確認し、差分更新の API を叩く」といったコードを書く必要は一切ありません。
PowerBuilder (PB) のデータウィンドウは、画面表示・データ処理・バリデーションが強力に一体化した、独自にして最高峰のコンポーネントです。現代の Web 開発 (React、Vue、Angular など) における「UI ライブラリ」、「状態管理」、「バリデーションライブラリ」、「ORM」の役割を、1 つで全て兼ね備えています。
Web 開発の概念に置き換えて、その多彩なバリデーション・表現手法を解説します。
データウィンドウは、データベースのスキーマ (データ型) を最初から認識しています。
input タグの type="number" や、TypeScript によるプリミティブな型縛りに近いです。long(gettext()) > 0」「match(gettext(), '^[A-Z]...')」といった条件式を設定できます (gettext() は入力値)。エラー時は独自のポップアップメッセージを表示し、不正な値をサーバー (バッファ) に送らせません。
Excel の「条件付き書式」のように、「入力値が一定以下なら赤字にする」といった動的なスタイル制御も、スクリプトでロジックを書く必要はありません。データウィンドウの各項目のプロパティには「式」を設定できます。
if(balance < 0, 255, 0) (負数なら赤、それ以外は黒) のような「式」を仕込みます。<span className={value < 0 ? 'text-red' : 'text-black'}>{value}</span>画面全体の整合性や、他の API / DB の値を参照するような高度な検証は、イベントハンドラ (スクリプト) に記述します。
return 1) すると、元の値に戻されて次のセルへ移動させません。onBlur イベントでのカスタムバリデーションにあたります。onSubmit 全体バリデーションです。これら「型チェック」、「個別バリデーション」、「動的装飾」、「全体検証」が、すべてデータウィンドウという「1 つのオブジェクト」に内包されている点は驚きでしょう。画面とロジック、DB スキーマが密結合しているため、業務アプリケーションをすばやく開発できます。
その反面、UI と SQL が直結しているため、Web の「クリーンアーキテクチャ」に慣れていると不安になるでしょう。しかし、PowerBuilder ではこれが正義です。無理に分離しようとせず、データウィンドウを「リッチな ViewModel」として扱うのが PowerBuilder 流だと考えましょう。
データウィンドウは、「SQL の結果セットに、UI の表現力と高度なステート管理エンジンを合体させたもの」です。
もしあなたが「管理画面を作るために、また似たような API と型定義を書かなきゃいけないのか……」とうんざりしているなら、データウィンドウはその悩みを解決する究極のソリューションに見えるはずです。
次回、第 4 回では、このデータウィンドウを操作し、ビジネスロジックを記述するための言語「PowerScript」について、JavaScript との比較を交えながら掘り下げていきます。
「Web エンジニア向け PB 入門」バックナンバー