JavaScript API を利用して、複数のパーツの入力値で独自に必須チェックを行うサンプルを紹介します。
ここでは、明細に配置した商品名、数量、単価が、全て入力済か未入力となっていない場合にメッセージを表示します。
サンプルについて
本サンプルのソースコードについてや、カスタマイズ方法等の技術的なお問合せは承っておりません。
利用するイベント
サンプルフォーム
パーツID | パーツタイプ | 補足 |
---|---|---|
- | テーブルパーツ | 行数は任意 |
fidProductName | テキスト(一行)パーツ | 商品名(テーブルの1列目) |
fidQuantity | テキスト(一行)パーツ - 数値 | 数量(テーブルの2列目) |
fidUnitPrice | テキスト(一行)パーツ - 金額 | 単価(テーブルの3列目) |
fidPrice | テキスト(一行)パーツ - 金額 | 金額(テーブルの4列目) ※1 独自に計算して設定する ※2 経路で編集不可に設定 |
カスタマイズコード
(function() {
'use strict';
/**
* 内容確認イベント
*/
collaboflow.events.on('request.input.check', function(e) {
// 明細行の値を取得
const rows = e.parts['tbl_1'].value;
// エラーメッセージ用
const errorMessages = [];
// 1行ずつ商品名、数量、単価の入力をチェックする
for (let rowIndex = 0, rowLength = rows.length; rowIndex < rowLength; rowIndex++) {
let row = rows[rowIndex];
// 行毎のパーツ値
let productName = row['fidProductName'].value.trim(); // 商品名
let quantity = row['fidQuantity'].value; // 数量
let unitPrice = row['fidUnitPrice'].value; // 単価
// 全て空の場合、金額をクリアして次行へ
if (productName === '' && quantity === '' && unitPrice === '') {
row['fidPrice'].value = '';
continue;
}
// 単価・数量が入力されている場合、金額設定
if (quantity !== '' && unitPrice !== '') {
row['fidPrice'].value = quantity * unitPrice;
}
if (productName === '') {
errorMessages.push(rowIndex + 1 + '行目の商品名が未入力です。');
}
if (quantity === '') {
errorMessages.push(rowIndex + 1 + '行目の数量が未入力です。');
}
if (unitPrice === '') {
errorMessages.push(rowIndex + 1 + '行目の単価が未入力です。');
}
}
// エラーメッセージがなければOK!
if (errorMessages.length === 0) {
return true;
}
// エラーメッセージを表示して false を返す
alert(errorMessages.join('\n'));
return false;
});
})();
動作の確認手順
- サンプルのカスタマイズコードをjsファイルに保存します。
- アプリ設定>フォーム設定から新規に通常フォームを作成します。
- サンプルフォームに、先で記載されている必要なパーツを配置します。
- サンプルフォームを再度表示し、カスタマイズのタブを表示します。
- 保存したファイルをアップロードします。
- アプリ設定>経路設定から新規に経路を作成します。
- 先で作成したフォームを選択し、金額を編集不可にします。
- 任意に経路アイテムを配置して、経路を作成します。
- 新規文書から作成した経路名をクリックします。
- 明細のパーツを任意に入力します。
- [申請内容確認]をクリックすると、明細の入力状態がチェックされます。
商品名・数量・単価が全て入力されている、もしくは未入力以外の場合にメッセージが表示されます。
コメント
0件のコメント
記事コメントは受け付けていません。