サブテーブル重複チェック

サブテーブル内の項目Aの重複チェック方法を教えてください

チェックする条件は次の通りです

①登録時のサブテーブル内に重複がないこと

②既存レコード(サブテーブル内)の項目Aに重複がないこと

こんな感じで、チェックできます。フィールドコードやメッセージ等はアプリに合わせて変更してください。

(function() {
'use strict';

const checkFcode = '項目A';
const errMessage1 = '重複エラー: ';
const errMessage2 = '項目A 重複エラー';
const events = [
'app.record.create.show', 'app.record.edit.show',
'app.record.create.submit', 'app.record.edit.submit',
'app.record.create.change.Table', 'app.record.edit.change.Table',
'app.record.create.change.' + checkFcode, 'app.record.edit.change.' + checkFcode,
];
kintone.events.on(events, function(event) {
var record = event.record;
var keys = {};
var table = record.Table.value;
table.forEach(function(row, index) {
row.value[checkFcode].error = null;
var val = row.value[checkFcode].value;
if (val) {
if (keys.hasOwnProperty(val))
keys[val].push(index);
else
keys[val] = [index];
}
});
Object.keys(keys).forEach(function(val) {
if (keys[val].length > 1) {
keys[val].forEach(function(pos) {
table[pos].value[checkFcode].error = errMessage1 + val;
if (event.type.slice(-7) == '.submit')
event.error = errMessage2;
});
}
});
return event;
});
})();

 

あとご参考に、有償ですが項目検証プラグインの重複チェック例です。

kintone 項目検証プラグイン テーブルの重複チェック

 

1 Like

rex0220さん

コメントありがとうございます。

既存の登録データの重複チェックの方法はありますでしょうか?

一覧画面で上記と同様のチェックを行い、エラーに該当するレコードを赤く表示してはいかがですか?

下記が参考になると思います。

レコード一覧とレコード詳細画面で条件書式を設定する

 

rex0220さん

コメントありがとうございます。

すいません。伝え方が悪かったみたいですね。

やりたいことが、サブテーブル内の項目Aを入力した場合に

既存テーブルに同一のデータが存在するときはエラー表示を行いデータ登録させたくない要件でした(^^;

<例1>

【画面】項目A⇒1001

【DB】項目A⇒…998, 999, 1000

⇒DB/項目Aに1001が登録される

<例2>

【画面】項目A⇒1001

【DB】項目A⇒…998, 999, 1000, 1001

⇒エラー表示して登録させない

 

いい方法ありますかね?

 

 

 

 

 

 

 

 

 

単純に REST API で、該当データが存在するかチェックして、あったらエラーにするだけでいいと思います。

処理タイミングは、項目Aのフィールド値変更時イベント

レコードの一括取得(クエリで条件を指定)で、項目Aの値を条件にレコード取得してください。

 

 

 

rex0220さん

コメントありがとうございます。

ご教示頂いた通り、REST APIで検索後にエラーを出力するコードを書いたのですが

エラーとならず正常終了(登録)されます。

リクエスト後の個所でエラー表示は出来ないのでしょうか?

 

submit イベントで、非同期処理の REST API を実行する場合は、Promise 対応しなければなりません。

現在のコードだと、REST API  の終了を待たずに、for ループが回り、イベント処理が終了します。

あと、項目の値毎に REST API を呼び出していますが、項目の値を全部まとめて in の中に指定すれば、1回の REST API で済むと思います。

kintone.Promiseとは

kintone API で Promise を使ってみよう!

sample.js(kintone.api コールバック関数省略版) が、参考になると思います。

rex0220さん

無事にエラーチェックすることができました!

非同期処理のREST APIではPromise対応するんですね(^^;

本当に助かりました。幾度のご連絡ありがとうございました!

 

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。