2022年5月20日金曜日

APEXのJavaScriptライブラリに修正を加える

 日付ピッカーで閏日の入力ができないという不具合がありました。APEX 21.2のKnown Issuesにリストされていて(34151906)、APEX 21.2.7のPSEに修正が含まれています。

https://www.oracle.com/tools/downloads/apex-downloads/apex-212-known-issues.html

オンプレであればPSEを適用するのが対策になりますが、Autonomous Databaseではオラクルがパッチを当てるまで待つ必要があります。また、無料でAPEXを利用している場合はPSEを入手できません。

閏日の入力ができないというのは、影響も大きいので少し対策を考えてみました。だだし、サポートされない対処方法です

コード上の修正点は軽微なもので、以下で参照できるdate.jsに含まれるファンクションapex.date.parseに不具合があります。

https://ADBのID-インスタンス名.adb.リージョン名.oraclecloudapps.com/i/21.2.4/libraries/apex/date.js

ここで、2022年を引数に与えてlocalDateの初期化をしていますが、2022年は閏年ではないので、2月29日がありません。これを2020年に変更する必要があります。

let localDate = new Date( 2022, 0, 1 ),

の部分を2020に変更します。

let localDate = new Date( 2020, 0, 1 ),

ファンクションapex.date.parseが含まれるファイルdate.jsは、ソースコードの参照ができるようにAPEXのリリースやパッチに含まれていますが、アプリケーションがロードするのは、この他のJavaScriptのファイルをまとめてミニファイしたdesktop_all.min.jsになります。

このファイルをダウンロードします。

不具合のある日付ピッカーを含んだページを表示します。


ブラウザの機能を使って、表示されているページのソースを表示します。ソース中のdesktop_all.min.jsへのリンクをクリックし、ファイルを手元にダウンロードします。


ダウンロードしたファイルをエディタで開き、2022の部分を2020に変更します。


変更したファイルを、共有コンポーネント静的アプリケーション・ファイルにアップロードします。


静的アプリケーション・ファイルの一覧が表示されます。ファイルの作成をクリックします。


修正したdesktop_all.min.jsを選択し、作成をクリックします。


ファイルがアップロードされます。参照として表示されているパスをクリップボードにコピーします。変更の保存を実行します。一覧に戻るには取消をクリックします。


静的アプリケーション・ファイルとしてdesktop_all.min.jsが保存されていることを確認します。


日付ピッカーを含むページをページ・デザイナで開き、ページ・プロパティのJavaScriptファイルURLとして、コピーした参照を設定します。


アプリケーションを実行し、動作を確認します。少なくとも、日付ピッカーについては閏日の入力ができるようになります。


日付ピッカー以外の要素に与える影響が不明なため、恒久的な修正とはいえません。適用する範囲は最低限のページに限定するのが良いでしょう。サポートされない方法ですが、他に対処方法がなく正式な修正も待てない場合には役に立つのではないかと思います。

オンプレで無料の範囲での利用であれば、もともと製品サポートはありません。ファイル・システム上にあるdesktop_all.min.jsを直接編集しても、サポートが受けられないことに違いはありません。この場合は、ファイルを2重にロードすることにはならないので、修正による日付ピッカー以外への影響は無いでしょう。