IM-FormaDesigner Ver.7.2のパッチ2を本日、リリースいたしました。
パッチ2では、IM-共通マスタとIM-Workflowの画面アイテムの追加や、後処理機能の追加等々を行っています。
様々な新機能をぜひ活用してください。
新機能については、リリースノートや更新履歴をご覧ください。
今日は、パッチ2で追加された後処理プログラムと入力チェックプログラムについて、ちょっとご紹介します。詳細は「プログラミングガイド」をご覧ください。
後処理プログラムとは
後処理プログラムを実装することで、アプリケーションデータの登録・更新・削除処理後に動作する独自の処理をアプリケーションに組み込むことができます。
たとえば、他のデータベースへの連携や基幹系システムに連携したりすることができます。
後処理プログラムは JavaEE 開発モデルまたはスクリプト開発モデルで作成することができます。以下のようなインターフェースを実装して、アプリケーションにプログラムを設定します。
例:JavaEE 開発モデル
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 46 47 48 49 50 51 52 |
package jp.co.intra_mart.sample.forma.template; import java.util.Map; import jp.co.intra_mart.foundation.forma.userprogram.PostProcessExecutor; import jp.co.intra_mart.foundation.forma.userprogram.PostProcessParameter; /** forma後処理プログラム (JavaEE開発モデル)テンプレート*/ public class PostProcess extends PostProcessExecutor{ /** * 登録処理を行った場合に実行されます。<BR> * * @param formaParam フォルマパラメータ * @param sendParam 送信パラメータ * @throws Exception 例外が発生 */ public void regist(PostProcessParameter formaParam, Map sendParam) throws Exception { System.out.println("************** JAVAEE開発:forma登録処理後処理プログラム ****************"); System.out.println("applicationId:" + formaParam.getApplicationId()); System.out.println("applicationNo:" + formaParam.getApplicationNo()); System.out.println("insertId:" + formaParam.getInsertId()); System.out.println("applicationType:" + formaParam.getApplicationType().name()); System.out.println("responseType:" + formaParam.getAppPageType().name()); System.out.println(sendParam); } /** * 更新処理を行った場合に実行されます。<BR> * * * @param formaParam フォルマパラメータ * @param sendParam 送信パラメータ * @throws Exception 例外が発生 */ public void update(PostProcessParameter formaParam, Map sendParam) throws Exception { System.out.println("************** JAVAEE開発:forma更新処理後処理プログラム ****************"); System.out.println("applicationId:" + formaParam.getApplicationId()); System.out.println("applicationNo:" + formaParam.getApplicationNo()); System.out.println("insertId:" + formaParam.getInsertId()); System.out.println("applicationType:" + formaParam.getApplicationType().name()); System.out.println("responseType:" + formaParam.getAppPageType().name()); System.out.println(sendParam); } /** * 削除処理を行った場合に実行されます。<BR> * * @param formaParam フォルマパラメータ * @throws Exception 例外が発生 */ public void remove(PostProcessParameter formaParam) throws Exception { System.out.println("************** JAVAEE開発:削除処理後処理プログラム ****************"); System.out.println("applicationId:" + formaParam.getApplicationId()); System.out.println("applicationNo:" + formaParam.getApplicationNo()); System.out.println("insertId:" + formaParam.getInsertId()); } } |
例:スクリプト開発モデル
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 |
//============================================================================== // 後処理プログラム テンプレート // // 【 入力 】 formaParam : フォルマパラメータオブジェクト // formaParam.loginGroupId : ログイングループID // formaParam.loginUserId : ログインユーザID // formaParam.applicationId : アプリケーションID // formaParam.applicationNo : アプリケーション番号 // formaParam.applicationType : アプリケーション種別 // formaParam.pageType : アプリケーションページ種別 // formaParam.insertId : 登録ID // sendParam : 送信パラメータオブジェクト // // 【返却値】 result.error : エラーフラグ [true:失敗/false:成功] // result.errorMessage : エラーメッセージ // // 【 詳細 】 このプログラム中ではDBトランザクションを張らないで下さい。 // //============================================================================== // 登録 function regist(formaParam, sendParam) { Debug.print("************** スプリクト開発:登録後処理プログラム ****************"); Debug.console(formaParam); Debug.console(sendParam); return {"error" : false}; } // 更新 function update(formaParam, sendParam) { Debug.print("************** スプリクト開発:更新後処理プログラム ****************"); Debug.console(formaParam); Debug.console(sendParam); return {"error" : false}; } // 削除 function remove(formaParam) { Debug.print("************** スプリクト開発:削除後処理プログラム ****************"); Debug.console(formaParam); return {"error" : false}; } |
入力チェックプログラムとは
入力チェックプログラムでは、以下の2つのパターンの実装が可能です。
- 入力チェックの内容をアプリケーション固有のルールに基づいて動的に変更したい
- アプリケーション固有の入力チェックをしたい
たとえば、以下のようなことができます。
- あるアイテムの入力値によって、他のアイテムが必須であるかどうかを決定したい
- ログインユーザの役職によってあるフィールドの上限値を動的に変更したい
- 入力値に対してフィールド固有のフォーマットチェックをしたい
- アイテム間で入力値の相関チェックをしたい
- 入力値に対してマスタの存在チェックをしたい
入力チェックプログラムは、スクリプト開発モデルで開発します。3つの関数getCustomProperties()、validate()、getErrorDisplayOrders()を実装する必要がります。以下はそのテンプレートです。
例:スクリプト開発モデル
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
//============================================================================== // 入力チェック テンプレート // カスタムプロパティ取得関数 // // 【 入力 】 formaParam : フォルマパラメータオブジェクト // formaParam.loginGroupId : ログイングループID // formaParam.loginUserId : ログインユーザID // formaParam.applicationId : アプリケーションID // formaParam.applicationNo : アプリケーション番号 // formaParam.applicationType : アプリケーション種別 // formaParam.pageType : アプリケーションページ種別 // formaParam.formId : フォームID // formaParam.insertId : 登録ID // sendParam : 送信パラメータオブジェクト // // 【返却値】 result.data : カスタムプロパティオブジェクト // result.error : エラーフラグ [true:失敗/false:成功] // result.errorMessage : エラーメッセージ // // // //============================================================================== function getCustomProperties(formaParam, sendParam) { Debug.print("************** 入力チェックプログラム:カスタムプロパティ取得 ****************"); Debug.console(formaParam); Debug.console(sendParam); var customPropObj = {}; var result = {error : false}; // フィールド「radio」の値がaではなかったらフィールド「textbox」の必須チェックを外す if (sendParam["radio"] != "a") { customPropObj["textbox"] = {}; customPropObj["textbox"][FRInputProperties.PROP_REQUIRED] = false; } result.data = customPropObj; return result; // return {error : false, data : {}}; } //============================================================================== // 入力チェック テンプレート // ユーザバリデーション実行関数 // // 【 入力 】 formaParam : フォルマパラメータオブジェクト // formaParam.loginGroupId : ログイングループID // formaParam.loginUserId : ログインユーザID // formaParam.applicationId : アプリケーションID // formaParam.applicationNo : アプリケーション番号 // formaParam.applicationType : アプリケーション種別 // formaParam.pageType : アプリケーションページ種別 // formaParam.formId : フォームID // formaParam.insertId : 登録ID // sendParam : 送信パラメータオブジェクト // resultObj : 処理結果返却オブジェクト // // 【返却値】 resultObj : 処理結果返却オブジェクト // result.error : エラーフラグ [true:入力チェックエラーあり/false:入力チェックエラーなし] // result.systemError : システムエラーフラグ [true:失敗/false:成功] // result.errorMessageList : エラーメッセージ情報配列 // result.errorInfoList : エラー情報配列 // result.errorList[x].checkid : 入力チェックID // result.errorList[x].acceptErrorObj : 返却オブジェクト // result.errorList[x].acceptErrorObj.inputId : フィールド識別ID // //============================================================================== function validate(formaParam, sendParam, resultObj) { Debug.print("************** 入力チェックプログラム:ユーザバリデーション実行 ****************"); Debug.console(formaParam); Debug.console(sendParam); // ユーザバリデーションその1 相関チェック(フィールド「listbox1」と「listbox2」) var ret1 = false; var errorInfoList = []; if (sendParam["listbox1"] == "1") { if (sendParam["listbox2"] == "1" || sendParam["listbox2"] == "2") ret1 = true; } else if (sendParam["listbox1"] == "2") { if (sendParam["listbox2"] == "2" || sendParam["listbox1"] == "3") ret1 = true; } else { if (sendParam["listbox2"] == "4" || sendParam["listbox1"] == "5") ret1 = true; } var errorMessage = MessageManager.getMessage("xxxxxxxxxxxxxxxxxxxx"); if (!ret1) { ImFormaUtil.addValidationError(resultObj, errorMessage, ["listbox1", "listbox2"] ); } return resultObj; } //============================================================================== // 入力チェック テンプレート // エラーメッセージ表示順序取得関数 // // 【 入力 】 formaParam : フォルマパラメータオブジェクト // // // 【返却値】 エラーメッセージを表示する順序で格納されたアイテムID・入力チェックIDの配列 // //============================================================================== function getErrorDisplayOrder(formaParam) { Debug.print("************** 入力チェックプログラム:ユーザバリデーション実行 ****************"); Debug.console(formaParam); var arry = []; arry.push(ImFormaUtil.getItemIdByInputId("radio")); arry.push(ImFormaUtil.getItemIdByInputId("textbox")); arry.push(ImFormaUtil.getItemIdByInputId("number")); arry.push(ImFormaUtil.getItemIdByInputId("listbox1")); arry.push(ImFormaUtil.getItemIdByInputId("listbox2")); arry.push("check1"); arry.push(ImFormaUtil.getItemIdByInputId("checkbox1")); return arry; } |
詳細は、この度新しく公開いたしました「プログラミングガイド」をご覧ください。