ラジオボタン、チェックボックスを利用して数値カウントする

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 を全部外して、エラーが出ますか?