IM-FormaDesigner for Accel Platform プログラミングガイド 第16版 2023-10-01

6. 前処理

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

    ../../_images/preprocessing_flow.png
    1. 前処理プログラムの実行により、入力フィールドに表示する値(アイテム”textbox1”への値)が返却されます。

    2. 画面表示のリクエストパラメータにより、アイテム”textbox1”、”textbox2”への値が設定されます。
      フォーム遷移を伴う場合、遷移元ページの入力値がリクエストパラメータにセットされます。
    3. 更新・再申請など、すでにデータベースにデータが登録されている場合、データベースに登録されている値を返却します。

    4. 表示された実行画面では、以下の優先順位に基づいて設定された値を初期表示します。

      • 設定の優先順位

        1. 前処理プログラムによってセットされた値

        2. リクエストパラメータによってセットされた値

        3. データベースに登録されている値

        4. アイテムのプロパティ「フィールド初期値」にセットされている値
          ※「フィールド初期値」は登録(申請)時のみ有効です。

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の基本情報を保持するクラスです。

メソッドの概要

メソッド 説明
String getLoginUserCd() ログインユーザコードを返却します。
String getApplicationId() アプリケーションIDを返却します。
long getApplicationNo() アプリケーションバージョンNO(アプリケーション履歴番号)を返却します。
String getInsertId() データ登録IDを返却します。
ApplicationType getApplicationType()
アプリケーション種別を返却します。
アプリケーション種別は 以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.ApplicationType
  • STD
    標準
  • IMW
    IM-Workflow
IM-BIS の場合、アプリケーション種別は以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.BisApplicationType
  • BIS_WKF
    ワークフロー
  • BIS_BF
    BISフロー
ApplicationPageType getAppPageType()
アプリケーションページ種別を返却します。
アプリケーションページ種別は 以下の列挙型で定義されています。
jp.co.intra_mart.foundation.forma.type.ApplicationPageType
  • REGISTRATION
    登録・申請処理
  • EDIT
    更新・再申請処理
  • POSTSCRIPT
    承認処理
  • REFERENCE
    参照
  • REFERENCE_EDIT
    参照時の更新処理(IM-Workflow 時のみ)
String getProcessKey() プロセスキーを返却します。
String getRecycleId()
リサイクルIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のアプリケーションIDを返却します。
String getRecycleDataId()
リサイクルデータIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のユーザデータIDを返却します。
6.1.1.2.2. jp.co.intra_mart.foundation.forma.userprogram.PreProcessWorkflowParameter
ワークフローに関するパラメータを保持するクラスです。
各画面で取得が可能なIM-Workflow リクエストパラメータの詳細は「 IM-Workflow プログラミングガイド 」-「 リクエストパラメータ 」を参照してください。

メソッドの概要

メソッド 説明
String getImwApplyBaseDate() 申請基準日を返却します。
String getImwArriveType() 到達種別を返却します。
String getImwAuthUserCode() 権限者コードを返却します。
String getImwCallOriginalPagePath() 呼び出し元ページパスを返却します。
String getImwCallOriginalParams() 呼び出し元パラメータを返却します。
String getImwContentsId() コンテンツIDを返却します。
String getImwContentsVersionId() コンテンツバージョンIDを返却します。
String getImwFlowId() フローIDを返却します。
String getImwFlowVersionId() フローバージョンIDを返却します。
String getImwNodeId() ノードIDを返却します。
String getImwPageType() 画面種別を返却します。
String getImwRouteId() ルートIDを返却します。
String getImwRouteVersionId() ルートバージョンIDを返却します。
String getImwSerialProcParams() 連続処理パラメータを返却します。
String getImwSystemMatterId() システム案件IDを返却します。
String getImwUserCode() 処理者コードを返却します。
String getImwUserDataId() ユーザデータIDを返却します。
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 です。
      各列のデータ型は列タイプに依存します。
    • 画面アイテム「ファイルアップロード」のデータ

      キー :imfr_files
      値 :jp.co.intra_mart.foundation.forma.userprogram.preprocess.AttachedFileクラスの配列
  • 画面アイテムのデータ型と値のデータ型

    アイテムのデータ型 値のデータ型
    文字列 java.lang.String
    数値 java.lang.Numberのサブクラス
    日付またはタイムスタンプ java.util.Date
6.1.1.3.1. jp.co.intra_mart.foundation.forma.userprogram.preprocess.AttachedFile
ファイルアップロード情報を保持するクラスです。

メソッドの概要

メソッド 説明
setFile(java.io.InputStream file) ファイルを設定します。nullを指定した場合は、指定したアイテム識別IDの登録済みファイルを全てクリアします。
setFileId(java.lang.String fileId) ユニークなファイルIDを設定します。
setFileName(java.lang.String fileName) ファイル名を設定します。(必須)
setNotes(java.lang.String notes) 備考を設定します。
setUploadItemId(java.lang.String uploadItemId) アイテム識別IDを設定します。(必須)

6.1.1.4. エラー処理

処理中にエラーが発生した場合は、 Exception を throw してください。
処理中にエラーが発生した場合に画面に任意のメッセージを表示したい場合は、FormaUserProcessException を throw してください。
エラーが発生した場合は、処理を中断しエラー画面に遷移します。
6.1.1.4.1. jp.co.intra_mart.foundation.forma.exception.FormaUserProcessException
ユーザプログラム実行時例外クラスです。

主なメソッドの概要

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

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
     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
    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);
            
            // ファイルアップロード情報を設定 
            final AttachedFile[] files = new AttachedFile[2];
            final AttachedFile file1 = new AttachedFile();
            final AttachedFile file2 = new AttachedFile();
            try {
                final InputStream in1 = new FileInputStream(new File("C://sample/sampleFile1.txt"));
    
                // 添付するファイルごとにFormaFileUpload型のモデルを作成します。
                file1.setFile(in1); // 添付ファイルの実体をjava.io.InputStream型で指定します。
                file1.setFileName("sampleFile1.txt"); // 添付ファイルのファイル名を指定します。
                file1.setUploadItemId("attach_fileupload_item1"); // アイテム識別IDを指定します。
                file1.setNotes("サンプルsampleのファイルです。");
                files[0] = file1;
                final InputStream in2 = new FileInputStream(new File("C://sample/sampleFile2.txt"));
    
                file2.setFile(in2);
                file2.setFileName("sampleFile2.txt");
                file2.setUploadItemId("attach_fileupload_item1");
                file2.setNotes("サンプルsample2のファイルです。");
                files[1] = file2;
                // ファイルアップロードアイテムデータをアプリケーションデータのパラメータにセットします。
                updateData.put("imfr_files", files);
    
            } catch (final IOException e) {
                // エラー処理
            }
    
            // エラー発生時に画面に表示するメッセージを指定する場合は、FormaUserProcessException をthrowします。
            if (XXXX) {
                final FormaUserProcessException error = new FormaUserProcessException(new XXXXException());
                error.setUserMessageInfo("画面に表示するメッセージID", "画面に表示する詳細メッセージ");
                throw error;
            }
            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
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    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);
            
            // ファイルアップロード情報を設定 
            final AttachedFile[] files = new AttachedFile[2];
            final AttachedFile file1 = new AttachedFile();
            final AttachedFile file2 = new AttachedFile();
            try {
                final InputStream in1 = new FileInputStream(new File("C://sample/sampleFile1.txt"));
    
                // 添付するファイルごとにFormaFileUpload型のモデルを作成します。
                file1.setFile(in1); // 添付ファイルの実体をjava.io.InputStream型で指定します。
                file1.setFileName("sampleFile1.txt"); // 添付ファイルのファイル名を指定します。
                file1.setUploadItemId("attach_fileupload_item1"); // アイテム識別IDを指定します。
                file1.setNotes("サンプルsampleのファイルです。");
                files[0] = file1;
                final InputStream in2 = new FileInputStream(new File("C://sample/sampleFile2.txt"));
    
                file2.setFile(in2);
                file2.setFileName("sampleFile2.txt");
                file2.setUploadItemId("attach_fileupload_item1");
                file2.setNotes("サンプルsample2のファイルです。");
                files[1] = file2;
                // ファイルアップロードアイテムデータをアプリケーションデータのパラメータにセットします。
                updateData.put("imfr_files", files);
    
            } catch (final IOException e) {
                // エラー処理
            }
    
            // エラー発生時に画面に表示するメッセージを指定する場合は、FormaUserProcessException をthrowします。
            if (XXXX) {
                final FormaUserProcessException error = new FormaUserProcessException(new XXXXException());
                error.setUserMessageInfo("画面に表示するメッセージID", "画面に表示する詳細メッセージ");
                throw error;
            }
    
            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 の画面の基本情報を保持します。

項目 説明
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) プロセスキー
recycleId(String)
リサイクルIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のアプリケーションIDを返却します。
recycleDataId(String)
リサイクルデータIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のユーザデータIDを返却します。
6.1.2.2.2. imwParamオブジェクト
ワークフローに関するパラメータを保持します。
各画面で取得が可能なIM-Workflow リクエストパラメータの詳細は「 IM-Workflow プログラミングガイド 」を参照してください。

プロパティの概要

項目 説明
imwApplyBaseDate(String) 申請基準日
imwArriveType(String) 到達種別
imwAuthUserCode(String) 権限者コード
imwCallOriginalPagePath(String) 呼び出し元ページパス
imwCallOriginalParams(String) 呼び出し元パラメータ
imwContentsId(String) コンテンツID
imwContentsVersionId(String) コンテンツバージョンID
imwFlowId(String) フローID
imwFlowVersionId(String) フローバージョンID
imwNodeId(String) ノードID
imwPageType(String) 画面種別
imwRouteId(String) ルートID
imwRouteVersionId(String) ルートバージョンID
imwSerialProcParams(String) 連続処理パラメータ
imwSystemMatterId(String) システム案件ID
imwUserCode(String) 処理者コード
imwUserDataId(String) ユーザデータID
6.1.2.2.3. uppParamオブジェクト
画面呼び出し時にユーザプログラム用に渡されたリクエスト情報を保持します。
パラメータ名の頭に「upp_」と付いている情報がユーザプログラム用のパラメータと判断され受け渡しパラメータの対象として扱われます。

6.1.2.3. 返却値とエラー処理

処理結果オブジェクト
  ├ data : 更新データオブジェクト
  ├ files : 更新ファイルアップロードデータオブジェクト
  ├ error : エラーフラグ  処理に失敗した場合は true 、成功した場合はfalse
  ├ errorMessage : エラーメッセージ(※設定したメッセージはエラーログに出力されます。)
  ├ userErrorMessageId : 画面に表示するメッセージのID
  ├ userErrorMessage : 画面に表示する詳細メッセージ(※userErrorMessageIdに設定がある場合に適用されます)
  └ outputLog : ログ出力有無フラグ ユーザプログラム実行中にエラーが発生した際のログ出力有無を設定します。 省略した場合はtrue(出力する)です。
  • 返却値

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

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

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

    • 画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブル、「ファイルアップロード」以外の画面アイテム | | プロパティ:フィールド識別ID | 値 :表示する値

    • 画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブルのデータ

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

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

アイテムのデータ型 値のデータ型
文字列 String
数値 Number
日付またはタイムスタンプ Date
  • 更新ファイルアップロードデータオブジェクト

    • ファイルアップロードオブジェクトの配列

      プロパティの概要

      項目 説明
      filePath(String)
      パブリックストレージのファイルパス ファイルパスに空文字を指定した場合は、指定したアイテム識別IDの登録済みファイルを全てクリアします。 実体がないファイルパスを指定した場合は、警告ログを出力して処理をスキップします。
      uploadItemId(String) アイテム識別ID
      notes(String) 備考
    • エラー発生時

      エラー発生時には処理結果オブジェクトのエラーフラグを 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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    // 登録
    function regist(formaParam, uppParam) {
        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()
                 }
               ]
             };
    
        // 添付するファイルごとにオブジェクトを作成します。
        var file1 = {};
        file1.filePath = 'sample/sampleFile1.txt'; // パブリックストレージのファイルパスを指定します。
        file1.uploadItemId = 'attach_fileupload_item1'; // アイテム識別IDを指定します。
        file1.notes = 'サンプルのファイル1です。';
    
        var file2 = {};
        file2.filePath = 'sample/sampleFile2.txt';
        file2.uploadItemId = 'attach_fileupload_item1';
        file2.notes = 'サンプルのファイル2です。';
    
        return {'error' : false, data : obj,  'files' : [file1, file2]};
    }
    
    // 編集
    function edit(formaParam, uppParam) {
        Debug.print('************** スクリプト 開発:アプリケーション種別:編集画面表示時前処理サンプルプログラム ****************');
        Debug.print('---formaParam-----');
        Debug.console(formaParam);
        Debug.print('---uppParam-----');
        Debug.console(uppParam);
    
        var obj = {
          'textbox2': 'u_data_ee',
          'number2': 22222,
          'date2' : new Date()
        };
        return {'error' : false, data : obj};
    }
    
    // 参照
    function refer(formaParam, uppParam) {
        Debug.print('************** スクリプト 開発:アプリケーション種別:参照画面表示時前処理サンプルプログラム ****************');
        Debug.print('---formaParam-----');
        Debug.console(formaParam);
        Debug.print('---uppParam-----');
        Debug.console(uppParam);
    
        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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    // 申請
    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()
        };
    
        // 添付するファイルごとにオブジェクトを作成します。
        var file1 = {};
        file1.filePath = 'sample/sampleFile1.txt'; // パブリックストレージのファイルパスを指定します。
        file1.uploadItemId = 'attach_fileupload_item1'; // アイテム識別IDを指定します。
        file1.notes = 'サンプルのファイル1です。';
    
        var file2 = {};
        file2.filePath = 'sample/sampleFile2.txt';
        file2.uploadItemId = 'attach_fileupload_item1';
        file2.notes = 'サンプルのファイル2です。';
    
        return {'error' : false, data : obj,  'files' : [file1, file2]};
    }
    
    // 再申請
    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};
    }
    

6.1.3. ロジックフロー

ロジックフローにおいて、前処理プログラムを実装する手順を示します。

IM-LogicDesignerの操作方法につきましては「IM-LogicDesigner ユーザ操作ガイド」を参照してください。

6.1.3.1. 入力値

ロジックフローの入力値に渡される入力パラメータ情報です。
executeProcessType <string>
preProcessParameter <object>
 ├─ loginUserCd <string>
 ├─ applicationId <string>
 ├─ applicationNo <long>
 ├─ insertId <string>
 ├─ applicationType <string>
 ├─ appPageType <string>
 ├─ processKey <string>
 ├─ recycleId <string>
 └─ recycleDataId <string>
uppParam <object>
preProcessWorkflowParameter <object>
 ├─ imwApplyBaseDate <string>
 ├─ imwArriveType <string>
 ├─ imwAuthUserCode <string>
 ├─ imwCallOriginalPagePath <string>
 ├─ imwCallOriginalParams <string>
 ├─ imwContentsId <string>
 ├─ imwContentsVersionId <string>
 ├─ imwFlowId <string>
 ├─ imwFlowVersionId <string>
 ├─ imwNodeId <string>
 ├─ imwPageType <string>
 ├─ imwRouteId <string>
 ├─ imwRouteVersionId <string>
 ├─ imwSerialProcParams <string>
 ├─ imwSystemMatterId <string>
 ├─ imwUserCode <string>
 └─ imwUserDataId <string>
imbpmExecutionInfo <object>
 ├─ id <string>
 ├─ processInstanceId <string>
 ├─ businessKey <string>
 ├─ processDefinitionId <string>
 ├─ superExecutionId <string>
 ├─ currentActivityId <string>
 ├─ currentActivityName <string>
 ├─ variablesLocal <object>
 └─ variables <object>
入力値 説明
executeProcessType<string> executeProcessType を参照
preProcessParameter<object> preProcessParameterオブジェクト を参照
uppParam<object> uppParamオブジェクト を参照
preProcessWorkflowParameter<object> preProcessWorkflowParameterオブジェクト を参照
imbpmExecutionInfo<object> imbpmExecutionInfoオブジェクト を参照

コラム

IM-LogicDesignerの「ロジックフロー定義編集」入出力設定では、JSON入力機能により以下のJSON文字列を取り込むことができます。
{
  "executeProcessType": "",
  "preProcessParameter": {
    "loginUserCd": "",
    "applicationId": "",
    "applicationNo": 0,
    "insertId": "",
    "applicationType": "",
    "appPageType": "",
    "processKey": "",
    "recycleId": "",
    "recycleDataId": ""
  },
  "uppParam": {},
  "preProcessWorkflowParameter": {
    "imwApplyBaseDate": "",
    "imwArriveType": "",
    "imwAuthUserCode": "",
    "imwCallOriginalPagePath": "",
    "imwCallOriginalParams": "",
    "imwContentsId": "",
    "imwContentsVersionId": "",
    "imwFlowId": "",
    "imwFlowVersionId": "",
    "imwNodeId": "",
    "imwPageType": "",
    "imwRouteId": "",
    "imwRouteVersionId": "",
    "imwSerialProcParams": "",
    "imwSystemMatterId": "",
    "imwUserCode": "",
    "imwUserDataId": ""
  },
  "imbpmExecutionInfo": {
    "id": "",
    "processInstanceId": "",
    "businessKey": "",
    "processDefinitionId": "",
    "superExecutionId": "",
    "currentActivityId": "",
    "currentActivityName": "",
    "variablesLocal": {},
    "variables": {}
  }
}
6.1.3.1.1. executeProcessType
アプリケーション実行種別を保持します。
画面を表示するタイミングに合わせて以下の値が取得可能です。
  • アプリケーション種別が「標準」の場合
    • regist
      登録画面の表示時
    • edit
      編集画面の表示時
    • refer
      詳細画面の表示時
  • アプリケーション種別が「IM-Workflow」の場合
    • apply
      申請画面の表示時
    • reapply
      再申請画面の表示時
    • approve
      承認画面の表示時
    • reference
      詳細画面の表示時
6.1.3.1.2. preProcessParameterオブジェクト

IM-FormaDesigner の画面の基本情報を保持します。

項目 説明
loginUserCd<string> ログインユーザコード
applicationId<string> アプリケーションID
applicationNo<long> アプリケーションバージョンNO(アプリケーション履歴番号)
insertId<string> データ登録ID
applicationType<string>
アプリケーション種別
  • std
    標準
  • imw
    IM-Workflow
IM-BIS の場合
  • bis_wkf
    ワークフロー
  • bis_bf
    BISフロー
appPageType<string>
アプリケーションページ種別
  • REGISTRATION
    登録・申請処理
  • EDIT
    更新・再申請処理
  • POSTSCRIPT
    承認処理
  • REFERENCE
    参照
  • REFERENCE_EDIT
    参照時の更新処理(IM-Workflow 時のみ)
processKey<string> プロセスキー
recycleId<string>
リサイクルIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のアプリケーションIDを返却します。
recycleDataId<string>
リサイクルデータIDを返却します。(案件の再利用時のみ取得可能)
再利用元案件のユーザデータIDを返却します。
6.1.3.1.3. uppParamオブジェクト
画面呼び出し時にユーザプログラム用に渡されたリクエスト情報を保持します。
パラメータ名の頭に「upp_」と付いている情報がユーザプログラム用のパラメータと判断され受け渡しパラメータの対象として扱われます。
6.1.3.1.4. preProcessWorkflowParameterオブジェクト
ワークフローに関するパラメータを保持します。
アプリケーション種別がIM-Workflow の場合は、各種一覧画面から呼び出された際に受け取ることができるIM-Workflow リクエストパラメータ情報が利用できます。

各画面で取得が可能なIM-Workflow リクエストパラメータの詳細は「 IM-Workflow プログラミングガイド 」-「 リクエストパラメータ 」を参照してください。

プロパティの概要

入力値 説明
imwApplyBaseDate<string> 申請基準日
imwArriveType<string> 到達種別
imwAuthUserCode<string> 権限者コード
imwCallOriginalPagePath<string> 呼び出し元ページパス
imwCallOriginalParams<string> 呼び出し元パラメータ
imwContentsId<string> コンテンツID
imwContentsVersionId<string> コンテンツバージョンID
imwFlowId<string> フローID
imwFlowVersionId<string> フローバージョンID
imwNodeId<string> ノードID
imwPageType<string> 画面種別
imwRouteId<string> ルートID
imwRouteVersionId<string> ルートバージョンID
imwSerialProcParams<string> 連続処理パラメータ
imwSystemMatterId<string> システム案件ID
imwUserCode<string> 処理者コード
imwUserDataId<string> ユーザデータID
6.1.3.1.5. imbpmExecutionInfoオブジェクト
案件の連携元タスクのエグゼキューション情報を保持します。
IM-BPM for Accel Platformの申請タスクまたは起票タスクからIM-Workflowが実行された場合利用できます。

詳細については、「IM-BPM プロセスデザイナ 操作ガイド」 - 「申請タスク」または 「起票タスク」を参照してください。
入力値 説明
id<string> エグゼキューションID
processInstanceId<string> プロセスインスタンスID
businessKey<string> 業務キー
processDefinitionId<string> プロセス定義ID
superExecutionId<string> 親プロセスのエグゼキューションID
currentActivityId<string> タスクのアクティビティID
currentActivityName<string> タスクのアクティビティ名
variablesLocal<object>
変数(スコープがエグゼキューションであるもの)
・ 変数名をキー、変数値を値として持つ object です。
variables<object>
変数(スコープがプロセスインスタンスであるもの)
・ 変数名をキー、変数値を値として持つ object です。

6.1.3.2. 出力値

ロジックフローの出力値に設定する情報です。
data <object>
files <object[]>
 ├─ file <storage>
 ├─ uploadItemId <string>
 └─ notes <string>
error <boolean>
errorMessage <string>
userErrorTitleMessage <string>
localizedUserErrorTitleMessages <object>
 ├─ ja <string>
 ├─ en <string>
 └─ zh_CN <string>
userErrorMessage <string>
localizedUserErrorMessages <object>
 ├─ ja <string>
 ├─ en <string>
 └─ zh_CN <string>
outputLog <boolean>
6.1.3.2.1. 説明

画面アイテムの更新

  • 画面の入力フィールドに表示する初期表示値を任意の値に設定したい場合 data<object> に値を設定します。

  • 画面表示時に同一フィールドに対して、前処理プログラムより与えられた更新データ、リクエストデータ、DBデータがあった場合に表示する値を決定する優先順位は以下の通りです。
    • 前処理プログラムより与えられた更新データ > リクエストデータ > DBデータ
  • 更新対象の画面アイテムは data<object> に以下のように設定します。

  • 画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブル、「ファイルアップロード」以外の画面アイテム

    キー名:フィールド識別ID
    値 :表示する値
  • 画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブルのデータ

    キー名:テーブル識別ID
    値 :1レコード(行)毎に各列のフィールド識別ID と値をマッピングした <object[]> です。
    各列のデータ型は列タイプに依存します。

    例)
    data <object>
     ├─ textbox1 <string>
     ├─ number1 <integer>
     ├─ calendar1 <date>
     └─ tb1 <object[]>
        ├─ [0] // テーブル1行目
        │   ├─ tb1_textbox1 <string>
        │   └─ tb1_number1 <integer>
        ├─ [1] // テーブル2行目
        │   ├─ tb1_textbox1 <string>
        │   └─ tb1_number1 <integer>
        └─ [2] // テーブル3行目
            ├─ tb1_textbox1 <string>
            └─ tb1_number1 <integer>
    
  • 画面アイテムのデータ型と値のデータ型
アイテムのデータ型 値のデータ型
文字列 <string>
数値 <integer><long><double> を含めたキャスト可能な数値型
日付またはタイムスタンプ <date>
  • 更新ファイルアップロードデータオブジェクト配列

    • files<object[]>

      プロパティの概要

      項目 説明
      file<storage>
      ファイルの取得対象となるストレージ。 何も設定しない場合は、設定したアイテム識別IDの登録済みファイルを全てクリアします。 実体がないファイルを設定した場合は、警告ログを出力して処理をスキップします。
      uploadItemId<string> アイテム識別ID
      notes<string> 備考

処理エラー時の動作

  • 処理中にエラーが発生した場合は error<boolean>true を設定してください。

  • エラーフラグが true の場合は、処理を中断しエラー画面に遷移します。
    • 画面に表示するエラーメッセージの設定がなかった場合は、エラー画面にはデフォルトのエラーメッセージが表示されます。
    • 例外ログの出力有無は outputLog<boolean> で設定できます。
6.1.3.2.2. プロパティ
出力値 必須/任意 説明
data<object> 任意 更新データオブジェクト
files<object[]> 任意 更新ファイルアップロードデータオブジェクト配列
- file<storage> 任意
ファイルの取得対象となるストレージを設定します。
何も設定しない場合は、設定したアイテム識別IDの登録済みファイルを全てクリアします。
実体がないファイルを設定した場合は、警告ログを出力して処理をスキップします。
- uploadItemId<string> 任意 アイテム識別ID
- notes<string> 任意 備考
error<boolean> 必須
エラーフラグ
true を設定した場合、当処理をエラー終了します。
処理が正常に終了した場合は false を設定してください。
errorMessage<string> 任意
設定したメッセージを例外ログとして出力します。
userErrorTitleMessage<string> 任意
設定したメッセージをエラー画面の一行目に表示します。
ロケールごとにメッセージを用意する必要がなければこのプロパティを利用してください。
このプロパティを省略した場合、エラー画面にはデフォルトのエラーメッセージが表示されます。
localizedUserErrorTitleMessages<object> 任意
設定したメッセージをロケールに従ってエラー画面の一行目に表示します。
アカウントコンテキストから解決されたロケールに一致するメッセージを使用します。
userErrorTitleMessage が設定されている場合はこのプロパティは使用されません。
- ja<string> 任意 日本語ロケールメッセージ
- en<string> 任意 英語ロケールメッセージ
- zh_CN<string> 任意 中国語ロケールメッセージ
userErrorMessage<string> 任意
設定したメッセージをエラー画面の二行目に表示します。
ロケールごとにメッセージを用意する必要がなければこのプロパティを利用してください。
userErrorTitleMessage が設定されている場合に適用されます。
localizedUserErrorMessages<object> 任意
設定したメッセージをロケールに従ってエラー画面の二行目に表示します。
アカウントコンテキストから解決されたロケールに一致するメッセージを使用します。
userErrorMessage が設定されている場合はこのプロパティは使用されません。
- ja<string> 任意 日本語ロケールメッセージ
- en<string> 任意 英語ロケールメッセージ
- zh_CN<string> 任意 中国語ロケールメッセージ
outputLog<boolean> 任意
ログ出力有無フラグ
ユーザプログラム実行中にエラーが発生した際のログ出力有無を設定します。
このプロパティを省略した場合はログが出力されます。

コラム

IM-LogicDesignerの「ロジックフロー定義編集」入出力設定では、JSON入力機能により以下のJSON文字列を取り込むことができます。
この時、「null値の型」として storage を設定してください。
{
  "data": {},
  "files": [
    {
      "file": null,
      "uploadItemId": "",
      "notes": ""
    }
  ],
  "error": false,
  "errorMessage": "",
  "userErrorTitleMessage": "",
  "localizedUserErrorTitleMessages": {
    "ja": "",
    "en": "",
    "zh_CN": ""
  },
  "userErrorMessage": "",
  "localizedUserErrorMessages": {
    "ja": "",
    "en": "",
    "zh_CN": ""
  },
  "outputLog": true
}