ボタン押下時(ステータス項目更新時)にエラーチェックをかけたいです。

「保存」ボタン押下時、以下エラーチェックをかけています。

 

kintone.events.on([‘app.record.create.submit’,‘app.record.edit.submit’,‘app.record.index.edit.submit’], function (event) {

var eventDate=event.record.搬入希望日.value;
var nowDate=new Date();
var eventStamp1=nowDate.getDay();
if(eventDate){
var eventDay=new Date(eventDate);
var eventStamp=eventDay.getTime();
//指定より前の搬入希望日を入力したらエラー
if((eventStamp1==3||eventStamp1==4||eventStamp1==5)&&eventStamp<nowDate.getTime()+(1000*60*60*24*4)){
console.log(“今日の5日後:”,nowDate.getTime()+(1000*60*60*24*4));
event.error=“本日より3日以上先(土日除く)の搬入希望日を入力してください。”;
}
if(eventStamp1==6&&eventStamp<nowDate.getTime()+(1000*60*60*24*5)){
console.log(“今日の4日後:”,nowDate.getTime()+(1000*60*60*24*5));
event.error=“本日より3日以上先(土日除く)の搬入希望日を入力してください。”;
}
if(eventStamp1<=2&&eventStamp<nowDate.getTime()+(1000*60*60*24*2)){
console.log(“今日の3日後:”,nowDate.getTime()+(1000*60*60*24*2));
event.error=“本日より3日以上先の搬入希望日を入力してください。”;
}
else{
event.record.搬入希望日.error=null;
}
}

return event;
});

上記とは別のコードで、ボタン押下時、ステータス変更を実施するようにしています。

こちらに、上記エラーチェックのコードを組み込めないでしょうか?

 

(function() {
“use strict”;

kintone.events.on(‘app.record.detail.show’, function(event) {

// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement(‘button’);
mySpaceFieldButton.id = ‘my_space_field_button’;
mySpaceFieldButton.innerText = ‘注文を依頼する’;
mySpaceFieldButton.onclick = function () {

var record = event.record;
console.log(record);
var body = {
“app”: kintone.app.getId(),
“id”: record[“$id”].value,
“record” : {
“ステータス_2”: {
“value”: “依頼中”
}
}
};
console.log(body);
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body, function(resp) {
// success
console.log(resp);
location.reload();
}, function(error) {
// error
console.log(error);
});
console.log(record);
}
kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);
});
})();

 

「保存」ボタン押下時は、「エラー」要件を満たさなかったレコードが、「ボタン」押下までに、
「エラー」要件を満たすケースがあり、そこでもエラーチェックをかけたいと考えております。

 

具体的には、「注文」を作成し、「保存」(上段のコードでエラーチェック)、
次に、ボタンの押下で「依頼」(下段のコード)という流れを、上記2つのコードで実現してます。

 

ところが、「注文」作成後、しばらく寝かせてしまうと、時間が経過してしまい、
上段の「保存」時のエラーチェックだけでは不十分ということに、気が付きました。

 

どなたか、アドバイス頂けると助かります。宜しくお願い致します。

> ところが、「注文」作成後、しばらく寝かせてしまうと、時間が経過してしまい、
> 上段の「保存」時のエラーチェックだけでは不十分ということに、気が付きました。

 

保存時の時間と、保存後にボタンを押すときの時間がちがうということでこまってるんですよね?

アイディアとして、保存後に詳細画面にボタンを出すのではなく、

フォームにその「ボタン」に該当するチェックボックスなどをおいて、編集時にそれをチェックして保存させるようにしてはどうでしょうか。

そうすると同じバリデーションかけれそうなきがします。

村濱様

コメント有り難うございます。
おっしゃるとおり、「保存時の時間と、保存後にボタンを押すときの時間の相違」で、つまづいております。

頂いたアイデア、大変参考になりました。
(まさに、同じバリデーションをかけるところで、悩んでおりまして・・・)

ただ、運用(依頼方法)を変えるのが難しい社内環境のため、
今回は、以下コード追加でかわせないか、検討中です。

特定の条件のレコードの場合のみ、明細表示の際に「編集モード」にしてしまい、
もう一度、「保存」させ直す、という、ちょっと強引なやり方です・・・。
(「保存」し直すとなると、そのタイミングでエラーチェックがかかるので)

この場合、「キャンセル」を押されてしまうと、かわされてしまうので、
「キャンセル」ボタンを消せないか、悪戦苦闘中です。
(このケースの場合のみ、消したいと考えています)

引き続き、お力お貸しいただけたら幸いです。この度は、誠に有り難うございました。

(function () {

‘use strict’;

//新規作成、編集、一覧編集時のイベントハンドラー群
var submit = [‘app.record.detail.show’];

kintone.events.on(submit, function(event){

var rec = event.record,
required_11 = rec[‘ステータス_2’],
required_10 = rec[‘注文書区分’],
required_9 = rec[‘レコード区分’],
msg_ary = [];

//以下条件の場合、編集モードにする。
if(required_10[‘value’] == ‘フェア注文書’ && required_9[‘value’] == ‘注文’ && required_11[‘value’] == ‘作成中’ ){
location.href = location.href + “&mode=edit”;
}
return event;

});

})();

キャンセルボタン非表示ですが、
以下コードを参考にして、消そうとしているのですが、どうもうまくいきません。

(function () {
“use strict”;
// レコード詳細画面が表示された時のイベント
kintone.events.on(‘app.record.edit.show’,‘app.record.create.show’, function (event) {
document.getElementsByClassName(‘gaia-ui-actionmenu-cancel’)[0].style.display = ‘none’;
});
})();

以下条件の時だけ、消したいと考えております。

var rec = event.record,
required_11 = rec[‘ステータス_2’],
required_10 = rec[‘注文書区分’],
required_9 = rec[‘レコード区分’],
msg_ary = [];

//以下条件の場合、編集モードにする。
if(required_10[‘value’] == ‘フェア注文書’ && required_9[‘value’] == ‘注文’ && required_11[‘value’] == ‘作成中’ ){
location.href = location.href + “&mode=edit”;
}

すぐには「依頼」せず、しばらく寝かせてから「依頼」する場合のエラーチェックの件、
以下のコード追加で、実現できました。

(function () {

‘use strict’;

//新規作成、編集、一覧編集時のイベントハンドラー群
var submit = [‘app.record.edit.show’,‘app.record.create.show’];

kintone.events.on(submit, function(event){

var rec = event.record,
required_11 = rec[‘ステータス_2’],
required_10 = rec[‘注文書区分’],
required_9 = rec[‘レコード区分’],
msg_ary = [];

//以下条件の場合、編集モードにする。
if(required_10[‘value’] == ‘フェア注文書’ && required_9[‘value’] == ‘注文’ && required_11[‘value’] == ‘作成中’ ){
document.getElementsByClassName(‘gaia-ui-actionmenu-cancel’)[0].style.display = ‘none’;
}
return event;

});

})();

・以下の3つの条件が全て揃う場合、詳細画面表示時に、「編集モード」とする。
・この条件での「編集モード」は、「キャンセル」ボタンを非表示とする。

ステータス :「作成中」
注文書区分 :「フェア注文書」
レコード区分:「注文」

よって、寝かせた場合も、「依頼」をするには、「編集モード」をくぐらなければならず、
その際、「保存」を押した段階で、「搬入日」チェックがかかります。

「キャンセル」ボタンを非表示にしてあるので、「キャンセル」でかわすことも不可能です。


アドバイス有り難うございました。