レコード追加時 エラー表示+処理中断したい。

お疲れ様です。

レコード追加時に情報を入力し、

品目コードと刷数を入力し保存ボタンを押下したときに

他アプリのレコードの中から今から追加しようとする品目コードと同じ数値のレコードの刷数を取得し比較する処理までは作成できました。

 

ここからが問題。。。

 

その比較した刷数が同じだった場合、処理を中断し保存させない。

一致しない場合は保存する。という処理を実現したいのですがうまくいきません。

以下のソースをもとに改良し実現したいです。

よろしくお願いいたします。

 

(function (){
‘use strict’;

kintone.events.on([‘app.record.create.submit’,‘app.record.create.change.刷数’], function(event) {

var record = event.record;
var Id = record.品目コード.value;
var tagetappID = 66;
var params = {
‘app’: tagetappID,
‘query’: ‘品目コード = "’ + Id + ‘"’
}

kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {
var subRecords = resp.records
var body = {
‘app’: tagetappID,
‘records’: [
]
};
for (var i = 0; i < subRecords.length; i++){ //追加する品目コードと一致する刷数情報の品目コードのレコードを探索

var putRecord = {
‘id’: subRecords[i].レコード番号.value,
‘record’: {}
}

if(record[‘刷数’][‘value’] == subRecords[i].刷数.value){ // 一致したレコードの刷数が一致した場合
alert(“エラー:同刷数”);
exit;
}else{ //一致しない場合
alert(“ok”);

}

}
}).then(function(resp) { //callback
console.log(resp);
return event;
}).catch(function(err) {
console.log(err);
return event;
});

});
})();

 

こんにちは。

alert(“エラー:同刷数”);

の部分で、

フィールドにエラーを表示する

https://developer.cybozu.io/hc/ja/articles/201941984#step6 

を参考に、刷数フィールドに対して、エラー情報を設定することで、kintoneの保存自体が

キャンセルされると思います。

画面上部に大きくエラーを出したい場合は、

event.error = ‘エラー:同刷数’;

でもよいかと。

補足です。

return event; を通らないと、保存キャンセルされないと思いますので、お気をつけください。

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

下記のようにソースを修正しましたが

キャンセルされませんでした。。。

(function (){
‘use strict’;

kintone.events.on([‘app.record.create.submit’,‘app.record.create.change.刷数’], function(event) {

var record = event.record;
var Id = record.品目コード.value;
var tagetappID = 66;
var params = {
‘app’: tagetappID,
‘query’: ‘品目コード = "’ + Id + ‘"’
}

kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {
var subRecords = resp.records
var body = {
‘app’: tagetappID,
‘records’: [
]
};
for (var i = 0; i < subRecords.length; i++){ //追加する品目コードと一致する刷数情報の品目コードのレコードを探索

var putRecord = {
‘id’: subRecords[i].レコード番号.value,
‘record’: {}
}

if(record[‘刷数’][‘value’] == subRecords[i].刷数.value){ // 一致したレコードの刷数が一致した場合
alert(“エラー:同刷数”);
event.error = ‘エラー:同刷数’;

}else{ //一致しない場合
alert(“ok”);

}

}
}).then(function(resp) { //callback
console.log(resp);
return event;
}).catch(function(err) {
console.log(err);
return event;
});

});
})();

 

 

うまくいかないとのことで、一度元のコードをバックアップして頂いて、キャンセルする部分だけにして、動作させてみてはいかがでしょうか。

 

(function (){
    'use strict';
    
    kintone.events.on(['app.record.create.submit'], function(event) {
    
        alert("エラー:同刷数");
        event.error = 'エラー:同刷数';    
        return event;
    
    });
})();

こんな感じで、保存をキャンセルするだけのJSにして動作させてみてください。

期待結果はこんな感じになると思います。

 

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

上記のソースを参考にキャンセルする部分のみで作成した結果、期待結果同等なものにはなり処理もキャンセルされていることが確認できました。

しかし、以下のソースに組み込みましたがエラー表示がされませんでした。

私の組み込みかたが違うようです。。

それかpromiseを使用しないと同期、非同期処理の関係でうまくで生きていないのかもしれません。。。

となると、

レコードの値を取得→計算→保存ボタン押下で表示を変えたい。

https://developer.cybozu.io/hc/ja/community/posts/360017081723-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97-%E8%A8%88%E7%AE%97-%E4%BF%9D%E5%AD%98%E3%83%9C%E3%82%BF%E3%83%B3%E6%8A%BC%E4%B8%8B%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%82%92%E5%A4%89%E3%81%88%E3%81%9F%E3%81%84- 

そうなると、こちらが近しいと思います。

おはずかしながら、promiseとか同期・非同期まわりが私苦手でして、上記URLの回答者(rex0220さん)のコピペ改定になりますが、SAKAgogoさんのやりたいことは下記のソースのイメージになるかなと。

(function (){
    'use strict';
    
    kintone.events.on(['app.record.create.submit'], function(event) {
        
        var record = event.record;
        var Id = record.品目コード.value;
        var tagetappID = 66;
        var params = {
            'app': tagetappID,
            'query': '品目コード = "' + Id + '"'
        }

        return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {

            var subRecords = resp.records
            
            for (var i = 0; i < subRecords.length; i++){ //追加する品目コードと一致する刷数情報の品目コードのレコードを探索
            
                if(record['刷数']['value'] == subRecords[i].刷数.value){ // 一致したレコードの刷数が一致した場合
                    alert("エラー:同刷数");
                    event.error = 'エラー:同刷数';
                }else{ //一致しない場合
                    //alert("ok");
                }
                
            }

            return event;

        }).catch(function() {
            event.error = 'レコード取得エラー';
            return event;
        });
        
    });

})();

 

すばらしい回答ありがとうございます。

おかげさまでやりたい動作が完璧に行えました。

 

お忙しい中大変お世話になりました。