テーブル内の数値を科目ごとに集計し、フィールドに入れるJavaScript
これは2017年にcybozu developer networkのフォーラムにて、kintone用プラグインの販売で有名なrex0220様が私の質問に対して書いてくださったJavaScriptです。質問当日の夕方にサラッと下記のJavaScriptを貼り付けて下さった早さにビックリ!そして感謝感謝です。
5年経ったいまでも私が作った「旅費計算アプリ」内で稼働しています。汎用性もかなり高いと思いますので紹介させていただきます。
実現したかったことは下記の画像の通り。
テーブル内の金額を、科目ごとに集計したいというものです。
なんとかスペースフィールドにリスト表示することはできたのですが、このままでは合計値の二次利用ができません。どうしてもこの合計値を数値フィールドに入れたいのです。
このようになりました。すごい!!
以下がコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
(function() { "use strict"; var fields = ['科目', '金額', 'Table']; var kamokuInfos = { '切符代': '切符代合計', '宿泊費': '宿泊費合計', '車関係': '車関係合計', } var events = ["app.record.edit.show", "app.record.create.show"]; fields.forEach(function(field) { events.push("app.record.edit.change." + field); events.push("app.record.create.change." + field); }) var totalFields = []; Object.keys(kamokuInfos).forEach(function(kamoku) { var tcode = kamokuInfos[kamoku]; if (totalFields.indexOf(tcode) < 0) { totalFields.push(tcode); } }); kintone.events.on(events, function(event) { var record = event.record; totalFields.forEach(function(tcode) { record[tcode].value = 0; record[tcode].disabled = true; }); var subTable = record['Table'].value; subTable.forEach(function(rows) { var kamoku = rows.value['科目'].value; if (Object.keys(kamokuInfos).indexOf(kamoku) >= 0) { var tcode = kamokuInfos[kamoku]; if (rows.value['金額'].value) { record[tcode].value += Number(rows.value['金額'].value); } } }); return event; }); })(); |
科目(=フィールドコード名)は3つ設定されていますが、増やす事ができます。
他にも色々応用できそうで便利ですね!