javascript初心者のため、無駄が多いソースかもしれませんがご容赦ください。
特定の組織に所属するユーザーがレコードを保存するタイミングで、
特定の値の必須入力チェックをし、未入力ならエラー表示して保存させない処理をしたいです。
他の方の投稿を参考にし「event.error」を入れればできるのかなと思ったのですが、
特にエラーも表示されず、保存もできてしまいました。(★の箇所です)
if文に入り、event.errorもなめているようなんですが空欄でも登録されてしました。
エラー表示させて保存させないようにするにはどのように修正したらいいのか、
ご教授のほどよろしくお願いいたします。
(() => {
'use strict';
// レコード保存するときのイベント
const events = ['app.record.edit.submit'];
// 保存時、所属によって必須入力チェック&エラー表示
kintone.events.on(events, function(event) {
var record = event.record;
var varJuyodo = record['重要度']['value'] || "";
var varKinkyudo = record['緊急度']['value'] || "";
var user_organization_1,
user_organization_2,
user = kintone.getLoginUser();
/*--ユーザーの所属組織のコードを表示する--*/
kintone.api('/v1/user/organizations','GET',{
code:user.code
},function(resp){
user_organization_1 = resp.organizationTitles[1].organization.code;
user_organization_2 = resp.organizationTitles[2].organization.code;
// 営業部の場合、重要度が必須
if (user_organization_1 == '営業部'){
if (varJuyodo == ''){
event.error = '重要度が未選択です。重要度を選択してください。'; ★エラーが表示されず保存できてしまう
}
}
// 営業2係の場合、緊急度が必須
if (user_organization_2 == '営業2係'){
if (varKinkyudo == ''){
event.error = '緊急度が未選択です。緊急度を選択してください。'; ★エラーが表示されず保存できてしまう
}
}
});
return event;
});
})();
kintone.api(非同期処理)をsubmitイベント等に組み込む場合、成功時のコールバック関数に続きの処理を記載するのではなく、then()で繋いで続きの処理を記載するPromiseが必要です(そのまま処理を記述すると、kintone.apiの実行完了を待たずにレコードの保存処理が先に行われるため、これを待つ処理を追加させる必要があります)。
kintoneにおけるPromiseの書き方の基本が参考になるかと思います。
>mls-hashimoto 様
コメントありがとうございます!
いただいたURLの内容等を参考にPromiseを入れたみたところ、未選択時にエラーを表示することができました!
ただ、必須チェックOKだったあとに今度は保存ができなくなりました。。
編集画面がずっと表示されたままになってしまうのですが、何か足りていないのでしょうか・・?
F12でコンソールを見てましたがエラー等もなくどこがダメなのか見当がつけれません…。
たびたび申し訳ありませんが、再度ご教示いただきたくよろしくお願いいたします。
(() => {
'use strict';
// レコード保存するときのイベント
const events = ['app.record.edit.submit'];
// 保存時、所属によって必須入力チェック&エラー表示
kintone.events.on(events, (event) => {
const record = event.record;
var varJuyodo = record['重要度']['value'] || "";
var varKinkyudo = record['緊急度']['value'] || "";
var errMesage = '';
var user_organization_1,
user_organization_2,
user = kintone.getLoginUser();
/*--ユーザーの所属組織のコードを表示する--*/
return new kintone.Promise((resolve,reject) => {
kintone.api(kintone.api.url('/v1/user/organizations',true),'GET',{code:user.code},(resp) => {
user_organization_1 = resp.organizationTitles[1].organization.code;
user_organization_2 = resp.organizationTitles[2].organization.code;
// 営業部の場合、重要度が必須
if (user_organization_1 == '営業部' && varJuyodo == '') {
record['重要度'].error = '「重要度」を選択してください。';
event.error = '「重要度」が未選択です';
resolve(event);
// 営業2係の場合、緊急度が必須
} else if (user_organization_2 == '営業2係' && varKinkyudo == '') {
record['重要度'].error = '「緊急度」を選択してください。';
event.error = '「緊急度」が未選択です';
resolve(event);
}
});
});
});
})();
Uchiyama さま
// 営業部の場合、重要度が必須
if (user_organization_1 == '営業部' && varJuyodo == '') {
record['重要度'].error = '「重要度」を選択してください。';
event.error = '「重要度」が未選択です';
resolve(event);
// 営業2係の場合、緊急度が必須
} else if (user_organization_2 == '営業2係' && varKinkyudo == '') {
record['重要度'].error = '「緊急度」を選択してください。';
event.error = '「緊急度」が未選択です';
resolve(event);
}
↓
// 営業部の場合、重要度が必須
if (user_organization_1 == '営業部' && varJuyodo == '') {
record['重要度'].error = '「重要度」を選択してください。';
event.error = '「重要度」が未選択です';
resolve(event);
// 営業2係の場合、緊急度が必須
} else if (user_organization_2 == '営業2係' && varKinkyudo == '') {
record['重要度'].error = '「緊急度」を選択してください。';
event.error = '「緊急度」が未選択です';
resolve(event);
} else {
resolve(event);
}
もしくは
// 営業部の場合、重要度が必須
if (user_organization_1 == '営業部' && varJuyodo == '') {
record['重要度'].error = '「重要度」を選択してください。';
event.error = '「重要度」が未選択です';
// 営業2係の場合、緊急度が必須
} else if (user_organization_2 == '営業2係' && varKinkyudo == '') {
record['重要度'].error = '「緊急度」を選択してください。';
event.error = '「緊急度」が未選択です';
}
resolve(event);
どの条件も満たしていない場合にresolve(event)がされていないので、Promise処理がいつまでも終わらないという状態になっているようです。
>mls-hashimoto 様
ありがとうございます!
いただいた内容で保存まで無事できるようになりました!!
初歩的な内容だったにも関わらずお付き合いいただき本当に助かりました、ありがとうございます。
system
(system)
クローズされました:
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。