お世話になっております。
現在テーブル内のドロップダウンの値によってテーブル内の数値を自動計算してテーブル外に表示させるJSを使用しております。
同アプリ内の複数のテーブルに同じJSを使いたいが二つ目以降JSを読み込むと動作しなくなってしまい、対策方法がわからない状態です。プラグイン化も考えたのですが当方プログラム初心者の為、難易度が高く作れておりません。
何か良い対策方法はないでしょうか。
(フィールドコード)
○○入金状況→判定元のドロップダウン
○○入金金額→計算したい数値フィールド
○○ビルテナント→テーブル
○○賃料・管理費・その他合計→計算結果を表示させている数値フィールド
(使用コード)
//○○にはビル名
(function() {
"use strict";
var fields = ['○○入金状況', '○○入金金額', '○○ビルテナント'];
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['○○ビルテナント'].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;
});
})();
2つ目のJavaScriptファイルもご提示いただけますか?どこかで1つ目のスクリプトと同じフィールドコードを使ってしまっているかもしれません。
mls-hashimoto様
こんにちは、お世話になっております。
下記記載が二つ目のJsファイルになります。
○○には一つ目のJSファイルとは別の単語が入っています。
企業秘密の為、伏字にさせていただきます。
コードのベースは変えずにフィールドコードのみを変更して運用しております。
(function() {
"use strict";
var fields = ['○○入金状況', '○○入金金額', '○○テナント'];
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['○○テナント'].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;
});
})();
mls-hashimoto様
追加でお一つご質問させていただきます。
下記のコードも使用しているのですが、読み込めないことと何か関係しているのでしょうか。
サブテーブルをグループ内に作成してあるスペースの中に入れるというものです。
他にJSの使用はありません。プラグインの使用は JSEdit for kintone のみです。
宜しくお願い致します。
(コード)
(function () {
"use strict";
kintone.events.on("app.record.detail.show", function (event) {
const subtable = kintone.app.record.getFieldElement("○○ビルテナント"); // ()の中にサブテーブルフィールドコードを入れる
kintone.app.record.getSpaceElement("space").append(subtable); // getSpaceElement の()の中にスペースフィールドコードを入れる
});
})();
nekoko さま
別で使用されているコードについては、関係ないと思われます。
「○○」部分をAとBにして動かしてみましたが、問題なく動作しました。
コンソールでイベントが発生しているかどうか、それぞれの値がどうなっているかから見ていきましょう。以下で①と②はどうなるか教えて頂いて問題ありませんか?
(function() {
"use strict";
var fields = ['○○入金状況', '○○入金金額', '○○テナント'];
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;
console.log(event.type) // ①
totalFields.forEach(function(tcode) {
record[tcode].value = 0;
record[tcode].disabled = true;
});
var subTable = record['○○テナント'].value;
subTable.forEach(function(rows) {
var kamoku = rows.value['○○入金状況'].value;
console.log(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;
});
})();
また、JSEdit for kintoneのバージョンも教えて頂けますか?(一部バージョンで複数のJSファイルを登録する際の不具合がありました)
mls-hashimoto様
お世話になっております。
<別で使用されているコードについては、関係ないと思われます。
ご確認ありがとうございます。
<「○○」部分をAとBにして動かしてみましたが、問題なく動作しました。
検証ありがとうございます。コードには問題無さそうですね。
<コンソールでイベントが発生しているかどうか、それぞれの値がどうなっているかから見ていきましょう。以下で①と②はどうなるか教えて頂いて問題ありませんか?
①、②共にコンソールに undefined と最後に表示されるだけです。
<また、JSEdit for kintoneのバージョンも教えて頂けますか?(一部バージョンで複数のJSファイルを登録する際の不具合がありました)
現在使用しているバージョンは4です。
そのような不具合が起きることがあるのですね…
引き続きのご教授宜しくお願い致します。
nekoko さま
2つ分のスクリプトを一つにまとめました。これだけで動くか検証してみて下さい(4~19行目のフィールドコードと値だけ必要に応じて変更して下さい)。
(function() {
'use strict';
let tableSumCalcs = [
{
table: '○○ビルテナント',
paymentField: '○○入金金額',
statusField: '○○入金状況',
statusValue: '済',
sumField: '○○賃料・管理費・その他合計'
},
{
table: '○○テナント',
paymentField: '○○入金金額',
statusField: '○○入金状況',
statusValue: '済',
sumField: '○○賃料・管理費・その他合計'
}
];
tableSumCalcs.forEach((tableSum) => {
let events = ['app.record.create.show', 'app.record.edit.show'];
events.push('app.record.create.change.' + tableSum.table, 'app.record.edit.change.' + tableSum.table);
events.push('app.record.create.change.' + tableSum.paymentField, 'app.record.edit.change.' + tableSum.paymentField);
events.push('app.record.create.change.' + tableSum.statusField, 'app.record.edit.change.' + tableSum.statusField);
kintone.events.on(events, (event) => {
let record = event.record;
record[tableSum.sumField].value = record[tableSum.table].value.filter((row) => {
return row.value[tableSum.statusField].value == tableSum.statusValue && row.value[tableSum.paymentField].value;
}).reduce((acc, row) => {
return acc + Number(row.value[tableSum.paymentField].value);
}, 0);
record[tableSum.sumField].disabled = true;
return event;
});
});
})();
ls-hashimoto様
お世話になっております。
コードのご提案ありがとうございます。
動くか検証したところ、思っていた通りに動きました。このままご提案して頂いたコードを使用していこうと思います。
作業の傍らで今回の原因を見つけてみようと思います。
コードが動かないと先に進むことが出来ない状態でしたのでとても助かりました。
ありがとうございました。