選択によって、添付ファイルフィールドを表示/非表示にする。表示の場合は、添付を必ずさせたい。

背景・実現したいこと

初心者で、試行錯誤で挑戦しています。

2つ以上の機能を実現する方法や、省略記述も良く分かっていません。

 

①:‘radio1’ が ‘導入’ の時、グループを開き、添付ファイルの ‘契約書’ 、‘検収書’ を表示する

②:‘radio1’ が ‘導入’ の時、添付ファイルの ‘契約書’ 、‘検収書’ を必須にしたい。

エラー情報

 ①はできた。

②は、検収書に添付ファイルを登録しても、'検収書を登録してください’メッセージが出る。

'契約書を登録してください’は表示されない。

利用したソースコード

/*
* 回答の条件によって別フィールドの表示/非表示を切り替えるサンプルプログラム
* Copyright (c) 2014 Cybozu
*
* Licensed under the MIT License
*/
(function() {
“use strict”;

//レコードの追加、編集、詳細画面で適用する
var events = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.create.change.radio1’,
‘app.record.edit.show’,
‘app.record.edit.change.radio1’];

kintone.events.on(events, function(event) {

var record = event.record;

//導入目的で「導入」が選択された場合は「検収書」、「契約書」フィールドを表示する
if (record[‘radio1’][‘value’] === ‘導入’) {
kintone.app.record.setGroupFieldOpen(‘group1’, true);
kintone.app.record.setFieldShown(‘契約書’, true);
kintone.app.record.setFieldShown(‘検収書’, true);
}else {
kintone.app.record.setGroupFieldOpen(‘group1’, false);
kintone.app.record.setFieldShown(‘契約書’, false);
kintone.app.record.setFieldShown(‘検収書’, false);
}
});
})();

(function() {
‘use strict’;
//レコードの保存で適用する
var events = [‘app.record.edit.submit’,
‘app.record.create.submit’];

kintone.events.on(events, function(event) {
var record = event.record
if (record[‘radio1’][‘value’] === ‘導入’&&record[‘契約書’][‘value’].length === 0) {
event.error = ‘契約書を登録してください’;
}
return event;

});
})();

(function() {
var events = [‘app.record.edit.submit’,
‘app.record.create.submit’];

kintone.events.on(events, function(event) {
var record = event.record
if (record[‘radio1’][‘value’] === ‘導入’&&record[‘検収書’][‘value’].length === 0) {
event.error = ‘検収書を登録してください’;
}
return event;

});
})();

 

渡辺 勝也 さん

こんにちは。mofuku です。

レコード追加画面の保存実行前イベントレコード編集画面の保存実行前イベントでは
添付ファイルフィールドの情報を取得することができない仕様になっています(それぞれのリンクの制限事項に記載がありました)。

過去のコミュニティの質問で似た内容があり、解決策として DOM 操作を行う方法で対処できそうでした。
https://developer.cybozu.io/hc/ja/community/posts/360018052623/comments/360000784603

ただ、この DOM 操作は kintone のアップデートで DOM の要素名が変更される可能性があり、
アップデートがあった場合にその都度修正を行う必要があるカスタマイズです。

DOMの要素名(クラス名など)については、kintoneアップデートで変更される可能性も無いとは言えないので、
そのようなアップデートがされた場合は、修正が必要になるかと思います。
(developer network にも kintone JavaScript コーディングガイドライン にDOM 操作についての記載があります。)

ありがとうございました。仕様でできないんですね。

 

DOMでも、うまく取れませんでした。

 

複数の添付ファイルの有無判定:https://developer.cybozu.io/hc/ja/community/posts/360054731191

上記にて、ひとまず、目的は達成できました。

しかし、フィールドを名前で指定できません。

下記のif文で、inputFiles[0]は上から最初の添付書類フィールドを意味していると思います。

どんな風に変えたら、指定できるのか、教えていただけると助かります。

 

let inputFiles = document.querySelectorAll(‘.input-file-cybozu’);

if (record[‘radio1’][‘value’] === ‘導入’ && inputFiles.length >= 1 && inputFiles[0].querySelectorAll(‘.plupload_file_name’).length === 0)