app.record.index.delete.submit イベント時に特定のフィールドに値がある場合はレコード削除させたくない

いつもお世話になっております。
特定のフィールド(1行文字列)に何かしらの値が入っている場合は
レコード一覧画面の×で削除できないようにしたいです。
Falseをreturnすると削除処理が止まるという記事がありましたので
return falseしてみましたが削除出来てしまいます。

ーーーーーーーーーーーーーーーーーーーーーーーーーー
kintone.events.on(‘app.record.index.delete.submit’, function(event){
var statusCheck = event.record[‘契約書ステータス’].value;
if (statusCheck != ‘’) {
event.error = ‘契約書が発行されているため削除できません。’;
return false;
}
});
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
一方、レコード詳細画面では下記のコードで動作してくれました。

kintone.events.on('app.record.detail.delete.submit', function(event){
    var statusCheck = event.record['契約書ステータス'].value;
    if (statusCheck != '') {
        event.error = '契約書が発行されているため削除できません。';
    }
    return event;
});

詳細画面と一覧画面で挙動が異なるため、わからなくなってしまいました。
ご教授頂けますと幸いです。よろしくお願いいたします。

1 Like

うーん、たしかに想定通り動きそうなコードにみえますね
他の箇所で問題がおきてる可能性もあるため、そのifにちゃんと到達しているか、問題の切り分けとしてブレークポイントを設置したり、デバッグしてみるのをおすすめします

一覧画面の方は「return event;」にしても動かなかったということでしょうか?

ご返信ありがとうございます。eventにしても状況変わりませんでした。

ご返信ありがとうございます。切り分け進めてみます。

一覧画面の方はreturnがifの中にあるように見えます。

1 Like

条件を満たす際にのみ削除をキャンセルさせたいのでIfの中に入れています。この位置ですと動かないのでしょうか。質問ばかりで申し訳ございません。

event.errorにエラーメッセージが格納されている場合にのみエラーになり削除はキャンセルされますのでifの外で大丈夫です(event.errorが空の場合はそのまま削除)。
但しこれはeventをreturnすることが必須です。

1 Like

return eventは必要ですが、今回のですと処理時にifに入り込んでfalse返す処理が出来ていればその時点で削除ブロック出来てるはずですのでmuraさんおっしゃってる通り到達してないように思えますね。念のためreturn event追加バージョンは書いておきます。処理自体は私の方でもちゃんと動きました。

他に一覧で使用しているjsやプラグインがあれば一度止めるてこちらを実行するか、新しいアプリでこちらを単独で実行して切り分けてみてください。

kintone.events.on("app.record.index.delete.submit", function (event) {
    var statusCheck = event.record["契約書ステータス"].value;
    if (statusCheck != "") {
      alert("契約書が発行されているため削除できません。");
      return false;
    }
    return event
  });

ご返信、ありがとうございます。
新たにアプリを作成し、テストしてみたところ問題無く想定どおりに動作しました。
プラグインを複数セットしているため、1つずつ切り分けて行きたいと思います。

ご教授頂きました皆様、ご丁寧にありがとうございました。

2 Likes

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