HaluProject詳細

配置先ファイル要否
Html/Apps/{画面名}index.html必須
Html/Apps/{画面名}{画面名}.appspec.js必須
Html/Apps/{画面名}{画面名}.main.js必須
Html/Apps/{画面名}{画面名}.controller.js必須
Html/Apps/{画面名}{画面名}.model.js必須
Html/Apps/{画面名}{画面名}.view.js必須
Html/Apps/{画面名}/cssprogram.css任意(画面固有のスタイルがある場合)
Json/Apps/{画面名}{画面名}_dataset.json必須(appspec.jsのjsonInfoで"no"にした場合は不要)
Json/Apps/{画面名}{画面名}_validation.json必須(appspec.jsのjsonInfoで"no"にした場合は不要)
Json/Apps/{画面名}{画面名}_{トランザクション名}_tran.json必須(トランザクションごと)
Json/Apps/{画面名}{画面名}_{トランザクション名}_sql.json必須(トランザクションごと。tran.jsonのrequest.modelが"yes"でない場合は不要)
Server/Apps/{画面名}{画面名}_controller.py任意(tran.jsonのrequest.progが"yes"の場合)
Server/Apps/{画面名}{画面名}_model.py任意(sql.jsonのprogが"yes"の場合)
Server/Apps/{画面名}{画面名}_view.py任意(tran.jsonのresponse.progが"yes"の場合)
配置先ファイル要否
Json/Apps/{画面名}{画面名}_{トランザクション名}_tran.json必須(バッチを起動するトランザクションごと)
Json/Apps/{画面名}{画面名}_{トランザクション名}_sql.json必須(バッチを起動するトランザクションごと)
配置先ファイル要否
Server/{起動プログラムのフォルダ}{起動名}.py必須
配置先ファイル要否
Json/Apps/{起動名}{起動名}_{起動のトランザクション名}_tran.json必須(request.modelを"yes"にする)
Json/Apps/{起動名}{起動名}_{起動のトランザクション名}_sql.json必須
Json/Apps/{起動名}{起動名}_validation.json必須
Server/Apps/{起動名}{起動名}_controller.py任意(tran.jsonのrequest.progが"yes"の場合)
Server/Apps/{起動名}{起動名}_model.py任意(sql.jsonのprogが"yes"の場合)
配置先ファイル要否
Json/Apps/{処理名}{処理名}_{処理のトランザクション名}_tran.json必須
Json/Apps/{処理名}{処理名}_{処理のトランザクション名}_sql.json必須
Server/Apps/{処理名}{処理名}_model.py任意(sql.jsonのprogが"yes"の場合)
配置先ファイル要否
Json/Apps/{画面名}{画面名}_{トランザクション名}_tran.json必須(印刷のトランザクションごと)
Json/Apps/{画面名}{画面名}_{トランザクション名}_sql.json必須(印刷のトランザクションごと)
配置先ファイル要否
Json/Apps/{帳票名}{帳票名}_{帳票のトランザクション名}_tran.json必須
Json/Apps/{帳票名}{帳票名}_{帳票のトランザクション名}_sql.json必須
ExcelTemplate/Apps/{帳票名}{テンプレート名}.xlsx必須
Server/Apps/{帳票名}{帳票名}_model.py任意(sql.jsonのprogが"yes"の場合)
Server/Apps/{帳票名}{帳票名}_view.py任意(tran.jsonのresponse.progが"yes"の場合)
Server/Apps/{帳票名}{帳票名}_form.py必須(tran.jsonのresponse.excelinfo.progを"yes"にする)
  1. フレームワーク共通のMixin(下の表)
  2. 画面タイプのMixin(例:MultiTableListFormControllerMixin)
  3. 画面固有の処理(include({ … })で追加するメソッド)
ファイル組み込むフレームワーク共通のMixin
appspec.jsAppSpecMixin
controller.jsEnterTabPFKeyMixin・ControllerMixin
model.jsValidationMixin・ModelMixin・HtmlTransitionMixin
view.jsFormatMixin・OutlineMixin・LoadTemplateMixin・ViewMixin
  1. CSS(Bootstrap・halu-custom_default.css・project.css・program.css)と、halutheme-preload.js
  2. ライブラリ(jQuery・jQuery UI・Bootstrap・jquery.loadTemplate・bignumber)
  3. フレームワーク本体(halumvc.js・各Mixin・webstorage.js)
  4. 画面タイプのMixin(view・model・controllerの順)
  5. 画面固有のファイル(appspec.js・model.js・view.js・controller.js・main.jsの順)
  6. Svelteコンポーネント(AppComponents.js・HaluComponents.js。type="module")
分類内容主なプロパティ
基本情報ファイルとJSONの配置パス、読み込むJSON、使用するトランザクション、遷移先・遷移元の画面名urlInfo・jsonInfo・requestInfo・externalInfo・nextname・beforename
イベント・項目の定義ボタン・ファンクションキー・入力チェック・カスタムイベントなどのイベントと呼び出すメソッド、および項目の設定(初期フォーカス・セレクトボックス・チェックボックス)navButtonEvent・enterTabPFKey・validationEvent・selectorEvent・pubsub{Check/Derive/Other}Event・{first/f12}FocusItem・selectbox・checkboxDetail
セッションストレージ画面遷移時に保存・引き継ぐデータsessionStorage{Header/Detail/Footer}Key・{next/before}StorageData・selectStorage{Request/Response}Data
{画面名}.appspec.js(requestInfoの指定例)
// [トランザクション名, チェック関数, レスポンス編集関数, エラー関数]
requestInfo: [
  ["select", "on照会OfCheckRequestData", "on照会OfEditResponseData", "onErrorResponseData"]
, ["insert", "on登録OfCheckRequestData", "on登録OfEditResponseData", "onErrorResponseData"]
]
  1. index.htmlが、フレームワーク・画面タイプのMixin・画面の各ファイルを読み込む(このとき、appspec.js・controller.js・model.js・view.jsが名前空間にクラスを登録する)
  2. ページの読み込みが終わると、main.jsがAppspecを作成し、initialSettingを呼び出す
  3. Appspecが、Controller・Model・Viewを作成する
  4. Modelが、JSON(dataset.json・validation.json・tran.json)の読み込みを開始する
  5. Controllerが、Appspecのイベント定義をもとに、イベントとメソッドを結び付ける
  6. dataset.jsonの読み込みが終わると、ControllerがView・Modelの初期処理(initExecute)を呼び出す(画面タイプのMixinでは、Viewはテンプレートの読み込みとダイアログの準備を、ModelはDatasetの値の初期化を行う)
  7. validation.jsonの読み込みが終わると、ControllerがViewに書式の情報(validation.jsonのformat)を渡す
  8. requestInfoの先頭に登録したトランザクションのtran.jsonの読み込みが終わると、Controllerが自身の初期処理(initExecute)を呼び出す(画面タイプのMixinでは、ここから画面の初期表示の処理を行う)
  9. 画面でイベントが発生した場合、5で結び付けたControllerのメソッドが呼び出される
画面タイプ用途MixinSampleの画面
list一覧照会(検索・ページング)multiTableListForm受注一覧(OrderList)
mainte1件の登録・訂正・削除singleRecordForm受注明細一覧(OrderDetailListMainte)
※受注1件分のヘッダーと、その明細を登録・訂正する画面
list-mainte一覧+行編集singleTableListForm商品一覧登録(ProductListMainte)
uploadファイルアップロード
・バッチ実行
専用のMixinなし(singleTableListFormを使用)受注データアップロード
(OrderUpload)
selection選択ダイアログdataSelectionDialog商品選択ダイアログ(ProductSelectionDialog)
その他ログイン・メニューlogin・tabMenuログイン(Login)、メニュー(StartMenu・AdminMenu)
コンポーネント内容
Header画面上部のヘッダー(ロゴ・画面タイトル・ログイン情報)
Footer画面下部のフッター
HaluLogoヘッダーのロゴ(Headerの中で使用)
LoginInfoヘッダーのログイン情報(Headerの中で使用)
index.html(コンポーネントの指定例)
<div componentID="Header" props-Title="画面タイトル"></div>
progの場所"yes"の場合に読み込むファイル
tran.jsonのrequestServer/Apps/{フォルダ名}/{フォルダ名}_controller.py
sql.jsonServer/Apps/{フォルダ名}/{フォルダ名}_model.py
tran.jsonのresponseServer/Apps/{フォルダ名}/{フォルダ名}_view.py
tran.jsonのresponse.excelinfo(帳票)Server/Apps/{フォルダ名}/{フォルダ名}_form.py
#タイミング指定する場所呼び出されるファイル典型的な用途
1各レコードの入力チェックの前tran.jsonのrequest.records[n].before{フォルダ名}_controller.py入力値の変換(ハッシュ化・正規化など)・補完
2各レコードの入力チェック(validation.json)の後tran.jsonのrequest.records[n].after{フォルダ名}_controller.py権限・業務ルールのチェック
3各SQLの実行前sql.jsonのsqls[n].before{フォルダ名}_model.pySQLに渡す値の加工、条件句の動的な組み立て、処理対象の絞り込み
4各SQLの実行後sql.jsonのsqls[n].after{フォルダ名}_model.py実行結果の後処理、採番値の次のSQLへの引き継ぎ、後続のSQLのスキップ
5各レコードのレスポンスへのマッピング前tran.jsonのresponse.records[n].before{フォルダ名}_view.pyレスポンスの定義の書き換え(使用する場面は少ない)
6各レコードのレスポンスへのマッピング後tran.jsonのresponse.records[n].after{フォルダ名}_view.pyページング値の計算、表示用の整形
戻り値動作
'OK'処理を続ける
'ERROR'処理を打ち切る。打ち切る範囲は、次の表のとおり。エラーの応答にはならない
'ALLPASS'後続のSQLの処理をすべて打ち切る(フック3・4のみ)
フック'ERROR'を返した場合
1入力チェックを行わない
2後続のレコードの処理を行わない
3・4後続のSQLを実行しない
5レスポンスへのマッピングを行わない
6効果なし
{フォルダ名}_model.py(エラーの設定例)
self.sqldict['message']['status'] = 'ERROR'
self.sqldict['message']['msg'] = 'メッセージ'
return 'ERROR'
フォルダ内容
BatchLoad/バッチ処理の起動プログラム({起動名}.py)
BatchLoadOut/起動プログラムの実行結果の出力先
BatchRerun/バッチ処理を再処理するプログラム(すべてのバッチで共通)
{起動名}.py(起動プログラムの例)
import sys
from halumain.haluconf         import HaluConf
from batchstartup.batchstartup import BatchStartup

def main(args):
    conf        = HaluConf()
    file_path   = conf.apppath + "/{アプリケーション名}/Json/Apps/{起動名}/{起動名}_{起動のトランザクション名}_tran.json"
    output_path = conf.apppath + "/{アプリケーション名}/Server/BatchLoadOut/{起動名}_{起動のトランザクション名}_result.txt"
    batch_run = BatchStartup(file_path, output_path)
    batch_run.call(args)

if __name__ == '__main__':
    args = sys.argv
    main(args)
id定義する場所内容
batchStartup起動画面のsql.json起動プログラムのパス(バッチロードパス名)とバッチ処理名(ログ出力用)。
このidが定義されている場合、アプリケーションサーバーが起動プログラムを起動する。
定義されていない場合は、バッチは起動されず、画面には正常終了が返る
batchParam起動画面のsql.json、起動用の定義のtran.json(request)とsql.json、処理用の定義のtran.json(request)バッチに渡すパラメータ(例:ログインユーザーの情報)(省略可)
batchKey起動用の定義のsql.json、処理用の定義のtran.json(request)処理対象のキー。起動用の定義ではselectで一覧を取得し、処理用の定義では1件分を受け取る
batchControll起動用の定義のsql.json管理情報。
ロードパス名(処理用の定義のフォルダ)、処理モード(処理用の定義のファイル名の前半。{処理名}_{処理のトランザクション名})、
分割数、処理名(バッチ管理テーブルに記録する名前。フォルダ名の{処理名}とは別)など
  1. 起動画面が、バッチを起動するトランザクションのリクエストをアプリケーションサーバーに送信する
  2. アプリケーションサーバーは、sql.jsonを実行する。SQLの処理後にstatusが"ERROR"でなく、batchStartupがある場合は、batchParamの項目を起動引数にして起動プログラムを起動する
  3. 起動プログラムが、起動用の定義のtran.jsonのパスと実行結果の出力先(SampleではBatchLoadOut/)を指定して、起動処理(BatchStartup)を呼び出す
  4. 起動処理が、起動引数をrequestのbatchParamに設定し、入力チェック(validation.json)とsql.jsonを実行する
  5. 起動処理が、sql.jsonの実行結果(batchParam・batchKey・batchControll)をバッチサーバーに渡す
  6. バッチサーバーが、受け取った内容を管理テーブルに登録する
  7. バッチサーバーが、キーの一覧を分割数で分ける。分割ごとに、バッチサーバーがキーを1件ずつ、パラメータとあわせて処理用の定義のtran.jsonのrequestに設定し、sql.jsonを実行する
id定義する場所内容
printKey呼び出し元の画面のsql.json、帳票フォルダのtran.json(request)印刷する対象のキー。
呼び出し元の画面では、SQLの実行結果(output)をキーの一覧とし、帳票フォルダでは1件分を受け取る
printParam呼び出し元の画面のsql.json、帳票フォルダのtran.json(request)帳票フォルダ(html)、帳票のトランザクション名(mode)、帳票に渡すパラメータ(例:検索条件)。常に1行。
このidが定義されている場合、アプリケーションサーバーが帳票出力を開始する
  1. 呼び出し元の画面が、印刷のトランザクションのリクエストをアプリケーションサーバーに送信する
  2. アプリケーションサーバーは、sql.jsonを実行する。SQLの処理後にstatusが"ERROR"でなく、printParamがある場合は、sql.jsonの実行結果をプリントサーバーに渡す
  3. プリントサーバーが、printParamのhtml・modeで帳票フォルダのtran.jsonを読み込み、requestのprintKey(キー1件分)とprintParamに値を設定する
  4. プリントサーバーが、帳票フォルダのsql.jsonを実行する
  5. プリントサーバーが、tran.jsonのresponseの定義に従ってレスポンスを作成する
  6. プリントサーバーが、excelinfoの定義に従って、ページヘッダー・明細・ページフッターの順にExcelのセルに値を書き込む
  7. キーが複数ある場合は、キーごとに3〜6を繰り返す
  8. プリントサーバーが、ExcelをDownLoad/Apps/{帳票名}/に保存し、LibreOfficeでPDFに変換する
  9. プリントサーバーが、excelinfo(出力したExcelのパス・pdfnameなど)とメッセージだけをレスポンスとして返す
  10. 呼び出し元の画面が、レスポンスのexcelinfoをもとにPDFをダウンロードする