Wagbyが生成したコードを活かして、さまざまな業務ロジックを実装することができます。WagbyではサーバサイドJavaScriptを「スクリプト」と呼びます。またクライアントJavaScriptを「JavaScript」と呼びます。

一般に "JavaScript" といえば、Webブラウザ上で実行されるクライアントサイドJavaScriptとして知られています。これはHTML要素の操作のために使われるもので、主に「画面描画」に関する処理を記述します。

本章で説明するスクリプト(サーバサイドJavaScript)は、Javaオブジェクトを操作するために用います。文法は両方ともJavaScriptですが、両者は目的が異なります。ここで説明するスクリプトは業務ロジックを記述するものです。画面表示をカスタマイズすることはできません。

図1 サーバサイドJavaScriptとクライアントサイドJavaScript
Wagbyでは、サーバサイドJavaScriptのことを「スクリプト」と表記します。クライアントJavaScriptのことを「JavaScript」と表記します。
サーバサイドJavaScript技術は、Java に標準で組み込まれています。JavaScript で記述されたプログラムから、Java オブジェクトを操作できるという特徴があります。またビルド不要で、すぐに動作させることができます。

スクリプトの作成方法

「画面 > スクリプト」からスクリプトファイルを作成することができます。編集後、Wagbyアプリケーションで対応するモデルの画面を再描画(リロード)することで、すぐに動作を確認することができます。

図2 スクリプトの入力

スクリプト欄をクリックすると、エディタが起動します。

図3 スクリプトエディタ
テキストエディタはオープンソースの Ace を同梱しています。

バージョン

「環境 > サーバ > Javaのバージョン」は "1.8" 以上を指定します。標準は "1.8" となっています。

図4 Javaのバージョン

動作の確認

Wagbyが標準で提供している「グループ」モデル (jgroup) の新規登録時にメッセージを表示するコードを作成してみます。

はじめにアプリケーションをビルドし、起動します。(設計情報の内容は問いません。)

アプリケーションは起動した状態で、Designerからシステムモデルの「グループ」を選択します。これは Wagby に標準で同梱されています。

図5 システムタブに含まれるjgroupモデル

「画面 > スクリプト」を開きます。次のように入力します。

stdout.println("Hello from JavaScript.");
stdout はスクリプトのどこでも使うことができる「暗黙オブジェクト」として用意されています。stdout.println(文字列) と記述すると、Tomcat コンソールに文字列が表示されます。
図6 サンプルのスクリプト

管理者権限をもったアカウントでアプリケーションにログオンします。管理処理メニューから「グループ 新規登録」を実行します。

登録処理を行ったタイミングで、アプリケーションを起動した (Tomcat) コンソールにメッセージが表示されていることを確認します。

図7 スクリプトの動作を確認する

「画面 > スクリプト」では実行タイミングを指定して、スクリプトを記述することができます。

図8 スクリプトの入力
実行タイミング説明
登録 「初期値 > 登録時」を行ったあとに呼び出されます。登録直前のデータを修正することができます。この処理を行った後のデータが、データベースに保存されます。
「初期値 > 登録時」を行う前に呼び出す場合は、関数 preprocess を用意することができます。
登録(初期データ作成) 「初期値 > 登録画面表示時」を行ったあとに呼び出されます。新規登録用のデータを修正することができます。この処理を行った後のデータが、登録画面に表示されます。
「初期値 > 登録画面表示時」を行う前に呼び出す場合は、関数 preprocess を用意することができます。
更新 「初期値 > 更新時」を行ったあとに呼び出されます。更新直前のデータを修正することができます。この処理を行った後のデータが、データベースに保存されます。
「初期値 > 更新時」を行う前に呼び出す場合は、関数 preprocess を用意することができます。
詳細画面表示 「初期値 > 詳細画面表示時」を行ったあとに呼び出されます。表示直前のデータを修正することができます。この処理を行った後のデータが、詳細画面に表示されます。(データベースには反映されません。表示の直前で内部のデータを改変する必要がある場合に利用できます。例えば一部のデータを表示時に隠す、などです。)
「初期値 > 詳細画面表示時」を行う前に呼び出す場合は、関数 preprocess を用意することができます。
詳細画面表示(更新) 更新画面を開くタイミングでデータベースの値を読み込みますが、そのあとにこのスクリプトが呼び出されます。更新対象データを改変してから、利用者に入力してもらうという場合に利用できます。
詳細画面表示(一覧) 一覧画面を開くタイミングでデータベースの値を読み込みますが、そのあとにこのスクリプトが呼び出されます。一覧表示の直前で内部のデータを改変する必要がある場合に利用できます。
計算 定義済みの自動計算式を実行したあとに、このスクリプトが呼び出されます。自動計算式では記述できない、より複雑な処理を実装する場合に利用できます。

なお、このスクリプトを用意する場合、モデルに何らかの四則演算式が指定されている必要があります。(意味のない設定、例えば「値を0にする」といったダミー定義でもよいので、四則演算を使う設定を行ってください。)
一括更新 「検索・一覧表示画面 > 一括更新ボタンを表示する」の処理内容を記述します。
入力チェック・整合性チェック 標準で用意している、必須チェックや文字数チェックといった機能の後に実行されます。(正確には、入力チェックの最後の処理となります。)

トランザクション処理

トランザクション処理はモデル項目詳細定義で記述します。詳細は「モデルをまたがる計算(トランザクション)」で説明します。

図9 トランザクション制御時のスクリプト

画面遷移

画面遷移のタイミングで実行されるスクリプトを作成することもできます。詳細は「画面遷移」で説明します。

入力したスクリプトから、拡張子 ".js" のファイルが生成されます。 実ファイルは wagbyapp/webapp/$(APPNAME)/WEB-INF/script/モデルIDフォルダ の中に用意されます。

$(APPNAME) は、プロジェクト識別子です。標準は "wagby" となっています。
実行タイミングファイル名
登録 モデルIDHelper_beforeInsert.js
登録(初期データ作成) モデルIDHelper_initialize.js
更新 モデルIDHelper_beforeUpdate.js
詳細画面表示 モデルIDHelper_beforeShow.js
詳細画面表示(更新) モデルIDHelper_beforeShowInUpdate.js
詳細画面表示(一覧) モデルIDHelper_beforeShowInShowList.js
計算 モデルIDHelper_calc.js
一括更新 ShowListモデルIDController_do_updateRule.js
入力チェック モデルIDPInputCheckHelper_input_check.js
トランザクション モデルIDEntityService_doTransactionBy${トランザクションを設定した項目ID}InsertTransaction.js
モデルIDEntityService_doTransactionBy${トランザクションを設定した項目ID}UpdateTransaction.js
モデルIDEntityService_doTransactionBy${トランザクションを設定した項目ID}DeleteTransaction.js
画面遷移 操作アクション + モデルID + "_" + ボタン操作でサーバに送られる文字列.js

Wagby ではスクリプトやパラメータ記述においてキャメル記法というルールが適用されます。

  • 項目IDが複合語の場合、先頭を小文字で書き始めます。項目IDが Item123 の場合、スクリプトでは item123 となります。
  • 項目IDに "_" (アンダースコア)が含まれている場合、その "_" は除去され、その次の文字が大文字になります。例えば customer_id は customerId になります。kana_name は kanaName になります。
  • アンダースコアを取り除いたあとの先頭が小文字で、二文字目が大文字の場合、先頭も大文字となります。例えば p_number は pNumber となったあと、最終的に PNumber になります。

スクリプトでは「項目ID」にキャメル記法が適用されます。

次の方法で、どのようなスクリプトファイルがどのタイミングで呼び出されるかを調べることができます。

  1. ビルドされたアプリケーションの webapps\$(APPNAME)\WEB-INF\classes フォルダに含まれる jfcbase.properties をテキストエディタで開きます。
  2. 次の行を見つけ、先頭の ";" を除きます。
    (修正前)
    ;jp.jasminesoft.jfc.ScriptCodeRunner.isOutputStatusToConsole=true
    ;jp.jasminesoft.jfc.ScriptCodeRunner4Controller.isOutputStatusToConsole=true
    (修正後)
    jp.jasminesoft.jfc.ScriptCodeRunner.isOutputStatusToConsole=true
    jp.jasminesoft.jfc.ScriptCodeRunner4Controller.isOutputStatusToConsole=true

  3. アプリケーションを起動します。
  4. アプリケーションを操作するたびに、Tomcatのコンソールに、どのスクリプトファイルを実行しようとしたかが表示されます。(ファイルが存在しなければ実行されることはありません。)