メインコンテンツまでスキップ

サーバーのエクスポート

ダッシュボードは、UI を必要とせずに、サーバー上の Excel、PDF、または PowerPoint にエクスポートできます。「ヘッドレス エクスポート」とも呼ばれます。サーバー上のダッシュボードのエクスポートは、IDashboardExporter を使用して実行されます。

IDashboardExporter は、次のように ASP.NET コントローラーまたは最小限の API 関数に挿入することで取得できます。

app.MapGet("/dashboards/export/{name}", async (string name, IDashboardExporter dashboardExporter) =>
{

}

ダッシュボードをエクスポートする方法

IDashboardExporter は、ダッシュボードをファイル ストリームとして、またはディスク上のファイル パスにエクスポートするための API を提供します。サポートされている各エクスポート形式には、エクスポート プロセスを簡素化するための API があります。

Excel

//export to stream
var stream = await dashboardExporter.ExportToExcel(dashboardName);

//export to file
await dashboardExporter.ExportToExcel(dashboardName, filePath);

PDF

//export to stream
var stream = await dashboardExporter.ExportToPdf(dashboardName);

//export to file
await dashboardExporter.ExportToPdf(dashboardName, filePath);

PowerPoint

//export to stream
var stream = await dashboardExporter.ExportToPowerPoint(dashboardName);

//export to file
await dashboardExporter.ExportToPowerPoint(dashboardName, filePath);
備考

PDF または PowerPoint 形式へのエクスポートには、時間がかかる場合があります。UI からサーバー側のエクスポートを呼び出す場合は、エクスポートが処理中であることを視覚的に示すインジケーターをユーザーに提供してください。

ユーザー コンテキストの提供

ダッシュボードには、Reveal SDK ユーザー コンテキストを必要とするデータ ソースがある場合があります。この場合、エクスポート メソッドの引数として Reveal SDK の IRVUserContext を指定して、ダッシュボードのエクスポートを確実に成功させる必要があります。

IRVUserContext を取得する最初の手順は、IRVUserContextProviderIHttpContextAccessor を ASP.NET コントローラーまたは最小限の API 関数に挿入することです。次に、引数として IHttpContextAccessor.HttpContext を渡して IRVUserContextProvider.GetUserContext を呼び出します。

app.MapGet("/dashboards/export/{name}", async (string name, IDashboardExporter dashboardExporter, 
IRVUserContextProvider userContextProvider, IHttpContextAccessor httpContextAccessor) =>
{
var userContext = userContextProvider.GetUserContext(httpContextAccessor.HttpContext);
}

IRVUserContext インスタンスを取得したら、それを引数として export メソッドに渡すことができます。

//export to stream
var stream = await dashboardExporter.ExportToExcel(dashboardName, userContext);

//export to file
await dashboardExporter.ExportToExcel(dashboardName, filePath, userContext);

エクスポート オプション

各エクスポート形式は、ダッシュボードをエクスポートする際のさまざまなオプションをサポートしています。たとえば、各ページのヘッダーに著者名を追加したり、各ページのフッターに会社名を追加したりできます。

各エクスポート形式には、特定のオプション オブジェクトがあります:

  • Excel: ExcelExportOptions オブジェクトを使用
  • PDF: PdfExportOptions オブジェクトを使用
  • PowerPoint: PowerPointExportOptions オブジェクトを使用

ダッシュボード エクスポートのオプションを設定するには、エクスポート形式オプション クラスのインスタンスを作成し、それを引数として export メソッドに提供します。

//create Pdf options
var pdfOptions = new PdfExportOptions()
{
Landscape = true
};

//export Pdf to stream
var stream = await dashboardExporter.ExportToPdf(dashboardName, options: pdfOptions);

例: サーバーでのエクスポート

この例では、形式に基づいてダッシュボードをエクスポートするサービス エンドポイントを作成します。

サーバー プロジェクト内、ダッシュボード エクスポート用の新しいルートを作成します。ダッシュボード名とエクスポート形式をルート パラメーターとして定義します。また、エクスポートを実行するために IDashboardExporter を挿入する必要があります。次に、エクスポート形式のルート パラメーターに基づいて、正しいエクスポートを実行するためのロジックを作成します。エクスポートの結果を返すときは、必ず正しいコンテンツ タイプを指定してください。

app.MapGet("/dashboards/export/{name}", async (string name, string format, IDashboardExporter dashboardExporter) =>
{
Stream stream;
string contentType = "application/pdf";
if (format=="xlsx")
{
stream = await dashboardExporter.ExportToExcel(name);
contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
}
else if (format == "pptx")
{
stream = await dashboardExporter.ExportToPowerPoint(name);
contentType = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
}
else
{
stream = await dashboardExporter.ExportToPdf(name);
}

return Results.File(stream, contentType);
});

クライアント アプリケーションで、サービス エンドポイントを呼び出す関数を実行する一連のボタンを作成します。

<button onclick="onExportButtonClicked('pdf')">Export as PDF</button>
<button onclick="onExportButtonClicked('xlsx')">Export as Excel</button>
<button onclick="onExportButtonClicked('pptx')">Export as Power Point</button>

この例では、Sales という名前のダッシュボードをエクスポートしています。これは、クリックされたボタンによって提供されたエクスポート形式を使用します。

function onExportButtonClicked(format) {
fetch(`http://localhost:5111/dashboards/export/Sales?format=${format}`)
.then(resp => resp.blob())
.then(blob =>
{
downloadFile(blob, format);
});
}

function downloadFile(blob, format) {
var a = document.createElement("a");
a.download = `Sales.${format}`;
a.href = window.URL.createObjectURL(blob);
a.click();
}
コードの取得

このサンプルのソース コードは GitHub にあります。