2011-12-08 6 views
3

いいえ...だから。 APEXには、システムに関するドキュメントに関するデータを表示するインタラクティブなレポートがあります。私たちの書類は2年ごとに見直される予定であり、テーブルにはその書類が次に審査されるべき日付を含む列があります。日付が特定のベンチマークに達したとき(すなわち、現在の日付、3ヶ月、2、1などの日付が6ヶ月以内のとき)、日付を含むセルまたは行内の別のセルのいずれかを視覚的に表示したい。Oracle APEX - 包含された値に基づいてインタラクティブ・レポート上のセルの条件付きでテキストの色を変更しますか?

私がやりたいことは、そのセルの値または同じ行の別のセルの値に基づいて、特定のセルのテキスト(または背景)の色を変更することです。 sysdateとセルに含まれている日付の間のスパンを決定するために何らかの計算を行うプロセスや関数が必要です...ページがロードされたときには必ずしも計算する必要はなく、毎日または毎週のプロセスを計算するか、何かが良いだろう。

人間とのやりとりなしに毎日実行するプロセスやトリガを設定することはできますか?また、これらの予定されている締め切り日についてリマインダーメールを送信するために同じ機能を使用する必要があります。 (つまり、書類が6ヶ月間見直される必要がある場合、3ヶ月、2、1などでメールが送信されます)

答えて

4

empのhiredateの例:私は、 > 11000です(sysdate-hiredateの範囲は約10kから12kです)。あなたは、クエリに計算フィールドを使用することができ、またはあなたがレポートに色の行に2つの動的なアクションが必要になりますあなたには、いくつかの手順を経て記入一つは、

select empno, ename, job, mgr, hiredate, sal, comm, deptno, 
     trunc((trunc(sysdate)-hiredate)) to_colour_or_not 
    from emp 

を:)問題ではありません:onloadイベントのアクションをし、リフレッシュ後リフレッシュ後をスキップすると、ページの一部がリフレッシュされるため、たとえばページネーション後に行が色付けされません。

動的アクションいずれか

dynamic action: after refresh

真アクション:

After refresh: true action

$("td[headers='TO_COLOUR_OR_NOT']").each(function(){ 
alert($(this).text()); 
    if(parseInt($(this).text()) > 11000){ 
     $(this).css({"background-color":"red"}); 
    }; 
}); 

別の列を着色する条件として、一つの列を使用して、実施例領域に更新後。あなたが何をテストし、何をテストするかに常に注意してください!たとえば、hiredateカラムは日付ですので、必要に応じてそれを扱ってください!さらに注意してください:日付形式がDD-MON-YYYYに設定されている場合は、月ごとのマッピング(JAN = 1、DEC = 12)を実行する必要があります。同じコードを使用し、負荷の真のアクションとして

Dynamic action: Onload

上:多分それは

$("td[headers='HIREDATE']").each(function(){ 
    var i_date = $(this).text(); 
    //date format = MM/DD/YYYY 
    //be carefull with date formats. 
    //in my case, i know my date format and know it won't change 
    //my code is far from a complete parse of possible date values! 
    var dMonth = i_date.substring(0, 2), 
     dDay = i_date.substring(3, 5), 
     dYear = i_date.substring(6);  
    var d = new Date(dYear, dMonth, dDay, 0, 0, 0, 0); 

    if(d.getFullYear() <= 1981){ 
     //we are looping over TD elements. I want to colour the 
     //column ENAME in red when the condition is true for this row. 
     //so, $(this) = TD element we loop with. parent = TR element, 
     //then back to the children of the row 
     $(this).parent().children("td[headers='ENAME']").css({"background-color":"red"}); 
    }; 
}); 

...第2の動的アクションも、この列の日付形式を変更するためのオプションですリフレッシュのための真のアクション。

JSでは、あなたが望むものを何でもできます。どのセルをペイントしたいのかを知る必要があります。 [headers='']を使用して、希望のセルをターゲットに設定します(jquery selectors)。 css()の代わりにaddClassを使用することができます。

Do mind:IRにはマウスオーバーアクションが組み込まれています。これにより、マウスオーバー操作があると、ペイントされたセルがその色で表示されなくなります。これを望まない場合は、mouseover/mouseleaveイベントに対して別の動的アクションが必要であり、必要なセルを対象とします。

スケジュールされたジョブについては、DBMS_JOBSをチェックしてください。

+0

私は値をチェックしている行を編集しようとしている場合(つまり、 'TO_COLOUR_OR_NOT'という行を色付けできます)、その行をチェックして別の色にしたい場合は、どのように私はそれを行うだろう、値に基づいて行、hiredateと言う? – Spags

+0

私はあなたの助けに私の答えで少しのコードを追加しました。コメントはそれほど大きくないでしょう:)私がそこにあるように、日付は注意してください!また、古典的なレポートを使用すると便利な場合もあります。なぜなら、そこに非表示の列があり、それらをターゲットにすることができるからです(IRでは不可能です)。この方法では、選択したロジックを実行して、これを非表示の列に出力し、JavaScriptの値チェックを排除できます。値の変換に苦労することがあります。コードを再利用してください?努力する価値がありますか?など) – Tom

+0

ああ...あなたは正しいです。ソース列が非表示の場合は機能しません。それは非常に残念です。 'hiredate'とsysdateの間のselect文で行ったのと同じような計算を行うことは可能ですが、動的アクションが起動しているjavascript式の一部として可能ですか?ダイナミックアクションはhiredateにあり、2つの日付の差を計算し、適切なセルに色付けします。 – Spags

4

インタラクティブレポートでは、(ハイライト付きの)REPORTSを定義することもできます。

お名前、タイプ(行またはセル)、背景とテキストの色、そしてあなたが望むどのCOLUMNを与えることができますハイライト(ポップアップ上)FORMATとHIGHLIGHT

すると、ボタンアクションを選択します。オペレーターと表現。 ハイライトを適用します(EXPRESSION-sに応じて複数のカラーハイライトが必要な場合は、複数のハイライト/その他の名前を付けてください)。 最も重要なフィルタと一緒にレポート(最初のプライマリ)として保存します。

プライマリレポートを定義した後、これをベースレポートとして使用できます。その他のレポートを作成して(他のフィルタと一緒に保存しますが、プライマリレポートと同じハイライトを使用してください)。

お楽しみください。

関連する問題