2021年8月31日火曜日

対話グリッドの列の文字の色を条件によって変更する

相談としては「(対話グリッドの)単一ビューに変更された際やリフレッシュされた後に、表示のみの列に対して値毎に色を変える」という実装を行いたい、とのことでした。

サンプル・データセットの表EMPを使った対話グリッドを例に実装してみます。

DEPTNOが10であればEmpnoを赤色で表示します。


DEPTNOが20であればEmpnoを黄色で表示します。


DEPTNOが30であればEmpnoを緑色で表示します。


対話グリッドの列EMPNOの詳細のJavaScript初期化コードとして、以下を記述します。defaultGridColumnOptionsとcellTemplateの設定を使っています。
function(options){
    options.defaultGridColumnOptions = {
        cellTemplate: '{case DEPTNO/}{when 10/}<div class="u-danger-text">&EMPNO.</div>{when 20/}<div class="u-warning-text">&EMPNO.</div>{when 30/}<div class="u-success-text">&EMPNO.</div>{otherwise/}&EMPNO.{endcase/}',
    };
    return options;
}


テンプレート・ディレクティブを指定するには、値が読取り専用であることが必須です。タイプ言語PL/SQLPL/SQL式として:EMPNO is not null実行各行とすることで、新規行の場合のみEMPNOの入力が可能で、一旦値が設定されると変更を不可(読取り専用)とします。


以上で実装は完了です。

単一ビューではないグリッド・ビューでもテンプレート・ディレクティブは有効なので、Empnoには色が付きます。


簡単なアプリケーションですが、エクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/singlerowview-color.sql

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