新規投稿
フォローする

レコード保存時のKintoneのバリデーションのハンドリング

レコードの保存「前」でKintoneのバリデーション(エラーチェック)を

ハンドリング(または検知)する方法はありますでしょうか?

 

レコード保存後イベントであれば、当然にできるのですが、

処理として、

①保存ボタン押下

②APIで他システムにデータ移送

③他システムからのパラメータを取得

④当該kintoneレコードにそのパラメータをセット

⑤保存終了

という流れを想定しているため、保存後イベントだと③の取得したパラメータをセットできず、また、kintone側でかけている入力制限を受けないデータが他システムに飛んでしまうため、どうすべきか悩んでおります。

保存後イベントで記述し、当該kintoneデータをリロードして再更新という方法も考えましたが、API連携を含むので、失敗したときのエラー処理がどこなのかが煩雑になってしまいます。

 

なにか良い方法があれば、ご教授いただければ幸いです。

0

4件のコメント

Avatar
ひよこ

rick さん

はじめまして。ひよこです。

的外れだったらすみません。レコード保存実行前イベント ではできないでしょうか?
レコードの保存ボタンを押したあと(DBに保存される前)に実行するイベントです。

このイベント内で、下記のいずれを行うと、データは保存されずに止まります。

例:

kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
// 入力された値が 10 よりも大きければ DB に保存しない
if (record['数値'].value > 10 ) {
record['数値'].error = '10以下の値を入力してください';
return event;
}
});

 

0
Avatar
rick

ひよこさん、ご回答ありがとうございます。

こちらの不慣れな表現で申し訳ありません。

お聞きしたい事項をまとめてみました。

 

①'app.record.create.submit', 'app.record.edit.submit'イベント(保存前イベント)では

Kintoneのフォームに定義した入力チェック(必須とか桁数とか重複禁止とか)の結果を取得する事は不可能。

保存前イベントで結果を知るにはKintoneのフォームチェックと全く同じチェックを保存前イベントに自分で書く必要がある。

 

②保存前イベントでKintoneのフォームで定義した入力チェック(必須とか桁数とか重複禁止とか)の結果を取得し

それをjsで読み取って保存前イベント処理を中断する(またはイベント起動させない)方法がある。

 

③保存後イベントでKintoneのフォームに値をKintoneのDBに反映し

尚且つリロード(自動リロードも含む)無しで次回保存ボタン押下時に排他エラーを起こさない方法と

保存後イベント内で連携エラーが発生した際にKintoneDBへの保存の無効化とエラーメッセージの出力を行い

保存ボタン押下をなかったことにする方法がある。

上記でご教授いただければ幸いです。

0
Avatar
ひよこ

rick さん

ひよこです。

① kintone 標準機能でチェックしている結果(必須とか桁数とか重複禁止とか)は、取れない認識です。
> 保存前イベントで結果を知るにはKintoneのフォームチェックと全く同じチェックを保存前イベントに自分で書く必要がある。
なので、これになると思います。

② ①との差異がわからなかったのですが、kintone の標準でチェックしている結果は取れないはずなので、自前で実装ですね。


> 保存後イベントでKintoneのフォームに値をKintoneのDBに反映し
> 尚且つリロード(自動リロードも含む)無しで次回保存ボタン押下時に排他エラーを起こさない方法

これは意図されていることがよくわからなかったです。すみません。
保存後イベント後に編集画面に遷移したいということであればできますが、リロード(ネットワーク通信)は発生します。

// 追加成功後にそのレコードの編集画面に遷移する
kintone.events.on('app.record.create.submit.success', function(event) {
var appId = kintone.app.getId();
var recordId = event.recordId; // 追加したレコードのレコード番号を取得
event.url = '/k/' + appId + '/show#record=' + recordId +'&mode=edit'; // 編集画面の URL を生成
return event;
});

次回保存ボタン押下時までに、他の誰かがそのレコードを編集していればどうしても排他エラー※は出ると思います。
※排他エラーは、「レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。」というエラーであってますか?

> 保存後イベント内で連携エラーが発生した際にKintoneDBへの保存の無効化とエラーメッセージの出力を行い
> 保存ボタン押下をなかったことにする方法がある。

保存後イベントではなく、保存前イベントでやれば、連携エラーしたときに kintone レコードが作成されない、という処理はできます。
https://developer.cybozu.io/hc/ja/articles/201941984#step2 の「非同期処理の実行を待ってフィールドの値に応じた制御を行う」です。
ただ、この場合は、連携は成功して、kintone 保存に失敗したときのフォローはできないですね。

保存後イベントで行うとしたら、連携失敗時に kintone REST API でレコードを削除ですかね…。
レコードID は進んじゃいますが。

0
Avatar
rick

ひよこさん、ありがとうございます!

一挙両得とはいかないですね~

作業ボリュームや他機能との兼ね合いを見て、検討したいと思います。

ご丁寧にご教授いただき、ありがとうございました!

 

 

0
ログインしてコメントを残してください。