このページでは、画面・バッチ・帳票の各処理におけるデータの経路と、経路上の各段階でのデータ構造を説明します。ファイルの配置と規約は「HaluProject詳細」、フレームワークの内部構造は「HaluServer詳細」を参照してください。
画面処理の仕組み
画面処理のデータフロー
画面処理では、画面のデータをリクエストとしてサーバーに渡し、処理結果をレスポンスとして受け取ります。データはJSON形式で、次の順に受け渡されます。

- 画面は、画面のデータ(dataset)をもとに、リクエスト(request)を作成する
- 画面は、リクエストを、Webサーバーを経由してアプリケーションサーバーに送信する
- アプリケーションサーバーは、リクエストの内容とSQLの定義(sql)をもとにSQLを組み立てる
- アプリケーションサーバーは、SQLを実行する
- アプリケーションサーバーは、SQLの実行結果を受け取る
- アプリケーションサーバーは、実行結果をもとに、レスポンス(response)を作成する
- アプリケーションサーバーは、レスポンスを、Webサーバーを経由して画面に返す
- 画面は、レスポンスの内容をdatasetに設定し、画面に反映する
Dataset構造
Datasetは、dataset.jsonの内容をもとに作成される画面の内部データ構造です。
画面の表示、入力値の保持、サーバーとの送受信は、すべてDatasetを通して行われます。
次の図は、Datasetの入れ子構造を示したものです。

・records:レコードの配列。画面のデータを、まとまり(レコード)ごとに保持する
・id:レコードの名前(例:header=検索条件や1件分のフォーム(1行)、detail=一覧の明細(複数行))
・multiline:複数行のデータの有無(一覧は"yes"、1行だけのレコードは"no")
・record:レコードに含まれる項目。項目名をキーにして、項目ごとに値を持つ
・value:項目の値の配列。1行だけのレコードでも配列で持つ
各キーの詳細は、「ドキュメント>JSONキー一覧>dataset.json」を参照してください。
画面(DOM)とDatasetの同期
画面の要素とDatasetの項目は同期します。画面を表示するときはDatasetの値が要素に設定され、画面で入力した値はDatasetに反映されます。
要素とDatasetの項目は、HTML要素に付けた次の2つの属性で対応づけます。
・halu-ds-id:レコードのid(例:header、detail)
・halu-ds-field:項目名。recordのキーと同じ名前(例:受注番号)
<input type="text" halu-ds-id="header" halu-ds-field="受注番号">◇一覧(明細)の場合
一覧(multilineが"yes"のレコード)の表は、1行目をテンプレートとして、データの件数分だけ行をコピーして表示します。
各セルに付けたhalu-ds-id/halu-ds-fieldはコピーした行にも引き継がれ、n行目のセルにはvalueのn番目の値が表示されます。
<td><input type="text" halu-ds-id="detail" halu-ds-field="受注数量"></td>Datasetとrequest/responseの対応
サーバーとの送受信は、tran.jsonに定義したrequestとresponseを介して行います。Datasetとrequest/responseは、レコードのidと項目名で対応します。
◇リクエスト時
Datasetの内容が、requestの同じidのレコードにコピーされ、サーバーに送信されます。コピーされるのはrequestに定義した項目だけです。一覧のレコードでは、すべての項目が空の行は送信されません。
◇レスポンス時
サーバーから返されたresponseの値が、Datasetの同じidのレコードに設定され、画面に表示されます。
各キーの詳細は、「ドキュメント>JSONキー一覧>tran.json(request)」「ドキュメント>JSONキー一覧>tran.json(response)」を参照してください。
JSON定義の連携
サーバーの処理でも、データはレコードのidと項目名で受け渡されます。
dataset.json・validation.json・tran.json・sql.jsonの4つのJSONは、レコードのid(records[].id)で連携します。validation.jsonは、画面での入力値のチェックと、サーバーでのリクエストのチェックに使用します。
records[].idの詳細は「ドキュメント>JSONキー一覧>共通キー」、各ファイルが参照される順は「ドキュメント>JSONキー一覧>ファイル間の参照関係」を参照してください。
バッチ処理の仕組み
バッチ処理のデータフロー
バッチ処理では、画面からはパラメータだけを渡し、処理対象のデータはDBから読み込みます。データは次の順に受け渡されます。

- 起動画面は、バッチに渡すパラメータ(例:ログインユーザーの情報)をリクエストに設定し、アプリケーションサーバーに送信する
- アプリケーションサーバーは、バッチ処理のプログラムを起動して、パラメータを渡す
- 起動されたプログラムは、パラメータ、処理対象のキーの一覧(DBから取得)、管理情報(処理名・分割数など)をバッチサーバーに渡す
- バッチサーバーは、キーとパラメータを1件ずつ処理用の定義(tran.json・sql.json)に渡し、キーに対応するデータを処理してDBに反映する
画面処理との違い
処理の結果は画面に返らず、DBに直接反映されます。実行状況(開始日時・終了日時など)は、バッチ管理テーブルに記録されます。
画面に返るのは、バッチの起動を受け付けたことを示す応答だけで、Datasetは更新されません。
処理の流れは「HaluProject詳細>バッチ>処理の流れ」、各キーの詳細は「ドキュメント>JSONキー一覧>バッチ処理のキー」を参照してください。
帳票出力処理の仕組み
帳票出力処理のデータフロー
帳票出力では、画面からはパラメータだけを渡し、帳票に出力する値はDBから読み込みます。データは次の順に受け渡されます。

- 画面は、帳票のパラメータ(例:受注一覧の検索条件)をリクエストに設定し、アプリケーションサーバーに送信する
- アプリケーションサーバーは、印刷する対象のキーの一覧(DBから取得)とパラメータをプリントサーバーに渡す
- プリントサーバーは、キーとパラメータを帳票フォルダの定義(tran.json・sql.json)に渡してDBから値を読み込み、Excelのテンプレートのセルに書き込む
- プリントサーバーは、作成したExcelをLibreOfficeでPDFに変換する
- 画面は、サーバーから返されたファイルの情報をもとに、帳票(PDF)をダウンロードする
画面処理との違い
帳票に出力する値は画面に返らず、Excelのテンプレートのセルに書き込まれます。
画面に返るのは、作成したファイルの情報だけで、Datasetは更新されません。
処理の流れは「HaluProject詳細>帳票>処理の流れ」、各キーの詳細は「ドキュメント>JSONキー一覧>帳票出力のキー」を参照してください。
