フィールド値変更イベント で重複チェック&エラー表示したい

保存時タイミングではなく、フィールドの編集タイミングでその入力値が重複していないかをチェックし、重複していたらフィールドにエラーメッセージを表示したいです。(保存タイミングでのチェックですと、その他色々なフィールドの入力作業が無駄になるため)

下記のコードで重複チェックまでは行いましたが、フィールドへのエラ〜メッセージが反映されません。

// 品番・型番が編集されたタイミングで重複チェックし、重複していたら
// フィールド部分にアラートを表示する
const f_item_no = "品番・型番"
kintone.events.on(['app.record.create.change.' + f_item_no, 'app.record.edit.change.' + f_item_no], function(event) {
let record = event.record;
let item_no = record[f_item_no].value;
let query = f_item_no + ' = "' + item_no + '" limit 1';
let body = {
'app':kintone.app.getId(),
'query':query
};

kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body, function(resp) {
let rec_counts = resp["records"].length;
if(rec_counts>0){
event.record[f_item_no].error = "重複する「品番・型番」が存在します";
}
else{
event.record[f_item_no].error = null;
}
console.log(event)
return event;
}, function(error) {
console.log(error)
event.error = "エラー発生。管理者に連絡してください"
return event;
});
});

フィールド値変更イベントはPromise対応していないため同期的な処理をどうすれば良いかがわかっていない状況です。

よろしくお願いします

 

ーー追記ーー

一つ回避方法がありましたので記載します。

重複チェック方法として「関連レコード」で同アプリの入力値と一致するレコードを表示する、というものです。

これと同様の動作をAPIでできるとよりスマートなのですが。。。

 

Changeイベントの場合はおっしゃるとおりPromiseに対応してないので、

APIでデータ取得後、 kintone.app.record.get とkintone.app.record.setを使い反映させるというのが常套手段かとは思います。

 

ありがとうございます。となるとkintone.event.onが使えないので今回のケースでは「重複チェック」のようなボタンをおいて、それが押されたら重複チェックを行いエラーを表示する、という手段になりますね。ユーザーにボタンを押させずにチェックさせるようなことができないか引き続き調べます。

kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body, function(resp) {
letrec_counts = resp["records"].length;
letretStr = null
if(rec_counts>0){
retStr = "重複する「品番・型番」が存在します";
}
else{
retStr = null;
}
// メッセージに表示
letrecobj = kintone.app.record.get();
console.log(recobj);
recobj.record[f_item_no].error = retStr;
kintone.app.record.set(recobj);
});

これでできました。

参考: https://qiita.com/juri_don/items/a66d503a1a9f97eef124