この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

JavaScript Remoting を使用したグラフデータの更新

Visualforce グラフは、カスタム JavaScript を使用して、定期的に、またはユーザのアクションに応じて更新します。JavaScript コードを使用すると、複雑なユーザ活動やタイマーイベントに対応できます。また、JavaScript Remoting を使用して、新しいグラフデータを必要なときにいつでも取得できます。
次のマークアップでは、グラフの横にあるメニューから新しい年を選択して更新可能な円グラフを表示します。

このマークアップでは、グラフのdata 属性を JavaScript 関数 retrieveChartData の名前に設定することで、グラフコンポーネントをデータソースに添付します。データはこの関数から返されます。関数の名前は文字列として指定します。

静的 HTML <select> メニューには、グラフで使用可能な年が表示されます。メニューは、どの種類のフォーム要素とも関連付けられておらず、値がコントローラに直接返送されることはありません。代わりに、<select> メニューの onChange 属性が、メニューが変更されたときには常に JavaScript 関数 refreshRemoteChart() をコールします。さらに 2 つの静的 HTML 要素として、ID を持つ <span> タグが 2 つあります。<span> タグは、ページ読み込み時は空で、JavaScript 経由で更新されると必要に応じて状況とエラーメッセージを表示します。

Visualforce マークアップの前にある 2 つの JavaScript 関数は、Visualforce グラフと、データを提供する @RemoteAction コントローラメソッドをつなぎます。関数とグラフコンポーネントの間には 3 つのリンクがあります。
  1. グラフコンポーネントの data 属性は、最初の JavaScript 関数の名前である「retrieveChartData」に設定されます。これにより、グラフコンポーネントに、その JavaScript 関数を使用してデータを読み込むように指示します。グラフコンポーネントは、グラフが最初に作成されてデータが初期読み込みされるときに retrieveChartData() を 1 回だけ直接呼び出します。
  2. 再読み込みは、2 つ目の JavaScript 関数 refreshRemoteChart() がコールされると行われます。これが、theYear メニューからの 2 つ目のリンクです。年メニューが変更されると、refreshRemoteChart() が呼び出され、そこから retrieveChartData() 関数が再呼び出しされて新しいデータのセットが読み込まれます。
  3. refreshRemoteChart()retrieveChartData() を呼び出すと、コールバックとして匿名関数が提供され、この匿名関数が @RemoteAction コールで返された結果を処理します。このコールバックが、RemotingPieChart.reload(data) をコールしてグラフを更新します。グラフ自体は name 属性を設定して指定した RemotingPieChart であり、reload() は、作成された Visualforce グラフで使用可能な JavaScript 関数で、新しいデータを受け入れてグラフを再描画します。

この図は、ページのさまざまなコンポーネント間のリンクを示しています。Visualforce グラフの作成と JavaScript Remoting

グラフの初期読み込みシーケンスは単純です。RemotePieChart という <apex:chart>retrieveChartData() をコールして初期データを取得し、retrieveChartData() はデータを取得すると RemotePieChart.show() をコールします。こうしてグラフが表示されます。

更新はもっと複雑です。新しい年が theYear メニューから選択されると、メニューの onChange イベントが起動され、refreshRemoteChart() 関数をコールします。次に refreshRemoteChart()retrieveChartData() 関数をコールし、@RemoteAction が新しいデータを返すと、retrieveChartData() が (refreshRemoteChart() で提供されるコールバック経由で) RemotePieChart.reload() をコールします。こうしてグラフが更新されます。

その他に、いくつか注意点があります。

  • <apex:chart>hidden="true" 属性を使用して、表示するデータが揃う前にグラフが表示されないようにします。グラフデータが読み込まれたら、retrieveChartData() 関数が RemotingPieChart.show() をコールしてグラフを表示します。これと RemotingPieChart.reload() によって、<apex:actionSupport> を使用して表示する場合よりもはるかに滑らかなグラフアニメーションを表示できます。
  • refreshRemoteData() 関数は、retrieveChartData() をコールしてデータの更新を試みる前に、statusElement HTML <span> を「loading… (読み込み中)」メッセージに設定し、データが返されてグラフが更新されたら、匿名コールバック関数が空の文字列に設定してメッセージを非表示にします。基本的に同じ効果を得るために <apex:actionStatus> を使用する場合よりも作業が若干多くなります。同じ手法を使用して「busy (処理中)」アニメーションやグラフィックを簡単に表示できます。

PieChartRemoteController

このページのコントローラは、「単純なグラフ作成の例」で使用されている円グラフコントローラを拡張したものです。
このコントローラは、Visualforce グラフへのデータ提供に 2 つの異なる方法をサポートしています。
  • Visualforce 式 {!pieData} を使用してインスタンスメソッド getPieData() をコールする
  • @RemoteAction 静的メソッド getRemotePieData() を JavaScript メソッドからコールして JavaScript Remoting を使用する