ドロップダウンの選択により、数値の自動反映設定を行いたい

お世話になっております。初投稿でございますが、どうぞよろしくお願い致します。

項目として:

・月(ドロップダウン):1月~12月

・営業時間(数値) 7H、8H、9H(この数字を使いまわしたい)

・明細:テーブルA、テーブルB,テーブルC

☆☆やりたい連携としては、該当の月を選んだら、該当の営業時間のみ表示され、さらに該当のテーブルのみが表示される動きをしたいです。①11月,12月,1月,6月は営業時間が9HでテーブルCで登録する。②2月,3月,7月,9月,10月の営業時間が8HでテーブルBで登録する。③4月,5月,8月の営業時間が7HでテーブルAで登録する。

以下のようにちょっとは書いてみましたが、営業時間の(7、8、9)Hで自動反映設定できなくて、なにかアドバイスいただければ幸いです。どうぞよろしくお願い致します。

(function() {
“use strict”;

//レコードの追加、編集、詳細画面で適用する
var events = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.create.change.月’,
‘app.record.edit.show’,
‘app.record.edit.change.月’];

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

var record = event.record;
var 営業時間 = record[‘営業時間’].value;
var TableA = record[‘TableA’][‘value’];
var TableB = record[‘TableB’][‘value’];
var TableC = record[‘TableC’][‘value’];
var past = record.月.value;

if (past === ‘11月’ || past ===‘12月’ || past ===‘1月’ || past ===‘6月’ ) {
kintone.app.record.setFieldShown(‘営業時間’, true);
kintone.app.record.setFieldShown(‘TableA’, true);
kintone.app.record.setFieldShown(‘TableB’, false);
kintone.app.record.setFieldShown(‘TableC’, false);
record[‘TableB’][‘value’] =[] ;//非表示の時にvalueを空にする
record[‘TableC’][‘value’] =[] ;//非表示の時にvalueを空にする
} else if (past === ‘2月’ || past ===‘3月’ || past ===‘7月’ || past ===‘9月’ || past ===‘10月’ ) {
kintone.app.record.setFieldShown(‘営業時間’, true);
kintone.app.record.setFieldShown(‘TableA’, false);
kintone.app.record.setFieldShown(‘TableB’, true);
kintone.app.record.setFieldShown(‘TableC’, false);
record[‘TableA’][‘value’] =[] ;//非表示の時にvalueを空にする
record[‘TableC’][‘value’] =[] ;//非表示の時にvalueを空にする
} else if (past === ‘4月’ || past ===‘5月’ || past ===‘8月’ ) {
kintone.app.record.setFieldShown(‘営業時間’, true);
kintone.app.record.setFieldShown(‘TableA’, false);
kintone.app.record.setFieldShown(‘TableB’, false);
kintone.app.record.setFieldShown(‘TableC’, true);
record[‘TableA’][‘value’] =[] ;//非表示の時にvalueを空にする
record[‘TableB’][‘value’] =[] ;//非表示の時にvalueを空にする
}else {
kintone.app.record.setFieldShown(‘営業時間’, false);
kintone.app.record.setFieldShown(‘TableA’, false);
kintone.app.record.setFieldShown(‘TableB’, false);
kintone.app.record.setFieldShown(‘TableC’, false);
record[‘TableA’][‘value’] =[] ;//非表示の時にvalueを空にする
record[‘TableB’][‘value’] =[] ;//非表示の時にvalueを空にする
record[‘TableC’][‘value’] =[] ;//非表示の時にvalueを空にする
record.営業時間.value =“” ;//非表示の時にvalueを空にする
}

return event;

});
})();

サラさん

営業時間の(7、8、9)Hで自動反映設定は、数値を設定するだけです。

自動設定項目であれば、マニュアル入力できないようにしてはいかがですか?

あと show イベント内でテーブルの行数を 0 にしても、画面上は自動的に1行追加されます。

テーブルの行数を 0 にするには、submit イベント内でテーブルを設定します。

要件の詳細が分からないので、はたして TableA, TableB, TableC の構成が妥当なのか判断できませんが、

下記のようなコード例で対応出来ると思います。

 

(function() {
"use strict";

//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.create.change.月',
'app.record.edit.show',
'app.record.edit.change.月'
];

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

var record = event.record;
// var 営業時間 = record['営業時間'].value;
// var TableA = record['TableA']['value'];
// var TableB = record['TableB']['value'];
// var TableC = record['TableC']['value'];
record['営業時間'].disabled = true;
var past = record.月.value;

if (past === '11月' || past === '12月' || past === '1月' || past === '6月') {
kintone.app.record.setFieldShown('営業時間', true);
kintone.app.record.setFieldShown('TableA', true);
kintone.app.record.setFieldShown('TableB', false);
kintone.app.record.setFieldShown('TableC', false);
record.営業時間.value = 9;
} else if (past === '2月' || past === '3月' || past === '7月' || past === '9月' || past === '10月') {
kintone.app.record.setFieldShown('営業時間', true);
kintone.app.record.setFieldShown('TableA', false);
kintone.app.record.setFieldShown('TableB', true);
kintone.app.record.setFieldShown('TableC', false);
record.営業時間.value = 8;
} else if (past === '4月' || past === '5月' || past === '8月') {
kintone.app.record.setFieldShown('営業時間', true);
kintone.app.record.setFieldShown('TableA', false);
kintone.app.record.setFieldShown('TableB', false);
kintone.app.record.setFieldShown('TableC', true);
record.営業時間.value = 7;
} else {
kintone.app.record.setFieldShown('営業時間', false);
kintone.app.record.setFieldShown('TableA', false);
kintone.app.record.setFieldShown('TableB', false);
kintone.app.record.setFieldShown('TableC', false);
record.営業時間.value = ""; //非表示の時にvalueを空にする
}
return event;
});

kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function(event) {
var record = event.record;
var past = record.月.value;
if (past === '11月' || past === '12月' || past === '1月' || past === '6月') {
record['TableB']['value'] = []; //非表示の時にvalueを空にする
record['TableC']['value'] = []; //非表示の時にvalueを空にする
} else if (past === '2月' || past === '3月' || past === '7月' || past === '9月' || past === '10月') {
record['TableA']['value'] = []; //非表示の時にvalueを空にする
record['TableC']['value'] = []; //非表示の時にvalueを空にする
} else if (past === '4月' || past === '5月' || past === '8月') {
record['TableA']['value'] = []; //非表示の時にvalueを空にする
record['TableB']['value'] = []; //非表示の時にvalueを空にする
} else {
record['TableA']['value'] = []; //非表示の時にvalueを空にする
record['TableB']['value'] = []; //非表示の時にvalueを空にする
record['TableC']['value'] = []; //非表示の時にvalueを空にする
}
return event;
});

})();

rex0220 様

お世話になっております。教えて頂いたコードでできました。(わいわい~)

showとsubmitの区別も初めて分かりました。本当にありがとうございました。

これからもどうぞよろしくお願い致します。

試しに下記コードで実行してみてください。表示制御は外しています。

追加・編集画面上は、イベント処理でテーブルを0行にしても1行分表示されると思います。

これは、kintone の仕様だと思われます。もし編集画面で0行表示だと行追加もできません。

submit イベントでテーブルを0行にすると、レコード内のテーブルも0行になります。

 

(function() {
"use strict";

//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.create.change.月',
'app.record.edit.show',
'app.record.edit.change.月'
];

kintone.events.on(events, function(event) {
var record = event.record;
record['TableA']['value'] = []; //非表示の時にvalueを空にする
record['TableB']['value'] = []; //非表示の時にvalueを空にする
record['TableC']['value'] = []; //非表示の時にvalueを空にする
return event;
});

kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function(event) {
var record = event.record;
record['TableA']['value'] = []; //非表示の時にvalueを空にする
record['TableB']['value'] = []; //非表示の時にvalueを空にする
record['TableC']['value'] = []; //非表示の時にvalueを空にする
return event;
});

})();

rex0220 様

お世話になっております。分かりやすくご説明までして頂、誠にありがとうございます。

showとsubmitの区別も初めて分かりました。本当にありがとうございました。

これからもどうぞよろしくお願い致します。