IM-FormaDesigner for Accel Platform プログラミングガイド 第14版 2019-04-01

5. 後処理

IM-FormaDesigner for Accel Platform では、アプリケーションデータの登録、更新、削除などデータの操作が行われた後に任意のプログラムを実行することができる機能を提供しています。
アプリケーションの種別を問わずデータの操作が行われたタイミング※で後処理は実行されます。
※ファイルアップロードに関する処理は後処理の実行後に行われます。
IM-Workflow の処理に合わせて後処理を実行したい場合には、 IM-Workflow のユーザプログラム機能をご利用ください。
  • 後処理が呼ばれる流れ

    • アプリケーション種別:標準の場合
    ../../_images/post_processing_flow_std.png
    1. アプリケーションのデータに対する登録、更新、削除のいずれかの処理を実行します。
    2. アプリケーションデータの登録・更新・削除処理が実行されます。
    3. 後処理プログラムの呼び出しが行われ、登録されている後処理プログラムが実行されます。
    4. ファイル関連(ファイルアップロード)の処理が実行されます。
    • アプリケーション種別:IM-Workflowの場合
    ../../_images/post_processing_flow_imw.png
    1. ワークフローの申請・再申請・承認を実行します。
      承認については、「連続処理」も後処理プログラムのトリガ操作に含まれます。
      「一括処理」・「自動処理」による承認では、アプリケーションデータの操作が実施されないため、後処理プログラムは実行されません。
      後続の IM-FormaDesigner による処理は、 IM-Workflow のアクション処理内で実行されます。
    2. アプリケーションデータの登録・更新・削除処理が実行されます。

    3. 後処理プログラムの呼び出しが行われ、登録されている後処理プログラムが実行されます。

    4. ファイル関連(ファイルアップロード)の処理が実行されます。

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) メソッド

    • データの一時保存時

      preserve(PostProcessParameter formaParam, Map<String, Object> sendParam) メソッド

5.1.1.2. パラメータ

各メソッドに渡されるパラメータが保持する情報は以下の通りです。
5.1.1.2.1. jp.co.intra_mart.foundation.forma.userprogram.PostProcessParameter
IM-FormaDesigner の画面の基本情報を保持するクラスです。

メソッドの概要

メソッド 説明
String getLoginUserCd() ログインユーザコードを返却します。
String getApplicationId() アプリケーションIDを返却します。
long getApplicationNo() アプリケーションバージョンNO(アプリケーション履歴番号)を返却します。
String getInsertId() データ登録IDを返却します。
ApplicationType getApplicationType()
アプリケーション種別を返却します。
アプリケーション種別は 以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.ApplicationType
  • APPLICATION_TYPE_STD
    標準
  • APPLICATION_TYPE_IMW
    IM-Workflow
IM-BIS の場合、アプリケーション種別は以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.BisApplicationType
  • BIS_APPLICATION_TYPE_WORKFLOW
    ワークフロー
  • BIS_APPLICATION_TYPE_BUSINESSFLOW
    BISフロー
ApplicationPageType getAppPageType()
アプリケーションページ種別を返却します。
アプリケーションページ種別は 以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.ApplicationPageType
  • REGISTRATION
    登録・申請処理
  • EDIT
    更新・再申請処理
  • POSTSCRIPT
    承認処理
  • REFERENCE
    参照
  • REFERENCE_EDIT
    参照時の更新処理(IM-Workflow 時のみ)
String getProcessKey() プロセスキーを返却します。
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.4.1. jp.co.intra_mart.foundation.forma.exception.FormaUserProcessException
ユーザプログラム実行時例外クラスです。

主なメソッドの概要

メソッド 説明
void setUserMessageId(final String userMessageId) 画面に表示するメッセージIDを指定します。
void setUserMessage(final String userMessage) 画面に表示するメッセージを指定します。userMessageIdが設定されている場合は、userMessageIdが適用されます。
void setOutputLog(final boolean isOutputLog) ログ出力フラグを設定します。省略した場合はtrue(出力する)です。

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
46
47
48
49
50
51
52
53
54
55
56
57
58
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 開発:削除後処理サンプルプログラム****************");
        // ここに削除処理後に実行する処理を記述します。
    }

    /**
     * 一時保存処理を行った場合に実行されます。<BR>
     * 
     * @param formaParam フォルマパラメータ
     * @param sendParam 送信パラメータ
     * @throws Exception 例外が発生
     */
    public void preserve(PostProcessParameter formaParam, Map<String, Object> sendParam) throws Exception {
        System.out.println("************** JAVAEE 開発:一時保存後処理サンプルプログラム****************");
        // ここに一時保存処理後に実行する処理を記述します。
    }
}

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

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

5.1.2.1. 実装規約

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

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

    • データの登録時

      regist(formaParam, sendParam)メソッド

    • データの更新時

      update(formaParam, sendParam) メソッド

    • データの削除時

      remove(formaParam) メソッド

    • データの一時保存時

      preserve(formaParam, sendParam) メソッド

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_IMW
    IM-Workflow
IM-BIS の場合、アプリケーション種別は BisApplication オブジェクトに定義されています。
  • BIS_APPLICATION_TYPE_WORKFLOW
    ワークフロー
  • BIS_APPLICATION_TYPE_BUSINESSFLOW
    BISフロー
appPageType(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
31
32
33
34
35
36
37
38
39
// 登録
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
    };
}

// 一時保存
function preserve(formaParam, sendParam) {
    Debug.print('************** スクリプト開発:一時保存後処理サンプルプログラム ****************');
    // ここに一時保存処理後に実行する処理を記述します。
    return {
        'error' : false
    };
}