ラジオボタンで選択した項目により、テーブル内の項目を必須項目に変更したい

ラジオボタンで、

①会食申請、②立替費申請   の 2つの選択肢があり、

①を選択した時は、

①で埋める項目を入れたグループを開いて、(他のグループは閉じて)その中にある、ドロップダウンや、日付、数値、文字列(複数行)の項目を必須にしたい。

②を選択した時は、

②で埋める項目を入れたグループを開いて、(他のグループは閉じて)その中にある、テーブルの1つ1つの項目を必須にしたい。(テーブル内の項目はプルダウン、文字列(1行)、日付、数値です)

https://developer.cybozu.io/hc/ja/community/posts/900001407623-%E3%83%A9%E3%82%B8%E3%82%AA%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E9%A0%85%E7%9B%AE%E3%81%AB%E3%82%88%E3%82%8A-%E3%83%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B-%E5%BF%85%E9%A0%88%E9%A0%85%E7%9B%AE%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E3%81%84

↑こちらの回答で、①を必須にすることはできたのですが、
②がテーブルの項目で、エラーになってしまいました。

テーブルでも可能な実装方法を教えていただきたいです。

 

グループの開閉は、

以下を真似して、実装できました。

https://developer.cybozu.io/hc/ja/articles/207377396-%E5%9B%9E%E7%AD%94%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E9%96%8B%E9%96%89%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B

 

よろしくお願いします

 

実装したソースは以下です。

(function() {
“use strict”;

//ラジオボタンの値によって開くグループフィールドを変更する操作
var eventsSubmit = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.edit.show’,
‘app.record.create.change.ラジオボタン’,
‘app.record.edit.change.ラジオボタン’];
// グループ1に属するフィールドのフィールドコード
var groupA = [
dropdown_hyodai,
‘日付_会食’,
‘人数’,
‘文字列_複数行_目的’,
‘会食合計’
],
groupB = [
dropdown_tatekae,
‘立替目的’,
‘立替_日付’,
‘立替_小計’
];

kintone.events.on(eventsSubmit, function(e) {
var record = e.record;
var radioButtonValue = record.ラジオボタン.value;

//グループフィールド開閉APIを用いて、まず全てのグループフィールドを閉じる
kintone.app.record.setFieldShown(‘group_1’, false);
kintone.app.record.setFieldShown(‘group_2’, false);
kintone.app.record.setFieldShown(‘テーブル’, false);

//ラジオボタンの値によって開くグループフィールドを切り替える
switch (radioButtonValue) {
case “会食・懇親会申請”:
kintone.app.record.setFieldShown(‘group_1’, true);
break;
case “立替諸経費申請”:
kintone.app.record.setFieldShown(‘group_2’, true);
kintone.app.record.setFieldShown(‘テーブル’, true);
break;
}
});

kintone.events.on([
‘app.record.create.submit’,
‘app.record.edit.submit’
], function(event){
if(event.record.ラジオボタン.value == ‘会食・懇親会申請’){
groupA.forEach(function(fieldCode){
event.record[fieldCode].error = event.record[fieldCode].value ? ‘’ : ‘必須項目です。’;
});
}else if(event.record.項目.value == ‘立替諸経費申請’){
groupB.forEach(function(fieldCode){
event.record[fieldCode].error = event.record[fieldCode].value ? ‘’ : ‘必須項目です。’;
});
}
return event;
});

})();

 

edit.js:124 Uncaught TypeError: Cannot read property ‘value’ of undefined

↑というエラーが出てしまいます。

2つ目の↓でのvalueです。

event.record[fieldCode].error = event.record[fieldCode].value ? ‘’ : ‘必須項目です。’;

 

福山さん

こんにちは。

 

テーブル内のフィールドを指定する場合は、単体のフィールドとは異なり、テーブルから指定する必要があります。

groupB.forEach(function(fieldCode){
record.テーブル.value.forEach(function(val) {

val.value[fieldCode].error = val.value[fieldCode].value ? ‘’ : ‘必須項目です。’;

});

});

 

テーブル操作については、下記も参照ください。

https://developer.cybozu.io/hc/ja/articles/360022502911-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AE%E5%9F%BA%E6%9C%AC-%E8%A1%8C%E3%81%AE%E8%BF%BD%E5%8A%A0-%E6%9B%B4%E6%96%B0-%E5%89%8A%E9%99%A4-

koichi様

ありがとうございます!詳細に教えていただき、とても助かりました!

以下のソースでうまく動きました。

groupB.forEach(function(fieldCode){
  event.record.テーブル.value.forEach(function(val) {
      val.value[fieldCode].error = val.value[fieldCode].value ? ‘’ : ‘必須項目です。’;
  });
});

福山様

eventが抜けていましたね。

解決されてよかったです。