mika
1
添付ファイルフィールドが、複数あり(最終的には20個ほど)添付ファイルが登録されているフィールドの個数を取得したくて下記のフィールドをテストで作成しました。
有効添付数(数値フィールド)
添付頁資料PDF00a,添付頁資料PDF00b,添付頁資料PDF01(添付ファイルフィールド)
添付ファイルを登録しても、総数0となります。
修正箇所を教えてください。
発生した問題やエラーメッセージを具体的に書きましょう
実行したコードをコピー&ペーストしましょう
コードを(function() {‘use strict’;
// 【設定】テスト中の添付ファイルフィールドの「フィールドコード」を正確に並べますconst TARGET_FIELDS = [‘添付頁資料PDF00a’,‘添付頁資料PDF00b’,‘添付頁資料PDF01’];
const COUNT_FIELD = ‘有効添付数’;
kintone.events.on([‘app.record.create.submit.success’, ‘app.record.edit.submit.success’], function (event) {let record = event.record;let attachedFieldCount = 0;
// 各フィールドコードをもとに、画面上の要素を1つずつ直接狙い撃ちで調べます
TARGET_FIELDS.forEach(function(fieldCode) {
// kintoneの入力画面における、各フィールドの固有クラス(.field-フィールドコード)を指定
const fieldClassName = 'field-' + fieldCode;
const fieldElements = document.getElementsByClassName(fieldClassName);
if (fieldElements && fieldElements.length > 0) {
// そのフィールドの枠の中に、ユーザー様が成功した「plupload_file_name」が1つ以上あるか確認
const files = fieldElements[0].getElementsByClassName("plupload_file_name");
if (files && files.length > 0) {
console.log('【ファイル発見】フィールドコード:', fieldCode);
attachedFieldCount++;
}
} else {
console.log('【警告】画面上にこのフィールドのクラスが見つかりません:', fieldClassName);
}
});
console.log('ファイルが登録されているフィールドの総数:', attachedFieldCount);
// 数値フィールドに合計数をセット
if (record[COUNT_FIELD]) {
record[COUNT_FIELD].value = attachedFieldCount;
}
return event;
});
// 画面表示時の非表示処理(テストのために一旦コメントアウトしています)/*kintone.events.on([‘app.record.detail.show’, ‘app.record.create.show’, ‘app.record.edit.show’], function(event) {kintone.app.record.setFieldShown(COUNT_FIELD, false);return event;});*/
})();ここに入力または貼り付け
こんにちは。アスノートの松田です。
ちょっと前の記事になりますが、以下の記事の考え方の応用でいけると思います。参考になれば幸いです。
ポイントとしては、
- submitイベントでは添付ファイルフィールドの情報が取れない
- successイベントでDOMから取得可能(非推奨ではあるが)
- しかし、successイベントで、eventオブジェクトによるフィールド値更新はできない
mura
3
(松田さんからのご指摘のとおり、successイベントでフィールドの値更新はできませんね、
どのイベントで何ができて何ができない、などはリファレンスにまとまっておりますのでご参考までに 
mika
4
松田様
回答ありがとうございます。
そちらの記事を参照していたのですが、
なのですね。
Geminiに頼りつつ、下記の内容で一覧に表示させることに成功しました。
(function() {
‘use strict’;
const COUNT_FIELD = ‘有効添付数’;
kintone.events.on([‘app.record.create.submit’, ‘app.record.edit.submit’], function (event) {
let record = event.record;
// 1. ユーザー様が成功した、画面内のすべての「ファイル名要素」を掴む
var fileElements = document.getElementsByClassName("plupload_file_name");
// 2. ファイルが所属している「添付ファイルフィールドの枠」を特定するためのセット(重複を排除する箱)を用意
var attachedFields = new Set();
for (var i = 0; i < fileElements.length; i++) {
// 核心:ファイル名要素から、kintoneの「添付ファイルフィールド枠」の本体(.kintone-app-record-attachments)まで上方向に遡る
var parentField = fileElements[i].closest('.kintone-app-record-attachments, .field-attachments, td, div[class*="field-"]');
if (parentField) {
// 見つかった親要素(フィールド枠)をセットに放り込む(同じ枠に2個ファイルがあっても、セットなので1つにまとまります)
attachedFields.add(parentField);
}
}
// 3. セットに溜まった「ファイルが入っていたフィールドの数」が、求めたい総数です
var attachedFieldCount = attachedFields.size;
console.log('ファイルが登録されているフィールドの総数:', attachedFieldCount);
// 数値フィールドに合計数をセット
if (record[COUNT_FIELD]) {
record[COUNT_FIELD].value = attachedFieldCount;
}
return event;
});
// 画面を開いた時の非表示処理
kintone.events.on([‘app.record.detail.show’, ‘app.record.create.show’, ‘app.record.edit.show’], function(event) {
kintone.app.record.setFieldShown(COUNT_FIELD, false);
return event;
});
})();