5. 後処理¶
コラム
5.1. 後処理プログラムの実装¶
5.1.1. JavaEE開発モデル¶
JavaEE開発モデルにおいて、後処理プログラムを実装する手順を示します。
5.1.1.1. 実装規約¶
JavaEE開発モデルにおいて、後処理プログラムを実装する場合、下記の制約に従って実装する必要があります。
jp.co.intra_mart.foundation.forma.userprogram.PostProcessExecutor を継承すること
プログラムを実行するタイミングに合わせて以下のメソッドを実装すること
データの登録時
regist(PostProcessParameter formaParam, Map<String, Object> sendParam) メソッド
データの更新時
update(PostProcessParameter formaParam, Map<String, Object> sendParam) メソッド
データの削除時
remove(PostProcessParameter formaParam) メソッド
5.1.1.2. パラメータ¶
各メソッドに渡されるパラメータが保持する情報は以下の通りです。
5.1.1.2.2. sendParamマップ¶
画面から渡されたリクエスト情報を保持する送信パラメータMap です。画面アイテム「明細テーブル」を除く入力アイテムのキーはフィールド識別ID になります。画面アイテム「明細テーブル」のキーはテーブル識別ID です。アプリケーション種別がIM-Workflow の場合は、各種一覧画面から呼び出された際に受け取ることができるIM-Workflow リクエストパラメータ情報を含みます。取得可能なIM-Workflow リクエストパラメータの詳細は「 IM-Workflow プログラミングガイド 」-「 リクエストパラメータ 」を参照してください。アプリケーションの登録データの取得は、登録データ情報管理API を利用しても取得が可能です。取得方法については、後述のデータの取得メソッドを参照してください。但し、送信パラメータまたは API の取得データには、画面アイテム「ファイルアップロード」のアップロードファイル情報は含まれません。
入力アイテムのデータ型と取得値の対比
入力アイテムのデータ型と取得値は以下の通りです。
アイテムのデータ型 取得値 該当する主なアイテム 文字列 文字列
- 文字列
- 複数行文字列
- (関数※1)
- (一覧選択※1)
- チェックボックス ※2
- ラジオボタン
- セレクトボックス
- リストボックス ※2
数値 数値の文字列
- 数値
- (関数※1)
- (一覧選択※1)
日付またはタイムスタンプ システムタイムゾーンにおける1970年1月1日0時0分0秒0ミリ秒からの通算ミリ秒の数値文字列
- 日付
- 期間
- (関数※1)
- (一覧選択※1)
※1: 画面アイテム「関数」、「一覧選択」は取得値の設定により画面アイテムのデータ型が決定します。※2: 複数項目選択可能な画面アイテム(チェックボックス、リストボックス)は選択された値をカンマ区切りにして値が設定されます。画面アイテム「明細テーブル」の取得値
値は1レコード(行)毎に各列のフィールド識別ID と値をマッピングした Map の List です。各列のデータ型は列タイプに依存します。
5.1.1.3. PC表示/スマートフォン表示で処理を分岐する¶
画面表示方法ごとに後処理プログラムのロジックを変更したい場合は、実行中の画面表示タイプを取得し、処理を分岐します。
実行中の画面表示タイプは、sendParamマップのキー imfr_display_client_typeから取得可能です。
- PC表示
- imfr_display_client_typeの値がpcとなります。
- スマートフォン表示
- imfr_display_client_typeの値がspとなります。
5.1.1.4. 返却値とエラー処理¶
返却値はありません。処理中にエラーが発生した場合は、 Exception を throw してください。処理中にエラーが発生した場合に画面に任意のメッセージを表示したい場合は、FormaUserProcessException を throw してください。エラーが発生した場合は、処理を中断しエラー発生以前に行われたすべての処理がロールバックされます。
5.1.1.5. トランザクションの制御¶
後処理プログラムはトランザクション内で実行されるため、このプログラム中では DB トランザクション制御を行うことはできません。実行プログラム中においてトランザクションのコミット、ロールバック等は行わないでください。
5.1.1.6. 実装例¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public class SamplePostProcess extends PostProcessExecutor{ /** * 登録処理を行った場合に実行されます。<BR> * * @param formaParam フォルマパラメータ * @param sendParam 送信パラメータ * @throws Exception 例外が発生 */ public void regist(PostProcessParameter formaParam, Map<String, Object> sendParam) throws Exception { System.out.println("************** JAVAEE 開発:登録後処理サンプルプログラム ****************"); // ここに登録処理後に実行する処理を記述します。 // エラー発生時に画面に表示するメッセージを指定する場合は、FormaUserProcessException をthrowします。 if (XXXX) { final FormaUserProcessException error = new FormaUserProcessException(new XXXXException()); error.setUserMessage("---- 画面に表示したいメッセージ----"); // error.setOutputLog(false); throw error; } } /** * 更新処理を行った場合に実行されます。<BR> * * * @param formaParam フォルマパラメータ * @param sendParam 送信パラメータ * @throws Exception 例外が発生 */ public void update(PostProcessParameter formaParam, Map<String, Object> sendParam) throws Exception { System.out.println("************** JAVAEE 開発:更新後処理サンプルプログラム****************"); // ここに更新処理後に実行する処理を記述します。 } /** * 削除処理を行った場合に実行されます。<BR> * * @param formaParam フォルマパラメータ * @throws Exception 例外が発生 */ public void remove(PostProcessParameter formaParam) throws Exception { System.out.println("************** JAVAEE 開発:削除後処理サンプルプログラム****************"); // ここに削除処理後に実行する処理を記述します。 }
5.1.2. スクリプト開発モデル¶
スクリプト開発モデルにおいて、後処理プログラムを実装する手順を示します。
5.1.2.1. 実装規約¶
スクリプト開発モデルにおいて、後処理プログラムを実装する場合、下記の制約に従って実装する必要があります。
プログラムを実行するタイミングに合わせて以下のメソッドを実装すること
データの登録時
regist(formaParam, sendParam)メソッド
データの更新時
update(formaParam, sendParam) メソッド
データの削除時
remove(formaParam) メソッド
5.1.2.2. パラメータ¶
5.1.2.2.1. formaParamオブジェクト¶
IM-FormaDesigner の画面の基本情報を保持します。
項目 説明 loginUserCd(String) ログインユーザコード applicationId(String) アプリケーションID applicationNo(Number) アプリケーションバージョンNO(アプリケーション履歴番号) insertId(String) データ登録ID applicationType(String) アプリケーション種別アプリケーション種別は FRApplicationManager オブジェクトに定義されています。
APPLICATION_TYPE_STD標準 APPLICATION_TYPE_IMWIM-WorkflowIM-BIS の場合、アプリケーション種別は BisApplication オブジェクトに定義されています。
BIS_APPLICATION_TYPE_WORKFLOWワークフロー BIS_APPLICATION_TYPE_BUSINESSFLOWBPMappPageType(String) アプリケーションページ種別アプリケーションページ種別は FRApplicationPageInfo オブジェクトに定義されています。
REGISTRATION登録・申請処理 EDIT更新・再申請処理 POSTSCRIPT承認処理 REFERENCE参照 REFERENCE_EDIT参照時の更新処理(IM-Workflow 時のみ)processKey(String) プロセスキー
5.1.2.2.2. sendParamオブジェクト¶
画面から渡されたリクエスト情報を保持する送信パラメータオブジェクトです。画面アイテム「明細テーブル」を除く入力アイテムのパラメータ名はフィールド識別ID になります。画面アイテム「明細テーブル」のパラメータ名はテーブル識別ID です。アプリケーション種別がIM-Workflow の場合は、各種一覧画面から呼び出された際に受け取ることができるIM-Workflow リクエストパラメータ情報を含みます。取得可能なIM-Workflow リクエストパラメータの詳細は「 IM-Workflow プログラミングガイド 」-「 リクエストパラメータ 」を参照してください。アプリケーションの登録データの取得は、登録データ情報管理API を利用しても取得が可能です。取得方法については、後述のデータの取得メソッドを参照してください。但し、送信パラメータまたは API の取得データには、画面アイテム「ファイルアップロード」のアップロードファイル情報は含まれません。
入力アイテムのデータ型と取得値の対比
入力アイテムのデータ型により取得値は以下のように設定されています。
アイテムのデータ型 取得値 該当する主なアイテム 文字列 文字列
- 文字列
- 複数行文字列
- (関数※1)
- (一覧選択※1)
- チェックボックス ※2
- ラジオボタン
- セレクトボックス
- リストボックス ※2
数値 数値の文字列
- 数値
- (関数※1)
- (一覧選択※1)
日付またはタイムスタンプ システムタイムゾーンにおける1970年1月1日0時0分0秒0ミリ秒からの通算ミリ秒の数値文字列
- 日付
- 期間
- (関数※1)
- (一覧選択※1)
※1: 画面アイテム「関数」、「一覧選択」は取得値の設定により画面アイテムのデータ型が決定します。※2: 複数項目選択可能な画面アイテム(チェックボックス、リストボックス)は選択された値をカンマ区切りにして値が設定されます。画面アイテム「明細テーブル」の取得値
値は1レコード(行)毎に各列のフィールド識別ID と値をマッピングしたオブジェクトの配列です。各列のデータ型は列タイプに依存します。
5.1.2.3. PC表示/スマートフォン表示で処理を分岐する¶
画面表示方法ごとに後処理プログラムのロジックを変更したい場合は、実行中の画面表示タイプを取得し、処理を分岐します。
実行中の画面表示タイプは、sendParamオブジェクトのキー imfr_display_client_typeから取得可能です。
- PC表示
- imfr_display_client_typeの値がpcとなります。
- スマートフォン表示
- imfr_display_client_typeの値がspとなります。
5.1.2.4. 返却値とエラー処理¶
返却オブジェクト ├ error : エラーフラグ 処理に失敗した場合は true 、成功した場合はfalse ├ errorMessage : エラーメッセージ(※設定したメッセージはエラーログに出力されます。) ├ userErrorMessageId : 後処理プログラム実行中のエラー発生時に画面に表示するメッセージのID ├ userErrorMessage : 後処理プログラム実行中のエラー発生時に画面に表示するメッセージ(※userErrorMessageIdに設定がある場合はuserErrorMessageIdが適用されます。) └ outputLog : ログ出力有無フラグ ユーザプログラム実行中にエラーが発生した際のログ出力有無を設定します。 省略した場合はtrue(出力する)です。エラー発生時には返却オブジェクトのエラーフラグを true にしてエラーメッセージを設定してください。エラーフラグが true の場合は、処理を中断しエラー発生以前に行われたすべての処理がロールバックされます。
- トランザクションの制御
- 後処理プログラムはトランザクション内で実行されるため、このプログラム中では DB トランザクション制御を行うことはできません。実行プログラム中においてトランザクションのコミット、ロールバック等は行わないでください。
5.1.2.5. 実装例¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // 登録 function regist(formaParam, sendParam) { Debug.print('************** スクリプト開発:登録後処理サンプルプログラム ****************'); // ここに登録処理後に実行する処理を記述します。 return { 'error' : false }; // エラーが発生した場合 // return {'error' : true, 'errorMessage' :'エラーメッセージ'}; // エラー発生時に画面に表示するメッセージを指定する場合 // return {'error' : true, 'userErrorMessage' :'---- 画面に表示したいメッセージ----'}; } // 更新 function update(formaParam, sendParam) { Debug.print('************** スクリプト開発:更新後処理サンプルプログラム ****************'); // ここに更新処理後に実行する処理を記述します。 return { 'error' : false }; } // 削除 function remove(formaParam) { Debug.print('************** スクリプト開発:削除後処理サンプルプログラム ****************'); // ここに削除処理後に実行する処理を記述します。 return { 'error' : false }; }