ルックアップ編集時にエラーを表示

 ルックアップの値の重複禁止を行いたいため、重複している場合はルックアップフィールドにエラーメッセージを表示したいと考えています。

 

下記のようにコードを書いたのですが、

・保存ボタン押下時にはメッセージが表示される→OK

・ルックアップ選択時にはエラーメッセージが表示されない→NG

という状態に陥っています。

(function() {
"use strict";

handlers = [
'app.record.create.change.text',
'app.record.edit.change.text',
'app.record.create.submit',
'app.record.edit.submit'
];

// ルックアップ重複確認
kintone.events.on(handlers, function(event) {
var record = event.record;

var body = {
"app": kintone.app.getId(),
"query": "lookup = \"" + record['lookup']['value'] + "\"",
"fields": ["$id"]
};

// 重複値の検索
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {

// 1件以上見つかった場合
if (resp.records.length > 0) {
record['lookup']['error'] = '既に使用されています。';
}
return event;
});
});
})();

※textはlookupの値を含む自動計算フィールドに設定しています。

change.textのタイミングでルックアップフィールドにエラーメッセージを表示させることはできるでしょうか?

TANAKA様

お世話になっております。 cstapの江田と申します。

kintone.api()は非同期処理となるので、レコードの取得が終わる前にkintone.events.on()のコールバック関数が完了してしまっているのだと思います。 現状、change系のイベントではPromiseオブジェクトを返すことはできないので、同期処理でレコードを取得するか、alert()を用いてエラー表示するのが良いかと思います。

以下、alert()を用いた例です。

(function(){"use strict";// ルックアップ重複確認kintone.events.on(['app.record.create.change.text','app.record.edit.change.text'],function(event){varrecord=event.record;varbody={"app":kintone.app.getId(),"query":"lookup = \""+record['lookup']['value']+"\"","fields":["$id"]};// 重複値の検索kintone.api(kintone.api.url('/k/v1/records',true),'GET',body,function(resp){// 1件以上見つかった場合if(resp.records.length\>0){alert('既に使用されています。');}});});})();

ご回答頂きありがとうございます。

ご掲示頂いた方法で無事メッセージを表示することができました。

 

>change系のイベントではPromiseオブジェクトを返すことはできない

kintone.Promiseについても勉強中でしたのでためになりました。