2022年11月18日金曜日

ファイル参照で選択されたファイル数をページの送信前に確認する

 表題の件の実装を考えてみました。

タイプとしてファイル参照...が設定されているページ・アイテムでは、設定により複数のファイルを選択することができます。設定にはファイル・タイプや最大ファイル・サイズの指定は可能ですが、選択できるファイル数の上限は設定できないようです。

例えば、選択できるファイル数の上限は2までといった制限を、サーバー側ではなくブラウザ側で行いたい、というのが要件です。


ファイル参照のページ・アイテムで複数のファイルが選択された場合、それぞれのファイル名は":"を挟んで連結されています。

そのため、ページ・アイテムの値が変更されたときに、値を":"で分割することにより選択されたファイル数の確認ができそうです。

動的アクションを作成し、以下のコードを記述しました。
let files = $v(this.triggeringElement).split(":");
if ( files.length > 2 ) {
    console.log(this);
    apex.message.showErrors([
        {
            type: "error",
            location: "inline",
            pageItem: this.triggeringElement.id,
            message: "ファイルが多い",
            unsafe: false
        }
    ]);
}


大体、想定通りに動作するようです。

作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/check-number-of-selected-files.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。