Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】📚 Understanding Uniface 10.4's websave Statement: Converting Component Data to JSON

2025年09月26日に「Dev.to」が公開したITニュース「📚 Understanding Uniface 10.4's websave Statement: Converting Component Data to JSON」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Uniface 10.4のwebsaveステートメントは、コンポーネントのデータをJSON形式へ変換する。これはWebアプリケーションへのデータエクスポートに便利で、変更データや特定のレコードに絞るオプションも持つ。変換前後に処理を加えカスタマイズも可能。Webアプリでのデータ連携を効率化する主要な機能だ。

ITニュース解説

Uniface 10.4のwebsaveステートメントは、システム開発者がWebアプリケーションでデータを利用するための強力な機能だ。これは、Unifaceコンポーネント内のデータをJSON(JavaScript Object Notation)という形式に変換し、Webアプリケーションで使いやすい形で出力する役割を担っている。

JSONは、Webの世界で広く使われているデータ形式の一つで、人間にとってもコンピューターにとっても読み書きがしやすいという特徴がある。例えば、スマートフォンのアプリがサーバーから情報を受け取ったり、Webサイトが別のサービスからデータを取得したりする際に、JSON形式がよく使われる。websaveは、Unifaceが管理する複雑なデータを、この標準的なJSON形式に変換してくれるため、最新のWeb技術との連携をスムーズに行うことができる。

websaveステートメントの基本的な使い方を見てみよう。その構文は非常にシンプルで、websaveと記述するだけだ。ただし、必要に応じてデータの出力方法を細かく制御するためのオプションも用意されている。一つは/modというオプションで、これはコンポーネント内で変更されたデータのみをJSONに含めたい場合に使う。これにより、不要なデータ転送を減らし、効率を高めることが可能になる。もう一つは/oneというオプションで、これは現在表示されているメインのレコードと、それに関連するデータのみをJSONに含める場合に利用する。例えば、顧客情報とその顧客の注文履歴といった関連性の深いデータだけを抽出したい場合に便利だ。

websaveが実行されると、その時点でコンポーネントが持っているデータ全体の「スナップショット」が作成される。このスナップショットには、コンポーネントが現在保持している全てのデータレコードが含まれる。これらは「ヒットリスト」と呼ばれるもので、データベースから取得したデータだけでなく、データベースにまだ保存されていないがコンポーネント内で操作されているデータも対象となる。さらに、一時的に削除対象としてマークされているレコードや、データの整合性をチェックするためのCRC(Cyclic Redundancy Check)値、レコードのユニークなID、現在のステータスといった特別な情報(メタデータ)もJSONに含まれる。Unifaceでは、個々のデータレコードを「Occurrence」と呼ぶが、これはデータベースのテーブルにおける一行のデータと同じようなものだと考えると分かりやすい。websaveは、これら全てのOccurrenceの情報をJSONとして出力する。

websaveステートメントの実行後には、その結果が$statusという特別な変数に格納される。この$statusの値をチェックすることで、処理が成功したのか、それとも何か問題が発生したのかを知ることができる。もし$statusが負の値であれば、何らかのエラーが発生したことを示しているため、エラーの原因を調査する必要がある。$statusが0であれば、処理は完全に成功したことを意味する。そして、もし$statusが正の値であれば、処理は成功したが、画像ファイルに関連する問題があったことを示している。具体的には、コンポーネント内のデータベースに格納された画像の一時ファイルが、何らかの理由で作成できなかった場合に、その作成できなかった画像の数が$statusに格納されるのだ。

websaveの強力な点は、データの変換プロセスを開発者が細かくカスタマイズできることにもある。これは「トリガー」と呼ばれる特別なコードブロックを使うことで実現される。websaveの処理中には、大きく分けて二つのトリガーが自動的に実行される。一つはpreSerializeというトリガーで、これは各データレコードがJSON形式に変換される直前に実行される。もう一つはpostSerializeというトリガーで、これは各レコードがJSON形式に変換された直後に実行される。これらのトリガーを活用することで、例えば、データベースにはないが、他のフィールドから計算して得られる「派生フィールド」の値をJSONに追加したり、特定の条件を満たすレコードだけをJSONに含めるようにフィルタリングしたりといった、高度なデータ加工を行うことが可能になる。

実際にwebsaveがどのように使われるか、簡単な例を見てみよう。ある注文管理のシステムで、全ての注文データをWebアプリケーションに送りたい場合を考える。Unifaceのコードでは、まずclearというステートメントで既存のデータをクリアし、次にretrieve/e "ORDER.INOUTER"というステートメントを使って全ての注文レコードを取得する。このとき、retrieve/eは、関連する詳細データも含めて注文データを取得するという意味だ。データが取得できたら、websaveステートメントを実行する。これにより、取得した注文データがJSON形式に変換される。最後に、putmess $webinfo("data")というステートメントで、生成されたJSONデータがメッセージエリアに表示される。この一連のコードは、複雑な処理を行うことなく、コンポーネントのデータをWebで利用可能なJSON形式に変換できることを示している。

websaveを使う上で、特に注意が必要なのが画像の扱いの部分だ。もしUnifaceコンポーネントがデータベースに保存されている画像を表示している場合、websaveは、その画像を一時的なファイルとして作成する。そして、その一時ファイルのパスをJSONデータに含めることで、Webアプリケーションが画像を表示できるようにする。このとき、Unifaceサーバーが、その一時ファイルを保存するプロジェクトディレクトリに対して「書き込み権限」を持っている必要がある。もしサーバーに書き込み権限がない場合、一時ファイルを作成できず、Webアプリケーション側では実際の画像の代わりに、画像エラーを示すアイコンが表示されてしまうことになる。このため、システムを運用する際には、サーバーのファイルシステム権限が適切に設定されているかを確認することが重要だ。

開発者がwebsaveを使って生成されたJSONデータをデバッグする際に役立つヒントもある。JSONデータは、特にデータ量が多い場合に非常に長く、人間には読みにくい文字列になりがちだ。このような場合に、$JSON_INDENTという設定を使うと、JSONデータに適切なインデント(字下げ)が追加され、構造が分かりやすくなる。また、$JSON_SHOWNAMESという設定を使えば、JSON内のフィールド名が明確に表示されるようになり、どのデータがどの項目に対応しているのかを一目で確認できるようになる。これらの設定は、開発の効率を大きく向上させる。

websaveステートメントは、主にUnifaceの「Dynamic Server Page(DSP)」コンポーネントで使用される。DSPコンポーネントは、Webアプリケーション向けに動的なコンテンツを生成するために特別に設計されたUnifaceのコンポーネントだ。つまり、websaveは、UnifaceベースのシステムとWebアプリケーションとの間で、効率的かつ標準的な方法でデータをやり取りするための、まさに中心的な役割を果たすツールと言える。

結論として、websaveステートメントは、UnifaceのWeb開発者にとって欠かせない重要なツールである。これは、Unifaceコンポーネントが保持するビジネスデータを、モダンなWeb技術やAPIと連携しやすいJSON形式にクリーンかつ効率的にエクスポートするための機能を提供する。RESTfulサービスを構築する場合であれ、アプリケーションの異なる部分間でデータを転送する必要がある場合であれ、websaveは必要な柔軟性と制御を提供してくれる。この機能を利用する際には、$statusの値を確認してエラーを適切に処理すること、そして画像を取り扱う場合にはサーバーが適切なファイル権限を持っていることを必ず確認することが、安定したシステム運用には不可欠だ。

関連コンテンツ

関連IT用語