日付自動設定と必須項目

★運用期間★は3つの項目のプルダウン設定になってます

その3つの項目別に必須項目を変動させようとしてます。
そのうちのひとつを選んだ場合の動作がなかなかうまくいかず・・・

プルダウン内の項目「任意期間」を選ぶと
「★運用開始日★」に入ってる日付をそのまま「開始日」にセットしたい
かつ
「終了日」を必須項目にしたい

①:終了日を必須項目にするコード
②:★運用開始日★に入ってる日付をそのまま開始日にセットするコード

動作確認のために単体で確認するとそれぞれ問題なく動きます。

①と②を合体させると、①のコードしか動作せず、エラーもでないため何が原因かわかりません。どなたか教えてください( ;∀;)

 

▼①のコード

//任意期間を設定すると必須項目にする
(function() {
    “use strict”;
kintone.events.on([
‘app.record.create.submit’,
‘app.record.edit.submit’,
‘app.record.edit.change.ドロップダウン_3’,
‘app.record.create.change.ドロップダウン_3’,
], function(event){
 if(event.record.ドロップダウン_3.value.indexOf(“任意期間”) !== -1){
    const record = event.record;
    record[‘日付_0’].error = ‘必須項目です。’;

    if(!event.record.日付_0.value)
    event.error = ‘任意期間の場合は「終了日」を入力してください’;  
}
return event;
});
})();

▼②のコード

//任意期間を設定すると運用開始日の日付がそのまま開始日に入力される

(function() {

  “use strict”;

kintone.events.on([

    ‘app.record.create.submit’,

    ‘app.record.edit.submit’,

    ‘app.record.edit.change.ドロップダウン_3’,

    ‘app.record.create.change.ドロップダウン_3’,

    ], function(event){

      if(event.record.ドロップダウン_3.value.indexOf(“任意期間”) !== -1){

 

        const record = event.record;

        const date = luxon.DateTime.fromISO(record.日付_1.value).startOf(‘day’);  //luxonを使って日付処理できるようにする

        record.日付.value = date.toFormat(‘yyyy-MM-dd’);

         

        };

 

        return event;

      });

  })();

レコードにエラーを表示する を実行してreturn eventすると、フィールドの書き換えがキャンセルされるためです。

①の

      if(!event.record.日付_0.value) event.error = '任意期間の場合は「終了日」を入力してください';  

この部分を削除するか、changeイベントはフィールドのエラーのみ、submitイベントはレコードのエラー、と処理を分けても良いかもしれません。

 

また、以下は補足ですが

  if(event.record.ドロップダウン_3.value.indexOf("任意期間") !== -1){
    const record = event.record;
      record['日付_0'].error = '必須項目です。';

    if(!event.record.日付_0.value) event.error = '任意期間の場合は「終了日」を入力してください';  
    }

この部分の処理について、
①indexOfは対象に文字列が含まれるか検索します。値がundefinedの場合(ドロップダウンを何も選択していない場合)はエラーになるので、A.値があるかを判定した後に使うか、B.=== で比較した方が良いかもしれません。

A

if (event.record['ドロップダウン_3'].value?.indexOf('任意期間') !== -1) {...

B

if (event.record['ドロップダウン_3'].value === '任意期間') {...

②changeイベントでフィールドにエラーを表示する場合、エラーの条件を満たさない場合はエラーを非表示にする処理(フィールドのerrorにnullを代入)を追加した方が良いかもしれません。

if (event.record...) {
...
} else {
event.record['日付_0'].error = null;
}

 

385013133091 様

返信ありがとうございます!

changeイベントはフィールドのエラーのみ、submitイベントはレコードのエラー、と処理を分けたらうまくいきました^^

また、もろもろの補足情報もありがとうございます!

初心者なのでそういったアドバイスとても助かります・・・!!!( ;∀;)

アドバイス元に修正加えていきます!本当にありがとうございました!