新規投稿
フォローする

【再】テーブル内のドロップダウンリストでグループを開閉をする方法

以前、タイトルのような動作ができないかと思い質問させていただき(https://developer.cybozu.io/hc/ja/community/posts/360042329711-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%86%85%E3%81%AE%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AA%E3%82%B9%E3%83%88%E3%81%A7%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E9%96%8B%E9%96%89%E3%82%92%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 )、その後以下のコードでなんとか実装できるようになりましたが、テーブルを追加して2段目のフィールドを変更した時にはグループ開閉の反応しません。

追加したときのフィールドで変更したときにも反応するようにするにはどのようなコードを追加するとよいかご存知の方いらっしゃればご教示いただければ助かります。

勉強中の身でまだ良くコードがわかっておらず恐縮ですがよろしくお願いします。

 

ーーー

■テーブルのフィールド名:申請内容

■ドロップダウンリストのフィールド名:備品

■ドロップダウンリスト内の取得する値:カード▼

■グループのフィールド名:カード

という仮定で書いています。

ーーー

(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.備品']; // 編集で備品フィールドを変更したとき(フィールドコードを指定します。)
kintone.events.on(eventsSubmit, function(e) {


// 「e.record」を「record」として使えるようにします。
var record = e.record;
var 申請内容 = e.record.申請内容.value;
var 備品 = 申請内容[0].value['備品'].value;

//グループフィールド開閉APIを用いて、まず「カード」のグループフィールドを消す
kintone.app.record.setFieldShown('カード', false); 

switch(備品){
case 'カード▼':
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
break;
}

});
})();

0

10件のコメント

Avatar
FM

サブテーブルの0~n行ある「備品」で選択された値に対応するグループを全て開いて表示したいということで合っていますでしょうか?

例)
サブテーブル1行目の「備品」:カード
サブテーブル2行目の「備品」:ABC
→「カード」、「ABC」グループを開く

上記の場合、表示されているサブテーブルの全行を見るように書き換える必要があります。
ytさんが書かれたコードの「var 備品 = 申請内容[0].value['備品'].value;」は、申請内容サブテーブルの1行目のみを指定しています。
(javascriptでカスタマイズする際、サブテーブルの行は1行目が0となります)

切り貼りしただけで動作確認はしてませんので、うまく動かなかったら開発者ツールでエラーログを確認してください。

// 「e.record」を「record」として使えるようにします。
var record = e.record;
var 申請内容 = e.record.申請内容.value;
var 備品 = 申請内容[0].value['備品'].value;

//グループフィールド開閉APIを用いて、まず「カード」のグループフィールドを消す
kintone.app.record.setFieldShown('カード', false); 

switch(備品){
case 'カード▼':
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
break;
}

// 上記部分を以下に書き換える

// 「e.record」を「record」として使えるようにします。
var record = e.record;
var 申請内容 = e.record.申請内容.value;
for(var i in 申請内容){
var 備品 = 申請内容[i].value['備品'].value;
//グループフィールド開閉APIを用いて、まず「カード」のグループフィールドを消す
kintone.app.record.setFieldShown('カード', false); 

switch(備品){
case 'カード▼':
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
break;
}
}
0
Avatar
yt

FMさま

さっそくご教示いただき有難うございました!表示したい内容はご認識の通りです。「0」が1行目のみとの事で追加の仕方、大変勉強になりました。

早速いただいたコードで無事に2、3行目も以降も選択すると反応するようになったのですが、一番下のテーブルで「カード▼」を選ばないと表示されず、3行あるうちの1、2行目のプルダウンで「カード▼」を選ぶと表示が消えてしまいました・・※恐らく最終行で「カード▼」を選ばないと反応しないような感じでした・・私の追加が悪かったのかもしれません。

こちら回避策などあったりするでしょうか?伺ってばかりで恐れ入りますが、もしお分かりでしたらご教示いただければ幸いです。

 

 

0
Avatar
FM

kintone.app.record.setFieldShown('カード', false);  を、case 'カード▼': 内の先頭に入れてみてください。

0
Avatar
yt

FMさま

丁寧にご教示ありがとうございました!以下のように実装してみましたがうまくいかず、

認識まちがっているような気がして、度々恐縮ですが確認させてください。

===

(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.備品']; // 編集で備品フィールドを変更したとき
kintone.events.on(eventsSubmit, function(e) {
// 「e.record」を「record」として使えるようにします。
var record = e.record;
var 申請内容 = e.record.申請内容.value;
for(var i in 申請内容){
var 備品 = 申請内容[i].value['備品'].value;

switch(備品){
case 'カード▼':

kintone.app.record.setFieldShown('カード', false); // フィールド「カード」を消します。
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
break;
}
}
});
})();

0
Avatar
TK

こんにちは。

横やりですみませんが、こちらはどうでしょうか?

    kintone.events.on("app.record.create.change.備品", e => {

// 「e.record」を「record」として使えるようにします。
var record = e.record;
var 申請内容 = e.record.申請内容.value;
var count = 0;
for(var i in 申請内容){
var 備品 = 申請内容[i].value['備品'].value;
//グループフィールド開閉APIを用いて、まず「カード」のグループフィールドを消す
kintone.app.record.setFieldShown('カード', false);

switch(備品){
case 'カード▼':
count += 1;
break;
}
}
if(count > 0) {
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
}
});
0
Avatar
FM

ytさん

書かれたコードはこちらの認識の通りですが、どううまく行かないのかがちょっと分からないので、
うまくいかない画面を開いた状態で、開発者ツールを起動してどのようなエラーが出ているか見て頂けませんか?

動かない?そんな時はデバッグをしてみよう!入門編」 に詳しく見方が書いてあります。

0
Avatar
yt

TKさま

 

こんにちは。新たなコードをご教示いただきありがとうございます!!そのまま実装したところ、イメージに近いもの出来ました!

こちら、新規作成時にはグループが閲覧できてしまう状態なのですが、これを新規作成時や編集時でもカードのグループが選んでないと閲覧できないようにする事は可能でしょうか?

単純に以下コードに新規作成時のコード追加すると動かなくなってしまうので、もしよい方法がございましたら併せて伺えれば幸いです。

kintone.events.on("app.record.create.show","app.record.create.change.備品", e => {

 

よろしくお願いいたします。

0
Avatar
TK

 

こういう感じですかね?

このまま全部コピーして貼り付けてみてください。

(function() {
"use strict";

var sampleFunc = function(e){
var record = e.record;
var 申請内容 = e.record.申請内容.value;
var count = 0;
kintone.app.record.setFieldShown('カード', false);
for(var i in 申請内容) {
var 備品 = 申請内容[i].value['備品'].value;
switch(備品) {
case 'カード▼':
count += 1;
break;
}
}
if(count > 0) {
kintone.app.record.setFieldShown('カード', true); // フィールド「カード」を開きます。
}
return e;
}
kintone.events.on(["app.record.create.show", "app.record.edit.show", "app.record.detail.show"], sampleFunc);
kintone.events.on(["app.record.create.change.備品", "app.record.edit.change.備品"], sampleFunc);
})();
0
Avatar
yt

FMさま

お世話になります。コード入力の認識が間違ってなく安心しました。また、エラー時の確認方法についてもURL大変助かりました。ありがとうございます。

開発ツールで確認したのですが、表立ったエラーは出ておらず・・。コードの順番を変えただけでグループが消えず動かないので、原因はコードの順番なのかな?といった感じです。※フィールドコードの入力間違いかとも思い確認しましたが、順番変えれば動きます。

もしくは私の見落としがあるかもしれませんで。ほかにエラーを確認する方法などありますでしょうか・・。ご面倒おかけし恐縮です。

0
Avatar
yt

>TKさま

さっそくご確認ご教示ありがとうございます。まずはそのまま実装し無事にイメージのものが出来ました!!

他の環境でも応用できるよういただいたコードで勉強させていただこうと思います。

お忙しい中ありがとうございました。

 

>FMさま

お忙しい中恐れ入ります。無事にイメージした実装ができました!

いずれにしても、まだまだ勉強不足で自分の力では原因解明までに至らずでしたが

ご教示いただいたコードをもとに再び別の環境でも運用できるよう勉強させていただこうと思います。

お忙しい中ありがとうございました。

1
サインインしてコメントを残してください。