サブテーブルn2行目以降の条件分岐表示について

背景・実現したいこと

テーブル内の非表示にしている一部のフィールドを選択したチェックボックスの値によって

表示させたいが、行を追加した2行目以降では反映されない。

1行目は非表示で2行目以降に表示させたい場合など対応できるよう実装したい。

 

エラー情報 (開発者ツールのコンソール)

なし

 

利用したソースコード

 

kintone.events.on(events, function(event) {
    var record =event.record;
    var checkboxValue = record[‘receipts’][‘value’][‘0’][‘value’][‘その他’][‘value’];
    var setFieldShown =  kintone.app.record.setFieldShown
          
          setFieldShown(‘再洗浄’, false);
          setFieldShown(‘返却先’, false);
          setFieldShown(‘詳細’, false);
          setFieldShown(‘残留サイズ背番号’, false);
          setFieldShown(‘残留サイズ名’, false);
          setFieldShown(‘残留数量’, false);
          setFieldShown(‘残留箇所詳細’, false); 

          for (var i = 0; i <= 10 ; i++) {
          if ( checkboxValue[i] === ‘再洗浄’) {
       
             setFieldShown(‘再洗浄’, true);
             setFieldShown(‘返却先’, true);
             setFieldShown(‘詳細’, true);
          }
          if (checkboxValue[i] === ‘残留’) {
       
            setFieldShown(‘残留サイズ背番号’, true);
            setFieldShown(‘残留サイズ名’, true);
            setFieldShown(‘残留数量’, true);
            setFieldShown(‘残留数量’, true);
          }
            
        }
        return event;
             
});
})();

   var checkboxValue = record['receipts']['value']['0']['value']['その他']['value'];

0番目(1行目)のその他のチェックボックスの値を見ているようです。

テーブルのすべての行で確認する必要があります。

   for (var i = 0; i <= 10 ; i++) {

10という数字はテーブルの行数は、最大でも11行以下だろうということでしょうか?

テーブルの行数を取得するのが良さそうです。

forの次の行で

console.log(checkboxValue[i])

を入れてみて何が表示されるか確認されると理解が深まると思います。

 

haradaさん

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

1)全ての行を確認する方法は

var checkboxValue = record['receipts']['value'][i]['value']['その他']['value'];

でよろしいでしょうか。

2)テーブルの行数取得ですが、

for (i = 0 ; i <= receipts.length; i++) {

 で試していますがうまくいきません。

素人質問で申し訳ありません。ご教授お願い致します。

 

For文で包まれていれば問題ないように思えます。

console.log(receipts.length)

でとれませんか?

もしかしたら、for文の使いこなしが曖昧なのかもしれません。

ご参考です。

はじめようJavaScript第16回 kintone JavaScriptカスタマイズのプログラム実例を学ぼう④(テーブル操作) – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/360027244231

haradaさん

何度も申し訳ないです。

上記試してみましたが、うまくいきません。

根本的にコードの書き方の問題でしょうか。

 

(function () {
  “use strict”;
  var events = [
    ‘app.record.detail.show’,
    ‘app.record.create.show’,
    ‘app.record.edit.show’,
    ‘app.record.create.change.その他’,
    ‘app.record.create.change.receipts’,
    ‘app.record.edit.change.その他’,
    ‘app.record.edit.change.receipts’
  ];

  kintone.events.on(events, function (event) {
    var record = event.record;
    var setFieldShown = kintone.app.record.setFieldShown

    setFieldShown(‘再洗浄’, false);
    setFieldShown(‘返却先’, false);
    setFieldShown(‘詳細’, false);
    setFieldShown(‘残留サイズ背番号’, false);
    setFieldShown(‘残留サイズ名’, false);
    setFieldShown(‘残留数量’, false);
    setFieldShown(‘残留箇所詳細’, false);

    for (i = 0; i <= receipts.length; i++) {
      console.log(receipts.length)
      var checkboxValue = record[‘receipts’][‘value’][i][‘value’][‘その他’][‘value’];
     
      if (checkboxValue[i] === ‘再洗浄’) {
        setFieldShown(‘再洗浄’, true);
        setFieldShown(‘返却先’, true);
        setFieldShown(‘詳細’, true);
      }

      if (checkboxValue[i] === ‘残留’) {
        setFieldShown(‘残留サイズ背番号’, true);
        setFieldShown(‘残留サイズ名’, true);
        setFieldShown(‘残留数量’, true);
        setFieldShown(‘残留数量’, true);
      }

    }
    return event;

  });
})();

 

      var checkboxValue = record['receipts']['value'][i]['value']['その他']['value'];
     
      if (checkboxValue[i] === '再洗浄') {
        setFieldShown('再洗浄', true);
        setFieldShown('返却先', true);
        setFieldShown('詳細', true);
      }

      if (checkboxValue[i] === '再洗浄') {

の前に

console.log(i)

console.log(checkboxValue[i])

でコンソールになにが表示されますでしょうか

i は、なにを指していますでしょうか?テーブルの行数を取得して、

iが0から繰り上がっているのは今プログラムがアクセスしている行数番号(0始まり)なのですが、checkboxValue[i]を取得して、再洗浄という文字と比較しようとしているため意図した動作にならないのではないようです。

上記エラーが出てしまいます。

for (i = 0; i <= receipts.length; i++) {
      var checkboxValue = record['receipts']['value'][i]['value']['その他']['value'];
     
      if (checkboxValue[i] === '再洗浄') {
        console.log(i)
        console.log(checkboxValue[i])

 

for (i = 0; i <= receipts.length; i++) {

for (var i = 0; i <= receipts.length; i++) {

にしたらこのエラーは消えます。が、次のエラーがでます。

'use strict’があるため、変数を宣言なしに使うことができません。

確かに続けてエラー出ました。

2行目以降、選択分岐でサブテーブル内のフィールド表示・非表示の実装は可能でしょうか。

 

 

フィールドの表示/非表示 – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/360015513211-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E8%A1%A8%E7%A4%BA-%E9%9D%9E%E8%A1%A8%E7%A4%BA
「テーブル内のすべてのフィールドを非表示にする場合、引数 fieldCode にテーブルのフィールドコードを指定することで、テーブル全体を非表示にできます」

とありますので、テーブルの行単位の制御はできないようですね。

 

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。