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

4. 入力チェックプログラム

IM-FormaDesigner では、一時保存や申請時にアプリケーションに入力された内容のチェックを任意のプログラムで実行できる機能を提供しています。
本項の内容に基づいて実装したユーザプログラムを IM-FormaDesigner のアプリケーションに設定する方法については、以下のドキュメントを参照してください。

4.1. 入力チェックのパターン

入力チェックプログラムでは、以下の3つのパターンの実装が可能です。

4.1.1. 入力チェックの内容をアプリケーション固有のルールに基づいて動的に変更する。

この場合は、フォーム作成時に「フォームデザイナ」画面のプロパティで画面アイテムに設定した入力チェックの値を変更するための処理を実装します。
入力チェック処理自体は各画面アイテムのものを利用するのでチェック処理を実装する必要はありません。

例)
  • ある画面アイテムの入力値によって、他の画面アイテムが必須であるかどうかを決定したい。
  • ログインユーザの役職によってあるフィールドの上限値を動的に変更したい。
  • 画面アイテムに設定した入力チェックを行うタイミングを制御したい。

4.1.2. アプリケーション固有の入力チェックをする。

この場合は、入力チェック処理を独自に実装する必要があります。

例)
  • 入力値に対してフィールド固有のフォーマットチェックをしたい。
  • 画面アイテム間で入力値の相関チェックをする
  • 入力値に対してマスタの存在チェックをしたい。

4.1.3. エラーメッセージ表示順を指定する。

この場合は、画面に表示されるエラーメッセージの表示順序を独自に指定する必要があります。

4.2. 入力チェックプログラムの実装

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

スクリプト開発モデルにおいて、入力チェックプログラムを実装する手順を示します。

4.2.1.1. 実装規約

プログラムを実装する場合、下記の制約に従って実装する必要があります。

  • 以下のメソッドのすべてを実装すること
    • getCustomProperties(formaParam, sendParam) メソッド
    • validate(formaParam, sendParam, resultObj)メソッド
    • getErrorDisplayOrder(formaParam) メソッド

4.2.1.2. 共通パラメータ

入力チェックのメソッドに渡される共通のパラメータ情報です。
4.2.1.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 時のみ)
temporaryFlag(String)
一時保存フラグ
申請・再申請・承認のいずれの場合も、一時保存が行われた際にはフラグを”1”に更新します。
  • 一時保存時:1
  • 登録時:0
processKey(String) プロセスキー

コラム

一時保存時の入力チェックプログラムの実行

画面アイテム「ボタン(一時保存)」のプロパティで「入力チェック」を「しない」としている場合もユーザプログラムの入力チェックプログラムは実行されます。
一時保存時に入力チェックプログラムを実行させないようにするには、上記のformaParamオブジェクトの「temporaryFlag」を条件とした分岐を実装してください。
4.2.1.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 と値をマッピングしたオブジェクトの配列です。
    各列のデータ型は列タイプに依存します。
  • 画面アイテム表示タイプを考慮した入力チェックプログラムプログラム内でのデータ利用方法

    画面アイテム表示タイプが「入力可」は送信パラメータに含まれている為、上記をご利用ください。
    画面アイテム表示タイプが「参照」であるアイテムの値を利用する場合は「 IM-FormaDesigner プログラミングガイド 」-「 データの取得メソッド」を参照してください。
    ※表示タイプ「参照」は以下の問題がある為、送信パラメータに含まれません。
    ・ 実際に画面入力した値とDB登録済みの値が判断できません。
    ・ 参照の値は入力チェックを通さない為、改ざんされる可能性があります。

コラム

表示中画面以外の入力アイテム情報の取得について

複数のフォームを使用した画面を実行中、表示中画面以外のフォーム入力アイテム情報は、sendParamオブジェクトの「imfr_other_form_param」から取得可能です。
このプロパティは、表示された画面の入力アイテム情報を保持する為、一度も表示されていない画面の入力アイテム情報は取得できません。
4.2.1.2.3. PC表示/スマートフォン表示で処理を分岐する
画面表示方法ごとに入力チェックプログラムのロジックを変更したい場合は、実行中の画面表示タイプを取得し、処理を分岐します。
  • 実行中の画面表示タイプは、sendParamオブジェクトのプロパティ imfr_display_client_typeから取得可能です。

    • PC表示
      • imfr_display_client_typeの値がpcです。
    • スマートフォン表示
      • imfr_display_client_typeの値がspです。
4.2.1.2.4. 画面操作で処理を分岐する
画面操作方法ごとに入力チェックプログラムのロジックを変更したい場合は、画面操作時の遷移モードを取得し、処理を分岐します。
  • 画面操作時の遷移モードは、sendParamオブジェクトのプロパティ imfr_transition_modeから取得可能です。

    • フォーム遷移方法「タブ切替」

      画面操作 取得値
      ボタン(次へ) tab_contents
      ボタン(戻る) tab_contents
      タブ選択 tab_contents
      ボタン(一時保存) ×
      ボタン(登録) ×
      ボタン(BISフロー登録) ×
    • フォーム遷移方法「画面遷移」

      画面操作 取得値
      ボタン(次へ) next
      ボタン(戻る) ×(※)
      ボタン(一時保存) ×
      ボタン(登録) ×
      ボタン(BISフロー登録) ×
      ※ フォーム遷移方法「画面遷移」の場合、アイテム「ボタン(戻る)」操作時は、入力チェックプログラムは実行されません。

4.2.1.3. 入力チェックプロパティを設定する

  • getCustomProperties(formaParam, sendParam)メソッド

    このメソッドでは、入力チェックで利用される画面アイテムの入力チェックプロパティの値をアプリケーション固有のルールに基づいて設定し、呼び出し元に返却します。

4.2.1.3.1. パラメータ
formaParam、sendParam についての詳細は共通パラメータを参照してください。
4.2.1.3.2. 返却値
エラーフラグ error にはエラーの有無を設定し、data にはカスタムプロパティオブジェクトを設定して返却します。
カスタムプロパティの指定がない場合は data に空のオブジェクトを設定してください。
  • 返却オブジェクト

    プロパティ詳細
    error
    (Boolean)
    エラーフラグ
    処理中にエラーが発生した場合はtrue、ない場合はfalseを設定します。
    errorMessage
    (String)
    エラーメッセージ
    data
    (Object)
    カスタムプロパティオブジェクト
    フィールド識別IDをキーに入力チェックプロパティオブジェクトを設定します。
     
    %フィールド識別ID1%
    (String)
    入力プロパティオブジェクト
    (Object)
     
    %プロパティ1%
    %プロパティ2%
    ・・・・・・・・・・・・・・・・・・
    %プロパティn%
    %フィールド識別ID2%
    入力プロパティオブジェクト
    %フィールド識別ID3%
    入力プロパティオブジェクト
    ※ 画面アイテム「ファイルアップロード」はフィールド識別ID を持たないため、ImFormaUtil オブジェクトの getFileUploadId メソッドにより取得される ID をセットします。
    ImFormaUtilオブジェクトについての詳細は後述の共通処理 ImFormaUtilオブジェクトを参照してください。
4.2.1.3.3. 入力チェックプロパティ一覧

FRItems オブジェクトでは入力チェックプロパティを定義しています。

プロパティ チェック内容 設定値
FRItems.PROP_REQUIRED 必須 Boolean
FRItems.PROP_ONLY_ASCII 英数字のみ Boolean
FRItems.PROP_MAX_LENGTH 最大入力値 Number
FRItems.PROP_MIN_LENGTH 最小入力値 Number
FRItems.PROP_PERMIT_MINUS 負数入力許可 Boolean
FRItems.PROP_PERMIT_DECIMAL 小数入力許可 Boolean
FRItems.PROP_DECIMAL_SIZE 小数部最大入力桁数 Number
FRItems.PROP_MIN_FILE_AMOUNT 最小ファイル数 Number
FRItems.PROP_MAX_FILE_AMOUNT 最大入力ファイル数 Number
4.2.1.3.4. 実装例
 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 getCustomProperties(formaParam, sendParam) {
    Debug.print('************** 入力チェックサンプルプログラム:カスタムプロパティを設定 ****************');

    // フィールド(telnumber, age, startdate, userselect)に対して入力チェックプロパティを設定する。
    var customPropObj = {
        telnumber: {},
        age: {},
        startdate: {},
        userselect: {}
    };

    // 'telnumber' 英数字のみをfalse
    customPropObj['telnumber'][FRItems.PROP_ONLY_ASCII] = false;

    // 'age' 最大入力値を40 に設定
    customPropObj['age'][FRItems.PROP_MAX_LENGTH] = 40;

    // 'startdate' 必須をfalse
    customPropObj['startdate'][FRItems.PROP_REQUIRED] = false;

    // ' userselect' 必須をfalse
    customPropObj['userselect'][FRItems.PROP_REQUIRED] = false;

    // ファイルアップロードアイテムの入力チェックプロパティを設定する
    var fileId = ImFormaUtil.getFileUploadId(0);
    customPropObj[fileId] = {};
    // ファイルアップロード 最小入力ファイル数を0
    customPropObj[fileId][FRItems.PROP_MIN_FILE_AMOUNT] = 0;

    return {
        error: false,
        data: customPropObj
    };

    // カスタムプロパティの指定がない場合
    // return { error : false , data : {} };
    // 処理中にエラーが発生した場合
    // return { error : true ,errorMessage : xxxxx };
}

コラム

入力チェックプロパティは、画面アイテムプロパティで設定した入力チェックの内容を変更する場合に利用します。
画面アイテムプロパティで入力チェックが設定できないアイテムには利用できません。

4.2.1.4. アプリケーション固有の入力チェックをする

  • validate(formaParam, sendParam, resultObj)メソッド

    このメソッドでは、アプリケーション独自の入力チェック処理を記述して、入力チェック処理結果を呼び出し元に返却します。

4.2.1.4.1. パラメータ
  • formaParam、sendParam についての詳細は共通パラメータを参照してください。

  • resultObj・・・返却オブジェクト

    入力チェックエラー情報を設定して返却するためのオブジェクトです。

    プロパティ詳細
    error
    (Boolean)
    エラーフラグ
    入力チェックエラーがある場合はtrue、ない場合はfalseを設定します。
    systemError
    (Boolean)
    システムエラーフラグ
    システムエラー(入力チェック以外のエラー)が発生した場合はtrue、ない場合はfalseを設定します。
    errorMessageList
    (Array)

    エラーメッセージ情報配列

    • エラーメッセージ情報配列オブジェクト(Object)
      checkid 入力チェックID
    errorMessage エラーメッセージ
    errorInfoList
    (Array)
    エラー情報配列
    • エラー情報オブジェクト(Object)
      checkid 入力チェックID
    itemType アイテムタイプ
    acceptErrorObj エラー通知オブジェクト
4.2.1.4.2. 返却値
  • 入力チェックエラーがなかった場合

    引数で渡された返却オブジェクト resultObj をそのまま返却します。

  • 入力チェックエラーがあった場合

    ImFormaUtilオブジェクトを利用して返却オブジェクトresultObj にエラー情報を設定します。
    ユーザ画面へのエラー情報の通知方法は以下の二つの方法があります。
    • エラーメッセージのみを画面上部に表示する。

    • エラーがあった画面アイテムに対しエラー通知表示をする。

      (画面アイテムを赤枠で囲みエラー通知アイコンを表示など、エラー通知表示内容は画面アイテムに依存します)

    エラー通知の方法に合わせて ImFormaUtilオブジェクトの該当メソッドを使ってエラー情報を設定してください。
    ImFormaUtilオブジェクトについての詳細は後述の共通処理 ImFormaUtilオブジェクトを参照してください。
4.2.1.4.3. 実装例
 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
function validate(formaParam, sendParam, resultObj) {
    Debug.print('************** 入力チェックサンプルプログラム:ユーザバリデーション実行 ****************');

    var errorMessage = '';
    // 入力チェック(1) フィールド識別ID「sample_field_1」に対するチェック
    if (checkOneValue(sendParam['sample_field_1'])) {
        errorMessage = 'フィールド1の値が不正です。';
        // 返却オブジェクトにエラー情報を設定
        ImFormaUtil.addValidationError(resultObj, errorMessage, 'check1', ['sample_field_1']);
    }

    // 入力チェック(2) フィールド識別ID「sample_field_2」、「sample_field_3」の相関チェック
    if (checkTwoValues(sendParam['sample_field_2']), (sendParam['sample_field_3'])) {
        errorMessage = 'フィールド2の値が○○○の場合はフィールド3はXXXでなくてはいけません。';
        ImFormaUtil.addValidationError(resultObj, errorMessage, 'check2', ['sample_field_2', 'sample_field_3']);
    }

    // 明細テーブル(テーブル識別ID tb1)内のフィールドに対するチェック
    var tableId = 'tb1';
    // 明細テーブルデータの取得
    var tableData = sendParam[tableId];
    // 入力行数分チェック
    for (var i = 0, length = tableData.length; i < length; i++) {
        // 列数分チェック
        var inputId;
        for (inputId in tableData[i]) {
            var checkValue = tableData[i][inputId];
            if (checkValue == '') continue;
            // 入力チェック(3) 列1のフィールドに対するチェック
            if (inputId == 'tb1_textbox1') {
                if (checkCol1(checkValue)) {
                    errorMessage = 'XXXXXXX';
                    ImFormaUtil.addValidationError(resultObj, errorMessage, 'check3', [inputId], i);
                }
                // 入力チェック(4) 列2 のフィールドに対するチェック
            } else if (inputId == 'tb1_textbox2') {
                if (checkCol2(checkValue)) {
                    errorMessage = 'XXXXXXX';
                    ImFormaUtil.addValidationError(resultObj, errorMessage, 'check4', [inputId], i);
                }
            }
        }
    }
    // 返却オブジェクトを返却
    return resultObj;
}

function checkOneValue(inputValue) {
    // 「sample_field_1」に対する入力チェック処理を実装する。
}

function checkTwoValues(inputValue1, inputValue2) {
    // 「sample_field_2」「sample_field_3」に対する入力チェック処理を実装する。
}

function checkCol1(inputValue) {
    // 明細テーブル内フィールド「tb1_textbox1」に対する入力チェック処理を実装する。
}

function checkCol2(inputValue) {
    // 明細テーブル内フィールド「tb1_textbox2」に対する入力チェック処理を実装する。
}
上記の実装例では、4つの入力チェックを行っています。

【主な処理内容】
  1. 送信パラメータ sendParam から入力値を受け取って順に妥当性を検証
  2. 各入力チェックでは、validate メソッド内で一意になる固定の入力チェックID (上記の例では check1~check4 )を付与
  3. 入力チェックエラー時は返却オブジェクトに付与した入力チェックID を含むエラー情報を設定

コラム

入力チェックIDは、入力チェックエラー情報設定メソッドの利用毎に、一意である必要があります。
入力チェックIDが重複していた場合、エラーメッセージが表示されない場合があります。
4.2.1.4.4. システムエラー時の動作仕様
処理中に入力チェック以外のエラーが発生した場合は、返却オブジェクトのシステムエラーフラグ systemError を true に設定してください。
システムエラーフラグがtrue の場合または処理中に予期しないエラーが発生した場合は、画面にはシステムエラーが発生した旨のメッセージのみが表示され入力チェックに関するエラーの通知は行われません。
その際 forma ログにはエラーに関する情報が出力されます。

4.2.1.5. エラーメッセージ表示順を指定する

  • getErrorDisplayOrder(formaParam)メソッド

    このメソッドでは、入力チェックエラーがあった場合にエラーメッセージを表示する順番を画面アイテム単位で指定して呼び出し元に返却します。

    表示順を指定しない場合のエラーメッセージの表示順は以下の通りです。
    1. 画面アイテムの重なり順(「フォーム・デザイナ」画面のラベル一覧で表示される順番)
    2. ユーザバリデーションのvalidate メソッドでエラー情報を登録した順
    なお、このメソッドにより複数入力フィールドを持つ画面アイテムの入力フィールドに対する画面アイテム内でのエラーメッセージの順序は、画面アイテムの入力チェックエラー処理に依存するため変更することはできません。

    例)
    画面アイテム「期間」が[開始日フィールド]→[終了日フィールド]の順にエラーを出力している場合、[終了日フィールド]→[開始日フィールド]の順に変更できません。
4.2.1.5.1. パラメータ
formaParam についての詳細は共通パラメータを参照してください。
4.2.1.5.2. 返却値

入力チェックエラーがあった場合にエラーメッセージを表示する順番で下記の ID をセットします。

  • 標準で提供する入力チェックによるメッセージ

    アイテムID をセットします。
    アイテムID はImFormaUtil オブジェクトのgetItemIdById メソッド( IM-FormaDesigner for Accel Platform 2013 Summer (8.0.4)以前)、getItemIdById4Proc メソッド( IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5)以降)にフィールド識別ID を渡すことで取得可能です。
    複数の入力フィールドを持つ画面アイテムの場合は、当該メソッドに任意の一つのフィールド識別ID を設定してください。
    画面アイテム「ファイルアップロード」はフィールド識別ID を持ちませんので、フィールド識別ID の代わりに ImFormaUtil オブジェクトの getFileUploadId 関数により取得されるID をセットします。
  • ユーザプログラムの validate メソッドで行われる入力チェックによるメッセージ

    入力チェックプログラムの validate メソッド内で付与した入力チェックID をセットします。
    表示順の指定がない場合は空の配列を返却してください。
4.2.1.5.3. 実装例
 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
function getErrorDisplayOrder(formaParam) {
    Debug.print('************** 入力チェックサンプルプログラム:エラーメッセージ表示順を指定 ****************');
    var arry = [];

    //標準で提供する入力チェックによるメッセージ
    //フィールド識別ID「sample_field_1」
    // 【◎】IM-FormaDesigner for Accel Platform 2013 Summer (8.0.4)以前
    // arry.push(ImFormaUtil.getItemIdById('sample_field_1'));
    // arry.push(ImFormaUtil.getItemIdById('sample_field_3'));

    // 【◎】IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5)以降 getItemIdByIdは非推奨です。
    arry.push(ImFormaUtil.getItemIdById4Proc('sample_field_1', formaParam.processKey));
    arry.push(ImFormaUtil.getItemIdById4Proc('sample_field_3', formaParam.processKey));

    //標準で提供する入力チェックによるメッセージ(ファイルアップロードアイテムの場合)
    arry.push(ImFormaUtil.getItemIdById(ImFormaUtil.getFileUploadId(0)));

    // validate メソッドで行われる入力チェックによるメッセージ
    //入力チェックID「check1」
    arry.push('check1');

    arry.push(xxxxxxxxxxxxxxxxxx);
    arry.push(xxxxxxxxxxxxxxxxxx);
    arry.push(xxxxxxxxxxxxxxxxxx);
    .....................................................

    return arry;
}

4.2.1.6. 共通処理 ImFormaUtilオブジェクト

ImFormaUtil オブジェクトは、入力チェックプログラム内で使用するためのメソッドを提供する JavaScriptAPI です。
このオブジェクトが提供するメソッドは入力チェックプログラム内でしか使用できません。
4.2.1.6.1. 入力チェックエラー情報設定メソッド
  • void addValidationError(resultObj, errorMessage, checkid, inputIds, index)

    引数で受け取った情報を元に、返却オブジェクトにエラー情報を設定します。
    エラーがあった画面アイテムに対しエラーメッセージの表示とエラー通知表示(画面アイテムを赤枠で囲みエラー通知アイコンを表示など、エラー通知表示内容は画面アイテムに依存)を行う場合にこのメソッドを利用します。
    但し、エラー通知表示の実装(input.html の AcceptError/ClearError メソッド)は画面アイテム毎にそれぞれで実装されているため、この関数を利用してエラー通知表示を行う対象になるのは基本的に標準で提供している画面アイテムです。
    独自に作成した画面アイテムに対し、エラー通知表示を行いたい場合は、後述の追加した画面アイテムにエラー通知表示を行う方法を参照してください。
    パラメータ  
    resultObj
    (Object)
    返却オブジェクト
    validateメソッドの引数で受け取った返却オブジェクトを設定します。
    errorMessage
    (String)
    エラーメッセージ
    checkid
    (String)
    入力チェックID
    inputIds
    (Array)
    エラー対象のフィールド識別IDの配列
    index
    (Number)
    エラー対象がテーブルの場合、エラーになった行のインデックスを設定します。
    テーブル以外の場合はこのパラメータは必要ありません。
    返却値  
    返却値はありません。  

コラム

入力チェックIDは、入力チェックエラー情報設定メソッドの利用毎に、一意である必要があります。
入力チェックIDが重複していた場合、エラーメッセージが表示されない場合があります。

コラム

このメソッドは IM-FormaDesigner for Accel Platform 2019 Summer (8.0.22)より、画面アイテム「グリッドテーブル」に対応しました。
画面アイテム「明細テーブル」と同様に使うことができます。
4.2.1.6.2. 入力チェックエラーメッセージ設定メソッド
  • void addValidationErrMsg(resultObj, errorMessage, checkid)

    引数で受け取った情報を元に、返却オブジェクトにエラー情報を設定します。
    エラーがあった画面アイテムに対しエラー通知表示を行わずにエラーメッセージのみを画面上部に表示する場合にこの関数を利用します。
    パラメータ  
    resultObj
    (Object)
    返却オブジェクト
    validateメソッドの引数で受け取った返却オブジェクトを設定します。
    errorMessage
    (String)
    エラーメッセージ
    checkid
    (String)
    入力チェックID
    返却値  
    返却値はありません。  
4.2.1.6.3. アイテムID取得メソッド
  • String getItemIdById (inputId)

    引数で受け取ったフィールド識別ID を持つアイテムID またはファイルアップロードID (下記を参照)に該当するアイテムID を返却します。

    パラメータ  
    inputId
    (String)
    inputId にはフィールド識別ID またはファイルアップロードID を指定します。
    返却値  
    アイテムID  

コラム

このメソッドは IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5)以降は非推奨です。
代わりにgetItemIdById4Procメソッドを使用してください。
  • String getItemIdById4Proc (inputId, processKey)

    引数で受け取ったフィールド識別ID を持つアイテムID またはファイルアップロードID (下記を参照)に該当するアイテムID を返却します。
    IM-FormaDesigner for Accel Platform 2013 Winter (8.0.5)以降から利用できます。
    パラメータ  
    inputId
    (String)
    inputId にはフィールド識別ID またはファイルアップロードID を指定します。
    processKey
    (String)
    formaParamオブジェクトのプロセスキー(formaParam.processKey)を指定します。
    返却値  
    アイテムID  
4.2.1.6.4. ファイルアップロードID取得メソッド
  • String getFileUploadId (index)

    画面アイテム「ファイルアップロード」はフィールド識別ID を持たないため、入力チェック処理内で画面アイテムを識別するための ID を生成して返却します。

    パラメータ  
    index
    (Number)
    index にはフォーム内に出現する画面アイテム「ファイルアップロード」の順番を指定します。
    一番目の画面アイテム「ファイルアップロード」の index には「0」を指定します。
    ※「フォーム内に出現する画面アイテム「ファイルアップロード」の順番」とは、画面アイテムの重なり順(「フォーム・デザイナ」画面のラベル一覧の表示順)を意味します。
    返却値  
    ファイルアップロードID  

4.2.1.7. 追加した画面アイテムにエラー通知表示を行う方法

追加した画面アイテムが input.html の AcceptError/ClearError メソッドで独自のエラー通知処理を行っている場合には、addValidationError メソッドを使用して返却オブジェクトにエラー情報を設定できません。

※独自に追加した画面アイテムでも画面アイテム「文字列」など、標準で提供している画面アイテムと同じエラー通知処理を行っている場合は addValidationError メソッドを使用できます。

独自のエラー通知処理を行っている画面アイテムに対し、入力エラーの際にエラー通知表示を行いたい場合は、 addValidationError メソッドの代わりに返却オブジェクトにエラー情報を設定する処理を実装する必要があります。
4.2.1.7.1. エラー情報の設定
返却オブジェクトにはエラーメッセージとエラー情報を追加します。
エラーメッセージの追加は addValidationErrMsg メソッドが利用できます。
  • 返却オブジェクトの構成

    プロパティ詳細
    error
    (Boolean)
    エラーフラグ
    入力チェックエラーがある場合はtrue、ない場合はfalseを設定します。
    systemError
    (Boolean)
    システムエラーフラグ
    システムエラー(入力チェック以外のエラー)が発生した場合はtrue、ない場合はfalseを設定します。
    errorMessageList
    (Array)

    エラーメッセージ情報配列

    • エラーメッセージ情報配列オブジェクト(Object)
      checkid 入力チェックID
    errorMessage エラーメッセージ
    errorInfoList
    (Array)
    エラー情報配列
    • エラー情報オブジェクト(Object)
      checkid 入力チェックID
    itemType アイテムタイプ
    acceptErrorObj エラー通知オブジェクト
  • 実装しなくてはいけない処理

    1. エラーフラグ error が false の場合は、 true に変更

    2. エラーメッセージ情報 errorMessageList にエラーメッセージオブジェクトを追加

    3. エラー情報配列 errorInfoList にエラー情報を追加

      acceptErrorObj には該当アイテムの type.js の validate メソッドでエラーの場合に返却しているオブジェクトと同じ構造のオブジェクトを設定する必要があります。

4.2.1.8. 共通処理 ImBisFormaUtilオブジェクト

ImBisFormaUtil オブジェクトは、 IM-BIS を導入している環境で、入力チェックプログラム内で使用するためのメソッドを提供する JavaScriptAPI です。
このオブジェクトが提供するメソッドは IM-BIS を導入している環境の入力チェックプログラム内でしか使用できません。
4.2.1.8.1. 入力チェックエラー情報設定メソッド
  • void addValidationErrorForGridtable(resultObj, errorMessage, sendParam, checkid, inputIds, index)

    引数で受け取った情報を元に、返却オブジェクトにエラー情報を設定します。
    エラーがあった画面アイテムに対しエラーメッセージの表示とエラー通知表示を行う場合にこのメソッドを利用します。
    このメソッドは画面アイテム「グリッドテーブル」専用の入力チェックエラー表示メソッドです。
    パラメータ  
    resultObj
    (Object)
    返却オブジェクト
    validateメソッドの引数で受け取った返却オブジェクトを設定します。
    errorMessage
    (String)
    エラーメッセージ
    sendParam
    (Object)
    送信パラメータオブジェクト
    validateメソッドの引数で受け取った送信パラメータオブジェクトを設定します。
    checkid
    (String)
    入力チェックID
    inputIds
    (Array)
    エラー対象のフィールド識別IDの配列
    エラー対象として設定可能な列タイプ(文字列/数値/日付/関数/一覧選択/セレクトボックス)のフィールド識別IDを設定します。
    複数設定する場合、同一のグリッドテーブルのフィールド識別IDのみ設定できます。
    index
    (Number)
    エラーになった行のインデックスを設定します。
    返却値  
    返却値はありません。  

コラム

このメソッドは IM-FormaDesigner for Accel Platform 2019 Summer (8.0.22)以降は非推奨です。
代わりに 共通処理 ImFormaUtilオブジェクト のaddValidationErrorメソッドを使用してください。
4.2.1.8.2. 実装例
 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
function validate(formaParam, sendParam, resultObj) {
    Debug.print('************** 入力チェックサンプルプログラム:グリッドテーブル ****************');

    var errorMessage = '';
    // グリッドテーブル(テーブル識別ID gt1)内のフィールドに対するチェック
    var gridtableId = 'gt1';
    // グリッドテーブルデータの取得
    var gridtableData = sendParam[gridtableId];

    // 入力行数分チェック
    for (var i = 0, length = gridtableData.length; i < length; i++) {
        // 列数分チェック
        var inputId;
        for (inputId in gridtableData[i]) {
            var checkValue = gridtableData[i][inputId];
            if (checkValue == '') continue;
            //入力チェック(5) 列1のフィールドに対するチェック
            if (inputId == 'gt1_textbox1') {
                if (checkCol3(checkValue)) {
                    errorMessage = 'XXXXXXX';
                    ImBisFormaUtil.addValidationErrorForGridtable(resultObj, errorMessage, sendParam, 'check5', [inputId], i);
                }
                //入力チェック(6) 列2のフィールドに対するチェック
            } else if (inputId == 'gt1_textbox2') {
                if (checkCol4(checkValue)) {
                    errorMessage = 'XXXXXXX';
                    ImBisFormaUtil.addValidationErrorForGridtable(resultObj, errorMessage, sendParam, 'check6', [inputId], i);
                }
            } else if (.......) {
                .......
            }
        }
    }
    // 返却オブジェクトを返却
    return resultObj;
}

function checkCol3(inputValue) {
    //グリッドテーブル内フィールド「gt1_textbox1」に対する入力チェック処理を実装する。
}

function checkCol4(inputValue) {
    //グリッドテーブル内フィールド「gt1_textbox2」に対する入力チェック処理を実装する。
}

4.2.2. ロジックフロー

ロジックフローにおいて、入力チェックプログラムを実装する手順を示します。

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

4.2.2.1. 入力値

ロジックフローの入力値に渡される入力パラメータ情報です。
formaParam <object>
 ├─ loginUserCd <string>
 ├─ applicationId <string>
 ├─ applicationNo <long>
 ├─ insertId <string>
 ├─ applicationType <string>
 ├─ appPageType <string>
 ├─ temporaryFlag <string>
 └─ processKey <string>
sendParam <object>
workflowParameter <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>
入力値 説明
formaParam<object> formaParamオブジェクト を参照
sendParam<object> sendParamオブジェクト を参照
workflowParameter<object> workflowParameterオブジェクト を参照
imbpmExecutionInfo<object> imbpmExecutionInfoオブジェクト を参照

コラム

IM-LogicDesignerの「ロジックフロー定義編集」入出力設定では、JSON入力機能により以下のJSON文字列を取り込むことができます。
{
  "formaParam": {
    "loginUserCd": "",
    "applicationId": "",
    "applicationNo": 0,
    "insertId": "",
    "applicationType": "",
    "appPageType": "",
    "temporaryFlag": "",
    "processKey": ""
  },
  "sendParam": {},
  "workflowParameter": {
    "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": {}
  }
}
4.2.2.1.1. formaParamオブジェクト

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 時のみ)
temporaryFlag<string>
一時保存フラグ
申請・再申請・承認のいずれの場合も、一時保存が行われた際にはフラグを”1”に更新します。
  • 一時保存時:1
  • 登録時:0
processKey<string> プロセスキー

コラム

一時保存時の入力チェックプログラムの実行

画面アイテム「ボタン(一時保存)」のプロパティで「入力チェック」を「しない」としている場合もユーザプログラムの入力チェックプログラムは実行されます。
一時保存時に入力チェックプログラムを実行させないようにするには、上記のformaParamオブジェクトの「temporaryFlag」を条件とした分岐を実装してください。
4.2.2.1.2. sendParamオブジェクト
画面から渡されたリクエスト情報を保持する送信パラメータオブジェクトです。
画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブルを除く入力アイテムのパラメータ名はフィールド識別ID です。
画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブルのパラメータ名はテーブル識別ID です。

画面アイテム「ファイルアップロード」のアップロードファイル情報は含まれません。
また画面アイテム「採番」で採番方法を登録処理毎に設定した場合、採番処理は入力チェック後に行われるため送信パラメータに採番番号は含まれません。
  • 入力アイテムのデータ型と取得値の対比

    入力アイテムのデータ型により取得値は以下のように設定されています。

    アイテムのデータ型 取得値 該当する主なアイテム
    文字列 <string>
    • 文字列
    • 複数行文字列
    • (関数※1)
    • (一覧選択※1)
    • チェックボックス ※2
    • ラジオボタン
    • セレクトボックス
    • リストボックス ※2
    数値 数値の <string>
    • 数値
    • (関数※1)
    • (一覧選択※1)
    日付またはタイムスタンプ システムタイムゾーンにおける1970年1月1日0時0分0秒0ミリ秒からの通算ミリ秒の数値の <string>
    • 日付
    • 期間
    • (関数※1)
    • (一覧選択※1)
    ※1: 画面アイテム「関数」、「一覧選択」は取得値の設定により画面アイテムのデータ型が決定します。
    ※2: 複数項目選択可能な画面アイテム(チェックボックス、リストボックス)は選択された値をカンマ区切りにして値が設定されます。
  • 画面アイテム「明細テーブル」、「グリッドテーブル」、「スプレッドシート」のテーブルの取得値

    値は1レコード(行)毎に各列のフィールド識別ID と値をマッピングした <object[]> です。
    各列のデータ型は列タイプに依存します。
  • 画面アイテム表示タイプを考慮した入力チェックプログラムプログラム内でのデータ利用方法

    画面アイテム表示タイプが「入力可」は送信パラメータに含まれている為、上記をご利用ください。
    ※表示タイプ「参照」は以下の問題がある為、送信パラメータに含まれません。
    ・ 実際に画面入力した値とDB登録済みの値が判断できません。
    ・ 参照の値は入力チェックを通さない為、改ざんされる可能性があります。

コラム

表示中画面以外の入力アイテム情報の取得について

複数のフォームを使用した画面を実行中、表示中画面以外のフォーム入力アイテム情報は、sendParamオブジェクトの「imfr_other_form_param」から取得可能です。
このプロパティは、表示された画面の入力アイテム情報を保持する為、一度も表示されていない画面の入力アイテム情報は取得できません。

PC表示/スマートフォン表示で処理を分岐する

画面表示方法ごとに入力チェックプログラムのロジックを変更したい場合は、実行中の画面表示タイプを取得し、処理を分岐します。
  • 実行中の画面表示タイプは、sendParamオブジェクトのプロパティ imfr_display_client_typeから取得可能です。

    • PC表示
      • imfr_display_client_typeの値がpcです。
    • スマートフォン表示
      • imfr_display_client_typeの値がspです。

画面操作で処理を分岐する

画面操作方法ごとに入力チェックプログラムのロジックを変更したい場合は、画面操作時の遷移モードを取得し、処理を分岐します。
  • 画面操作時の遷移モードは、sendParamオブジェクトのプロパティ imfr_transition_modeから取得可能です。

    • フォーム遷移方法「タブ切替」

      画面操作 取得値
      ボタン(次へ) tab_contents
      ボタン(戻る) tab_contents
      タブ選択 tab_contents
      ボタン(一時保存) ×
      ボタン(登録) ×
      ボタン(BISフロー登録) ×
    • フォーム遷移方法「画面遷移」

      画面操作 取得値
      ボタン(次へ) next
      ボタン(戻る) ×(※)
      ボタン(一時保存) ×
      ボタン(登録) ×
      ボタン(BISフロー登録) ×
      ※ フォーム遷移方法「画面遷移」の場合、アイテム「ボタン(戻る)」操作時は、入力チェックプログラムは実行されません。
4.2.2.1.3. workflowParameterオブジェクト
ワークフローに関するパラメータを保持します。
アプリケーション種別が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
4.2.2.1.4. 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 です。

4.2.2.2. 出力値

ロジックフローの出力値に設定する情報です。
error <boolean>
errorMessage <string>
errorItems <object[]>
 ├─ inputId <string[]>
 ├─ errorMessage <string>
 ├─ localizedErrorMessages <object>
 │   ├─ ja <string>
 │   ├─ en <string>
 │   └─ zh_CN <string>
 └─ index <integer>
4.2.2.2.1. 説明

画面アイテムの入力チェック

  • 入力チェックエラーがなかった場合

    errorItems<object[]> に何も設定しません。

  • 入力チェックエラーがあった場合

    errorItems<object[]> にエラー情報を設定します。
    ユーザ画面へのエラー情報の通知方法は以下の二つの方法があります。
    • エラーメッセージのみを画面上部に表示する。
      (画面に表示される入力チェックエラーメッセージの順番は配列の先頭より昇順です)
    • エラーがあった画面アイテムに対しエラー通知表示をする。
      (画面アイテムを赤枠で囲みエラー通知アイコンを表示など、エラー通知表示内容は画面アイテムに依存します)

処理エラー時の動作

  • 処理中に入力チェック以外のエラーが発生した場合は、出力値のエラーフラグ error<boolean>true を設定してください。
  • エラーフラグが true の場合は、画面にはシステムエラーが発生した旨のメッセージのみが表示され入力チェックに関するエラーの通知は行われません。その際、例外ログが出力されます。
4.2.2.2.2. プロパティ
出力値 必須/任意 説明
error<boolean> 必須
エラーフラグ
true を設定した場合、当処理をエラー終了します。
処理が正常に終了した場合は false を設定してください。
errorMessage<string> 任意
設定したメッセージを例外ログとして出力します。
errorItems<object[]> 任意
入力チェックエラーアイテム情報です。
入力チェックを行う場合は必ずこのパラメータを定義してください。
画面に表示される入力チェックエラーメッセージの順番は配列の先頭より昇順です。
- inputId<string[]> 任意
エラーになったアイテムの識別ID配列です。
フォームにあるアイテムのフィールド識別IDを設定します。
画面アイテム「ファイルアップロード」はアイテム識別IDを設定します。
一つのエラーメッセージに対し、複数のフィールドが紐づく場合は、配列に識別IDを全て設定します。
入力チェックエラーメッセージのみを表示させたい場合はこのプロパティを省略します。
- errorMessage<string> 任意
入力チェックエラーメッセージです。
設定したメッセージを画面に表示します。
ロケールごとにメッセージを用意する必要がなければこのプロパティを利用してください。
- localizedMessages<object> 任意
ロケール別入力チェックエラーメッセージです。
設定したメッセージをロケールに従って画面に表示します。
アカウントコンテキストから解決されたロケールに一致するメッセージを使用します。
入力チェックエラーアイテム情報の errorMessage が設定されている場合はこのプロパティは使用されません。
ja<string> 任意 日本語ロケールメッセージ
en<string> 任意 英語ロケールメッセージ
zh_CN<string> 任意 中国語ロケールメッセージ
- index <integer> 任意
エラー行番号です。
入力チェック対象にテーブルが含まれる場合に定義します。

コラム

IM-LogicDesignerの「ロジックフロー定義編集」入出力設定では、JSON入力機能により以下のJSON文字列を取り込むことができます。
{
  "error": false,
  "errorMessage": "",
  "errorItems": [
    {
      "inputId": [
        ""
      ],
      "errorMessage": "",
      "localizedErrorMessages": {
        "ja": "",
        "en": "",
        "zh_CN": ""
      },
      "index": 0
    }
  ]
}