ダッシュボードを読み込む
Reveal ダッシュボードはサーバーに保存されます。クライアント アプリケーションは $.ig.RVDashboard.loadDashboard
メソッドを呼び出し、読み込むダッシュボードの名前を渡します。ダッシュボードの要求はサーバーに送信され、サーバーは要求されたダッシュボードをクライアントに返信します。クライアントはサーバーから返信されてきたダッシュボードを受け取り、RevealView.dashboard
プロパティに設定します。
デフォルトでは Reveal SDK はファイル パスからダッシュボードをロードする規約を使用しています。具体的には、Reveal SDK はサーバー上の作業ディレクトリにある Dashboards フォルダー内でダッシュボードを探します。
1 - サーバー アプリケーションで、作業ディレクトリに Dashboards という名前のフォルダを作成しその中にダッシュボード ファイルを配置します。
- ASP.NET
- Java
- Node.js
Java では現在デフォルトのダッシュボード ローダーはサポートされていません。カスタムのダッシュボード プロバイダーを作成する必要があります。
2 - クライアント アプリケーションで、$.ig.RevealSdkSettings.setBaseUrl
メソッドを呼び出しサーバーの URL を渡します。デバッグ時には、サーバーの URL は https://localhost
の後にポート番号が付いたものになります。
例:
$.ig.RevealSdkSettings.setBaseUrl("https://localhost:5111/");
サーバーがクライアント アプリケーションと異なる URL で動作している場合、$.ig.RevealSdkSettings.setBaseUrl
を呼び出すことが必要です。サーバー アプリケーションとクライアント アプリケーションの両方が同じ URL で実行されている場合、このメソッドは必要ありません。このメソッドは一度だけ呼び出す必要があります。
3 - $.ig.RVDashboard.loadDashboard
メソッドを呼び出し、拡張子 .rdash を除いたダッシュボード ファイル名を渡します。このメソッドには要求したダッシュボードをサー バーから受け取るコールバックがあります。コールバックでダッシュボードを受け取ったら、$.ig.RevealView
のインスタンスを取得し、サーバーからの応答にあるダッシュボードを RevealView.dashboard
プロパティにセットします。
$.ig.RVDashboard.loadDashboard("Sales", (dashboard) => {
var revealView = new $.ig.RevealView("#revealView");
revealView.dashboard = dashboard;
});
このサンプルのソースコードは GitHub にあります。
カスタム ダッシュボード プロバイダー
デフォルトの Dashboards ディレクトリと異なる場所をアプリケーションで使用する場合、代わりにダッシュボードをロードするためのカスタム ダッシュボード プロバイダを提供することができます。
1 - ダッシュボード プロバイダーを作成します。
- ASP.NET
- Java
- Node.js
public class DashboardProvider : IRVDashboardProvider
{
public Task<Dashboard> GetDashboardAsync(IRVUserContext userContext, string dashboardId)
{
throw new NotImplementedException();
}
public Task SaveDashboardAsync(IRVUserContext userContext, string dashboardId, Dashboard dashboard)
{
throw new NotImplementedException();
}
}
public class DashboardProvider implements IRVDashboardProvider {
@Override
public InputStream getDashboard(IRVUserContext userContext, String dashboardId) throws IOException {
return null;
}
@Override
public void saveDashboard(IRVUserContext arg0, String arg1, InputStream arg2) throws IOException {
return null;
}
}
const dashboardProvider = async (userContext:IRVUserContext | null, dashboardId: string) => {
return null;
}
2 - ダッシュボード プロバイダーを Reveal SDK に登録します。
- ASP.NET
- Java
- Node.js
builder.Services.AddControllers().AddReveal( builder =>
{
builder.AddDashboardProvider<DashboardProvider>();
});
RevealEngineInitializer.initialize(new InitializeParameterBuilder().
setDashboardProvider(new DashboardProvider()).
build());
const revealOptions: RevealOptions = {
dashboardProvider: dashboardProvider,
};
app.use("/", reveal(revealOptions));
例: ファイル パスから読み込む
- ASP.NET
- Java
- Node.js
public class DashboardProvider : IRVDashboardProvider
{
public Task<Dashboard> GetDashboardAsync(IRVUserContext userContext, string dashboardId)
{
var filePath = Path.Combine(Environment.CurrentDirectory, $"MyDashboardsFolder/{dashboardId}.rdash");
var dashboard = new Dashboard(filePath);
return Task.FromResult(dashboard);
}
public Task SaveDashboardAsync(IRVUserContext userContext, string dashboardId, Dashboard dashboard)
{
throw new NotImplementedException();
}
}
public class RevealDashboardProvider implements IRVDashboardProvider {
@Override
public InputStream getDashboard(IRVUserContext userContext, String dashboardId) throws IOException {
InputStream dashboardStream = new FileInputStream("dashboards/" + dashboardId + ".rdash");
return dashboardStream;
}
@Override
public void saveDashboard(IRVUserContext arg0, String arg1, InputStream arg2) throws IOException {
}
}
const dashboardProvider = async (userContext:IRVUserContext | null, dashboardId: string) => {
return fs.createReadStream(`myDashboards/${dashboardId}.rdash`);
}
このサンプルのソースコードは GitHub にあります。
例: リソースから読み込む
1 - サーバー アプリケーションにリソースとして Reveal ダッシュボード .rdash ファイルを埋め込む。
- ASP.NET
- Java
ASP.NET サーバー アプリケーションにリソースとして Reveal ダッシュボード .rdash ファイルを埋め込むには、Visual Studio でダッシュボード ファイルのプロパティを開き、.rdash ファイルの ビルド アクション を 埋め込みリソース に設定します。
Reveal ダッシュボード .rdash ファイルを Java サーバー アプリケーションのリソースとして埋め込むには、ダッシュボード ファイルを resources ディレクトリに配置します。
2 - ダッシュボード プロバイダーを作成します。
- ASP.NET
- Java
public class DashboardProvider : IRVDashboardProvider
{
public Task<Dashboard> GetDashboardAsync(IRVUserContext userContext, string dashboardId)
{
var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream($"RevealSdk.Server.Dashboards.{dashboardId}.rdash");
using (resource)
{
var dashboard = new Dashboard(resource);
return Task.FromResult(dashboard);
}
}
public Task SaveDashboardAsync(IRVUserContext userContext, string dashboardId, Dashboard dashboard)
{
throw new NotImplementedException();
}
}
Assembly.GetManifestResourceStream
メソッドで提供するリソースの name
には、.rdash ファイルの namespace
とファイル名を含める必要があります。
public class RevealDashboardProvider implements IRVDashboardProvider {
@Override
public InputStream getDashboard(IRVUserContext userContext, String dashboardId) throws IOException {
InputStream dashboardStream = getClass().getResourceAsStream("/dashboards/" + dashboardId + ".rdash");
return dashboardStream;
}
@Override
public void saveDashboard(IRVUserContext arg0, String arg1, InputStream arg2) throws IOException {
}
}
このサンプルのソースコードは GitHub にあります。
例: JSON から読み込む
上級ユーザーや、Reveal ダッシュボードを .rdash ファイルではなく .json ファイルにシリアライズするユーザーのために、サーバー アプリケーションで Dashboard.LoadFromJsonAsync
メソッドを使用してこれらの JSON ベースのファイルをロードすることができます。
- ASP.NET
- Java
- Node.js
public class DashboardProvider : IRVDashboardProvider
{
public Task<Dashboard> GetDashboardAsync(IRVUserContext userContext, string dashboardId)
{
var filePath = Path.Combine(Environment.CurrentDirectory, $"Dashboards/{dashboardId}.json");
var json = File.ReadAllText(filePath);
var dashboard = Dashboard.FromJsonString(json);
return Task.FromResult(dashboard);
}
public Task SaveDashboardAsync(IRVUserContext userContext, string dashboardId, Dashboard dashboard)
{
throw new NotImplementedException();
}
}
この機能は現在 Java ではサポートされていません。
この機能は現在 Node.jsではサポートされていません。
Reveal ダッシュボードが JSON にシリアライズされた後にその内容を操作または変更すると、ダッシュボードの整合性が失われ、ダッシュボードの内容に不可逆的な損傷が生じる可能性があります。その結果、ダッシュボードの読み込みエラーもしくは読み込み失敗によってアプリケーションで実行時例外がスローされる可能性があります。
このサンプルのソースコードは GitHub にあります。