w.t
(w.t)
1
何を実現したいのかを書きましょう
添付フィールドにファイルが入力されたら、その日付を、別の日付フィールドに自動入力したい。
発生した問題やエラーメッセージを具体的に書きましょう
添付フィールドは様々なイベント発火に対応しておらず、どのようにjavascriptをかけばよいか分からない。
実行したコードをコピー&ペーストしましょう
(function() {
‘use strict’;
// レコード追加・編集の保存前イベント
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
// 添付ファイルフィールドのフィールドコードを指定
var attachmentFieldCode = '添付ファイル'; // フィールドコードを変更してください
// 日付を入力するフィールドのフィールドコードを指定
var dateFieldCode = '日付'; // フィールドコードを変更してください
// 添付ファイルがある場合のみ処理を行う
if (record[attachmentFieldCode].value.length > 0) {
var today = new Date();
var todayString = today.getFullYear() + '-' +
('0' + (today.getMonth() + 1)).slice(-2) + '-' +
('0' + today.getDate()).slice(-2);
record[dateFieldCode].value = todayString;
}
return event;
});
})();
Maple
(もみじ)
2
submitで終わるイベントのときは添付ファイルのvalueが存在しないので
添付ファイルの有無は、クラス名で検索しないと判定できないです。
if (record[attachmentFieldCode].value.length > 0) {
を
if (document.getElementsByClassName('plupload_file_name').length > 0) {
と書き換えれば動くと思います。
「いいね!」 2
w.t
(w.t)
3
返信ありがとうございます。
これをやりたいのが、複数あるので、以下のコードに書き換えました。
(function() {
'use strict';
// レコード追加・編集の保存前イベント
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
// 添付ファイルフィールドと日付フィールドの対応を配列で管理
var fields = [
{ attachmentFieldCode: 'one', dateFieldCode: 'one_date' },
{ attachmentFieldCode: 'two', dateFieldCode: 'two_date' },
{ attachmentFieldCode: 'three', dateFieldCode: 'three_date' },
{ attachmentFieldCode: 'four', dateFieldCode: 'four_date' }
];
// 共通処理
var today = new Date();
var todayString = today.getFullYear() + '-' +
('0' + (today.getMonth() + 1)).slice(-2) + '-' +
('0' + today.getDate()).slice(-2);
fields.forEach(function(field) {
// 添付ファイルがある場合のみ日付を設定
if (document.getElementsByClassName('plupload_file_name').length > 0) {
record[field.dateFieldCode].value = todayString;
}
});
return event;
});
})();
このスクリプトを埋め込んだ後、レコードの保存が出来なくなってしまいました。
Maple
(もみじ)
4
document.getElementsByClassName(‘plupload_file_name’).length > 0 は
ページ全体のファイルの有無を見ているため、この条件を使い続けていると
複数の添付ファイルフィールドのファイルの有無を個別に判定できません。
下記のように forEach 内で、添付ファイルのフィールド名を持つ label や
control-gaia 要素を指定しないといけません。
(() => {
'use strict';
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event => {
const record = event.record;
// 添付ファイルのフィールド名と、日付のフィールドコードを紐付け
const dateFields = { one: 'one_date', two: 'two_date', three: 'three_date', four: 'four_date' };
// 今日の日付を'YYYY-MM-DD'の形式で取得
const today = new Date().toISOString().split('T')[0];
// ファイルがある添付ファイルフィールドと紐付く日付フィールドに今日を設定
document.querySelectorAll('.control-label-text-gaia').forEach(label => {
const key = label.textContent.trim();
if (dateFields[key] && label.closest('.control-gaia').querySelector('.plupload_file_name')) {
record[dateFields[key]].value = today;
}
});
return event;
});
})();
system
(system)
クローズされました:
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。