kintoneラジオボタン、チェックボックスを利用したカウント機能について質問です。
■現状
・kintoneラジオボタン、チェックボックスを利用して選択肢を選択した際、
グラフの「表」にて選択数の数値カウントが出来ない。
■行いたいこと
・kintoneラジオボタン、チェックボックスを利用して選択肢を選択した際、
グラフの「表」にて選択数の数値カウントを行いたい。
■案
kintoneラジオボタン、チェックボックスを利用して選択肢を選択した際、
選択した内容を別フィールドで数値としてカウントできれば、表で数値のカウントが可能。
■質問
案、が実現できるようなJavaScriptの記述を教えていただきたいです。
以上です。
アドバイスや似たようなTopicがございましたら教えていただけると助かります。
Yuriko.M さん
ちょっとおもしろそうなので、試作してみました。
{ from: ‘ラジオボタン’, to: ‘数値1’ }, の Form,to に、フィールドコードを指定してください。
チェックボックスは、複数選択できますので、とりあえず合計値にしています。
数値項目は、非表示にしましたが、表示したい場合は、処理を削除してください。
(function() {
"use strict";
var fields = [
{ from: 'ラジオボタン', to: '数値1' },
{ from: 'チェックボックス', to: '数値2' },
{ from: 'ドロップダウン', to: '数値3' },
];
kintone.events.on(["app.record.detail.show","app.record.edit.show","app.record.create.show"], function(event) {
fields.map(function(field) {
kintone.app.record.setFieldShown(field.to, false);
})
return event;
});
kintone.events.on(["app.record.edit.submit","app.record.create.submit","app.record.index.edit.submit"], function(event) {
var record = event.record;
fields.map(function(field) {
var value = record[field.from].value;
if (Array.isArray(value)) {
record[field.to].value = value.reduce(function(previous, current, index) {
return previous + (current ? Number(current) : 0);
}, 0);
}
else {
record[field.to].value = (value ? Number(value) : 0);
}
})
return event;
});
})();
rex0220さま
回答と試作ありがとうございます。確認させていただきます。
同じ質問で、ここにたどり着きました。
私は、チェックボックス内に、チェックされている数を知りたいので、次のようにしましたが、データの保存ができなくなりました。
FCheckがチェックボックスのフィール名、FPointがチェックされた数を登録する数値フィールドのフィールド名です。
Javascriptを理解しないまま、サンプル等のスクリプトを改造しています。
誤っている箇所をご教示頂ければ助かります。よろしくお願いいたします。
(function() {
"use strict";
var fields = [
{ from: 'FCheck', to: 'FPoint' },
];
kintone.events.on(["app.record.detail.show","app.record.edit.show","app.record.create.show"], function(event) {
fields.map(function(field) {
kintone.app.record.setFieldShown(field.to, false);
})
return event;
});
kintone.events.on(["app.record.edit.submit","app.record.create.submit","app.record.index.edit.submit"], function(event) {
var record = event.record;
fields.map(function(field) {
var value = record[field.from].value;
if (Array.isArray(value)) {
record[field.to].value = value.reduce(function(previous, current, index) {
return previous + (current ? Number(current) : 0);
}, 0);
}
else {
record[field.to].value = (value ? Number(value) : 0);
}
})
return event;
});
})();
Shoji Shinoda さん
チェックボックス内のカウントだけでしたら、下記のようにするとOKです。
こちらはチェック変更時に、カウントしています。
(function() {
"use strict";
var fields = [
{ from: 'FCheck', to: 'FPoint' },
{ from: 'FCheck2', to: 'FPoint2' },
];
kintone.events.on(["app.record.edit.show", "app.record.create.show"], function(event) {
var record = event.record;
fields.forEach(function(field) {
record[field.to].disabled = true;
})
return event;
});
var events = ["app.record.edit.show", "app.record.create.show"];
fields.forEach(function(field) {
events.push("app.record.edit.change." + field.from);
events.push("app.record.create.change." + field.from);
})
kintone.events.on(events, function(event) {
var record = event.record;
fields.forEach(function(field) {
record[field.to].value = record[field.from].value.length;
})
return event;
});
})();
ありがとうございます。
しかし、残念ながら、計算結果が FPoint にセットされません。
フィールド「FPoint」は数値フィールドです。計算フィールドではありませんが、問題ありませんか。
たぶん、フィールドコードが「FPoint」、「FCheck」になっていないと思われます。
フィールド名ではなく、フィールドコードを指定してください。
ありがとうございます。
チェックボックスのフィールドコードは、FCheck 。フィールド名は、「振返チェック」
数値をセットする数値フィールドは、FPoint 。フィールド名は、「振り返りPoint」
となっています。
他にチェックするべき箇所はどこでしょう。
こちらで作成したアプリでは動いていますので、あとはデバッグするしかないですね。
kintone カスタマイズ関連リンク集 デバッグ にあるリンクを参考に、デバッグしてみてください。
consoleを開いたエラーのテキストは次の様になっていました。
さっぱりわかりません。
2ERRです。
ひとつめ。
show#record=778&l.view=2174&l.q&l.sort_0=f2137&l.order_0=DESC:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at download.do:20
at download.do:332
ふたつめ
show.js:1154 Uncaught TypeError: Cannot set property ‘disabled’ of undefined
at download.do:11
at Array.forEach (<anonymous>)
at download.do:10
at show.js:241
at Array.forEach (<anonymous>)
at Array.forEach.d (show.js:1098)
at Uca (show.js:241)
at it (show.js:241)
at hC (show.js:391)
at G2 (show.js:976)
同じアプリで、もうひとつScriptがありますが、それが影響しますか?
そうですね、そちらでエラーになっていると思われます。
その Script を外して試してみてください。
そちらのスクリプトだけの時にはエラーは発生していません。
ふたつのものが、干渉してしまう可能性もあるのですね。
一度、そちらのスクリプトを削除して試してみます。
スクリプト削除して、今回の物だけにしましたが、解決しませんでした。
難しいです。
念のため、確認です。JavaScript テキストの文字コードは「utf-8」になっていますか?
JSEdit for kintone というプラグインを使用して書いています。
文字コードは「utf-8」 どうなっているかわかりません。
ダウンロードして、sakura エディタで確認したところ、sjisになっていました。
utf-8に変更して、アップロードしてみます。
JSEdit for kintone なら文字コードは、問題ないですね。
utf-8に変更して、アップロードしましたが、変化ありませんでした。
プラグインなども設定していますか? JavaScript を全部外して、エラーが出ますか?