IM-FormaDesigner for Accel Platform / プログラミングガイド 第6版 2015-08-01

6. 前処理

IM-FormaDesigner for Accel Platform では、登録(申請)画面、編集(再申請)画面、詳細画面、承認画面など画面を表示するタイミングに任意のプログラムを実行することができる機能を提供しています。
前処理プログラムのしくみを利用することで画面アイテム「ファイルアップロード」を除いた入力系の画面アイテムに初期表示する値を指定することができます。
  • 前処理が呼ばれる流れと値を設定するしくみ
../../_images/preprocess_explain.png

6.1. 前処理プログラムの実装

6.1.1. JavaEE開発モデル

JavaEE開発モデルにおいて、前処理プログラムを実装する手順を示します。

6.1.1.1. 実装規約

JavaEE開発モデルにおいて、前処理プログラムを実装する場合、下記の制約に従って実装する必要があります。

  • アプリケーション種別が「標準」の場合

    jp.co.intra_mart.foundation.forma.userprogram.StandardPreProcessExecutor を継承すること

    プログラムを実行するタイミングに合わせて以下のメソッドを実装すること

    • 登録画面の表示時

      regist(final PreProcessParameter formaParam, final Map<String, Object> uppParam) メソッド

    • 編集画面の表示時

      edit(final PreProcessParameter formaParam, final Map<String, Object> uppParam) メソッド

    • 詳細画面の表示時

      refer(final PreProcessParameter formaParam, final Map<String, Object> uppParam) メソッド

  • アプリケーション種別が「IM-Workflow」の場合

    jp.co.intra_mart.foundation.forma.userprogram.ImwPreProcessExecutor を継承すること

    プログラムを実行するタイミングに合わせて以下のメソッドを実装すること

    • 申請画面の表示時

      apply(final PreProcessParameter formaParam, final PreProcessWorkflowParameter workflowParam, final Map<String, Object> uppParam) メソッド

    • 再申請画面の表示時

      reapply(final PreProcessParameter formaParam, final PreProcessWorkflowParameter workflowParam, final Map<String, Object> uppParam) メソッド

    • 承認画面の表示時

      approve(final PreProcessParameter formaParam, final PreProcessWorkflowParameter workflowParam, final Map<String, Object> uppParam) メソッド

    • 詳細画面の表示時

      reference(final PreProcessParameter formaParam, final PreProcessWorkflowParameter workflowParam, final Map<String, Object> uppParam) メソッド

6.1.1.2. パラメータ

各メソッドに渡されるパラメータが保持する情報は以下の通りです。
6.1.1.2.1. jp.co.intra_mart.foundation.forma.userprogram.PreProcessParameter

IM-FormaDesigner for Accel Platformの基本情報を保持するクラスです。

../../_images/table_61121.png
6.1.1.2.2. jp.co.intra_mart.foundation.forma.userprogram.PreProcessWorkflowParameter
ワークフローに関するパラメータを保持するクラスです。
各画面で取得が可能なIM-Workflow リクエストパラメータの詳細は「IM-Workflow プログラミングガイド」を参照してください。
../../_images/table_61122.png
6.1.1.2.3. uppParamマップ
画面呼び出し時にユーザプログラム用に渡されたリクエスト情報を保持するパラメータMap です。
パラメータ名の頭に「upp_」と付いている情報がユーザプログラム用のパラメータと判断され受け渡しパラメータの対象になります。

6.1.1.3. 返却値

画面の初期表示値に任意の値を設定したい場合は返却値の更新データMapに値を設定して返却します。
更新データマップは Map<String, Object>形式で値を設定します。
画面表示時に同一フィールドに対して、前処理プログラムより与えられた更新データ、リクエストデータ、DBデータがあった場合に表示する値を決定する優先順位は以下の通りです。
前処理プログラムより与えられた更新データ > リクエストデータ > DBデータ
  • Map<String, Object>のデータ構造

    • 画面アイテム「明細テーブル」以外の画面アイテム

      キー :フィールド識別ID
      値 :表示する値
    • 画面アイテム「明細テーブル」のデータ

      キー :テーブル識別ID
      値 :1レコード(行)毎にフィールド識別ID と値をマッピングした Map の List 各列のデータ型は列タイプに依存します。
  • 画面アイテムのデータ型と値のデータ型

    ../../_images/table_61123.png

6.1.1.4. エラー処理

処理中にエラーが発生した場合は、 Exception を throw してください。
エラーが発生した場合は、処理を中断しエラー画面に遷移します。

6.1.1.5. トランザクションの制御

前処理プログラムはトランザクション内で実行されていません。
DB トランザクション制御を行う必要がある場合は、実行プログラム内においてトランザクションのコミット、ロールバック等を行ってください。

6.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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class SampleStandardPreProcess extends StandardPreProcessExecutor {
    
        /**
         * 登録画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> regist(final PreProcessParameter formaParam, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:標準用登録画面表示時前処理サンプルプログラム ****************");
            // ここに登録画面表示時に実行する処理を記述します。
    
            // ここに登録画面の各アイテムフィールドに任意の初期値を設定したい場合は、更新データMapを生成する処理を記述します。
            // 初期表示値の設定がない場合は、nullを返却してください。
            final Map<String, Object> updateData = new HashMap<String, Object>();
            // 文字列
            updateData.put("textbox1", "sample_setting_textbox1");
            // 数値
            updateData.put("number1", new Integer("10001"));
            // 日付
            updateData.put("calendar1", new Date());
            // チェックボックス
            updateData.put("checkbox1", "1,2");
            // テーブル識別IDが「table1」の明細テーブルに表示する値を設定する例
            final Map<String, Object> detaileTableData1 = new HashMap<String, Object>();
            detaileTableData1.put("table1_textbox1", "sample_setting_table_textbox1");
            detaileTableData1.put("table1_number1", new Integer("20001"));
            detaileTableData1.put("table1_calendar1", new Date());
            final Map<String, Object> detaileTableData2 = new HashMap<String, Object>();
            detaileTableData2.put("table1_textbox1", "sample_setting_table_textbox2");
            detaileTableData2.put("table1_number1", new Integer("20002"));
            detaileTableData2.put("table1_calendar1", new Date());
            final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            list.add(detaileTableData1);
            list.add(detaileTableData2);
            updateData.put("table1", list);
            return updateData;
        }
    
        /**
         * 編集画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> edit(final PreProcessParameter formaParam, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:編集画面表示時前処理サンプルプログラム ****************");
            // ここに編集画面表示時に実行する処理を記述します。
            return null;
        }
    
        /**
         * 参照画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> refer(final PreProcessParameter formaParam, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:参照画面表示時前処理サンプルプログラム ****************");
            // ここに参照画面表示時に実行する処理を記述します。
            return null;
        }
    }
    
  • アプリケーション種別が「IM-Workflow」の場合

     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
    public class SampleWorkflowPreProcess extends ImwPreProcessExecutor {
    
        /**
         * 申請画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param workflowParam ワークフローパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> apply(final PreProcessParameter formaParam, final PreProcessWorkflowParameter imwParameter, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:IM-Workflow用申請画面表示時前処理サンプルプログラム ****************");
            // ここに申請画面表示時に実行する処理を記述します。
    
            // ここに申請画面の各アイテムフィールドに任意の初期値を設定したい場合は、更新データMapを生成する処理を記述します。
            // 初期表示値の設定がない場合は、nullを返却してください。
            final Map<String, Object> updateData = new HashMap<String, Object>();
            // 文字列
            updateData.put("textbox1", "sample_setting_textbox1");
            // 数値
            updateData.put("number1", new Integer("10001"));
            // 日付
            updateData.put("calendar1", new Date());
            // チェックボックス
            updateData.put("checkbox1", "1,2");
            // テーブル識別IDが「table1」の明細テーブルに表示する値を設定する例
            final Map<String, Object> detaileTableData1 = new HashMap<String, Object>();
            detaileTableData1.put("table1_textbox1", "sample_setting_table_textbox1");
            detaileTableData1.put("table1_number1", new Integer("20001"));
            detaileTableData1.put("table1_calendar1", new Date());
            final Map<String, Object> detaileTableData2 = new HashMap<String, Object>();
            detaileTableData2.put("table1_textbox1", "sample_setting_table_textbox2");
            detaileTableData2.put("table1_number1", new Integer("20002"));
            detaileTableData2.put("table1_calendar1", new Date());
            final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            list.add(detaileTableData1);
            list.add(detaileTableData2);
            updateData.put("table1", list);
            return updateData;
        }
    
        /**
         * 承認画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param workflowParam ワークフローパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> approve(final PreProcessParameter formaParam, final PreProcessWorkflowParameter imwParameter, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:IM-Workflow用承認画面表示時前処理サンプルプログラム ****************");
            // ここに承認画面表示時に実行する処理を記述します。
            return null;
    
        }
    
        /**
         * 再申請画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param workflowParam ワークフローパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> reapply(final PreProcessParameter formaParam, final PreProcessWorkflowParameter imwParameter, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:IM-Workflow用再申請画面表示時前処理サンプルプログラム ****************");
            // ここに再申請画面表示時に実行する処理を記述します。
            return null;
        }
    
        /**
         * 参照画面表示時に実行されます。<BR>
         * @param formaParam フォルマパラメータ
         * @param workflowParam ワークフローパラメータ
         * @param uppParam ユーザプログラムパラメータ
         * @return 更新データ
         * @throws Exception 例外が発生
         */
        @Override
        public Map<String, Object> reference(final PreProcessParameter formaParam, final PreProcessWorkflowParameter imwParameter, final Map<String, Object> uppParam) throws Exception {
            System.out.println("************** JAVAEE 開発:アプリケーション種別:IM-Workflow用参照画面表示時前処理サンプルプログラム ****************");
            // ここに参照画面表示時に実行する処理を記述します。
            return null;
        }
    
    }
    

6.1.2. スクリプト開発モデル

スクリプト開発モデルにおいて、前処理プログラムを実装する手順を示します。

6.1.2.1. 実装規約

スクリプト開発モデルにおいて、前処理プログラムを実装する場合、下記の制約に従って実装する必要があります。

  • アプリケーション種別が「標準」の場合 画面を表示するタイミングに合わせて以下のメソッドを実装すること

    • 登録画面の表示時

      regist(formaParam, uppParam) メソッド

    • 編集画面の表示時

      edit(formaParam, uppParam) メソッド

    • 詳細画面の表示時

      refer(formaParam, uppParam) メソッド

  • アプリケーション種別が「IM-Workflow」の場合
    画面を表示するタイミングに合わせて以下のメソッドを実装すること
    • 申請画面の表示時

      apply(formaParam, imwParam, uppParam) メソッド

    • 再申請画面の表示時

      reapply(formaParam, imwParam, uppParam) メソッド

    • 承認画面の表示時

      approve(formaParam, imwParam, uppParam) メソッド

    • 詳細画面の表示時

      reference(formaParam, imwParam, uppParam) メソッド

6.1.2.2. パラメータ

6.1.2.2.1. formaParamオブジェクト

IM-FormaDesigner for Accel Platformの基本情報を保持します。

../../_images/table_61221.png
6.1.2.2.2. imwParamオブジェクト
ワークフローに関するパラメータを保持します。
各画面で取得が可能なIM-Workflow リクエストパラメータの詳細は「IM-Workflow プログラミングガイド」を参照してください。
../../_images/table_61222.png
6.1.2.2.3. uppParamオブジェクト
画面呼び出し時にユーザプログラム用に渡されたリクエスト情報を保持します。
パラメータ名の頭に「upp_」と付いている情報がユーザプログラム用のパラメータと判断され受け渡しパラメータの対象になります。

6.1.2.3. 返却値とエラー処理

処理結果オブジェクト
  ├ data : 更新データオブジェクト
  ├ error : エラーフラグ  処理に失敗した場合は true 、成功した場合はfalse
  ├ errorMessage : エラーメッセージ(※設定したメッセージはエラーログに出力されます。)
  ├ userErrorMessageId : 画面に表示するメッセージのID
  └ userErrorMessage : 画面に表示する詳細メッセージ(※userErrorMessageIdに設定がある場合に適用されます)
.
  • 返却値

    画面の入力フィールドに表示する初期表示値を任意の値に設定したい場合は更新データオブジェクトに値を設定します。
    画面表示時に同一フィールドに対して、前処理プログラムより与えられた更新データ、リクエストデータ、DBデータがあった場合に表示する値を決定する優先順位は以下の通りです。

    前処理プログラムより与えられた更新データ > リクエストデータ > DBデータ

  • 更新データオブジェクト

    • 画面アイテム「明細テーブル」以外の画面アイテム

      プロパティ:フィールド識別ID 値 :表示する値

    • 画面アイテム「明細テーブル」のデータ

      プロパティ:テーブル識別ID

      値 :1レコード(行)毎に各列のフィールド識別ID と値をマッピングしたオブジェクトの配列です。
      各列のデータ型は列タイプに依存します。
  • 画面アイテムのデータ型と値のデータ型

../../_images/table_61223.png
  • エラー発生時

    エラー発生時には処理結果オブジェクトのエラーフラグを true にしてください。
    エラーフラグが true の場合は、処理を中断しエラー画面に遷移します。
    画面に表示するメッセージIDの指定がなかった場合は、エラー画面にはデフォルトのエラーメッセージが表示されます。

6.1.2.4. トランザクションの制御

前処理プログラムはトランザクション内で実行されていません。
DB トランザクション制御を行う必要がある場合は、実行プログラム内においてトランザクションのコミット、ロールバック等を行ってください。

6.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
    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
    // 登録
    function regist(formaParam, appParam) {
        Debug.print("************** スクリプト開発:アプリケーション種別:標準用登録画面表示時前処理サンプルプログラム ****************");
        // ここに登録画面表示時に実行する処理を記述します。
    
        // ここに登録画面の各アイテムフィールドに任意の初期値を設定したい場合は、更新データオブジェクトを生成する処理を記述します。
        // 初期表示値の設定がない場合は空を返却してください。
    
        var obj = {
            "textbox1": "sample_setting_textbox1",
            "number1": 10001,
            "date1" : new Date(),
            "checkbox1" :"1,2", 
            "table1" : [
                 {
                   "table1_textbox1": "sample_setting_table_textbox1",
                   "table1_number1": 20001,
                   "table1_date1" : new Date()
                 },
                 {
                   "table1_textbox1": "sample_setting_table_textbox2",
                   "table1_number1": 20002,
                   "table1_date1" : new Date()
                 }
               ]
             };
        return {"error" : false, data : obj};
    }
    
    // 編集
    function edit(formaParam, appParam) {
        Debug.print("************** スクリプト 開発:アプリケーション種別:編集画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---appParam-----");
        Debug.console(appParam);
    
        var obj = {
          "textbox2": "u_data_ee",
          "number2": 22222,
          "date2" : new Date()
        };
        return {"error" : false, data : obj};
    }
    
    // 参照
    function refer(formaParam, appParam) {
        Debug.print("************** スクリプト 開発:アプリケーション種別:参照画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---appParam-----");
        Debug.console(appParam);
    
        var obj = {
          "textbox3": "u_data_eee",
          "number3": 33333,
          "date3" : new Date()
        };
        return {"error" : false, data : obj};
    }
    
  • アプリケーション種別が「IM-Workflow」の場合

     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
    // 申請
    function apply(formaParam, imwParam, uppParam)  {
        Debug.print("************** スクリプト 開発:アプリケーション種別:IM-Workflow用申請画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---imwParam-----");
        Debug.console(imwParam);
        Debug.print("---uppParam-----");
        Debug.console(uppParam);
    
        var obj = {
          "textbox1": "u_data_e",
          "number1": 11111,
          "date1" : new Date()
        };
         return {"error" : false, data : obj};
    }
    
    // 再申請
    function reapply(formaParam, imwParam, uppParam) {
        Debug.print("************** スクリプト 開発:アプリケーション種別:IM-Workflow用再申請画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---imwParam-----");
        Debug.console(imwParam);
        Debug.print("---uppParam-----");
        Debug.console(uppParam);
    
        var obj = {
          "textbox1": "u_data_e_",
          "number1": 111110,
          "date1" : new Date()
        };
        return {"error" : false, data : obj};
    }
    
    // 承認
    function approve(formaParam, imwParam, uppParam) {
        Debug.print("************** スクリプト 開発:アプリケーション種別:IM-Workflow用承認画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---imwParam-----");
        Debug.console(imwParam);
        Debug.print("---uppParam-----");
        Debug.console(uppParam);
    
        var obj = {
          "textbox2": "u_data_ee",
          "number2": 22222,
          "date2" : new Date()
        };
        return {"error" : false, data : obj};
    }
    
    
    // 参照
    function reference(formaParam, imwParam, uppParam) {
        Debug.print("************** スクリプト 開発:アプリケーション種別:IM-Workflow用参照画面表示時前処理サンプルプログラム ****************");
        Debug.print("---formaParam-----");
        Debug.console(formaParam);
        Debug.print("---imwParam-----");
        Debug.console(imwParam);
        Debug.print("---uppParam-----");
        Debug.console(uppParam);
    
        var obj = {
          "textbox3": "u_data_eee",
          "number3": 33333,
          "date3" : new Date()
        };
        return {"error" : false, data : obj};
    }