[]
データの連結は、レポートと表示されるレポートのデータの間に接続を確立します。ActiveReportsJSは、設計時に柔軟な接続構成と高度なユースケース向けの豊富なAPIを提供することで、さまざまなJSONデータソースへのバインドをサポートしています。このトピックでは、ActiveReportsJSでのデータの連結の基本的な概念といくつかの一般的なシナリオについて紹介します。
ActiveReportsJSでデータをバインドするには、最初にデータソースを追加する必要があります。データソースには、以下の2種類があります。
ActiveReportsJSデザイナアプリケーションを起動した後、次の手順を使用してデータソースを追加し、そのタイプを設定します。
Remote JSONデータソースの構成では、次のプロパティを指定できます。
https://demodata-jp.grapecity.com/northwind/api/v1/Products
」を指定します。高度なシナリオとは、データセットを使用してエンドポイントのパスが追加される**ベースURL **を指定します。例えば、エンドポイントを「https://demodata-jp.grapecity.com/northwind/api/v1」に設定できます。これは、Northwind REST APIの /Products
, /Categories
およびその他のエンドポイントのベースURLです。次の画像は、「Northwind ProductsOData」エンドポイントの完全な構成の例を示します。
このデータソースタイプの構成はデータです。実行時にデータを提供する場合も、ActiveReportsJSがフィールドリストをプルできるように、設計時にダミーデータを指定する必要があります。例えば、次のようにデータソースを設定して、実行時に「Northwind製品リスト」をレポートに追加できます。
ダミーデータは、ファイルからロードするか、また手動で入力できます。
各データソースには、1つ以上のデータセットが含まれている可能性があります。**[データソース]ダイアログで変更を保存して、[データ]**タブでデータソース名の横にある `+`
アイコンをクリックし、データセットを追加します。
データセットを構成する時、次のプロパティを指定できます。
/Products
や/Categories
などのエンドポイントパスを指定します。[
{
"productId": 1,
"productName": "Chai",
... the rest of properties
},
{
"productId": 2,
"productName": "Chang",
},
... the rest of the data
]
JSONパスには$.*
または $[*]
の式を使用して、繰り返されるデータフラグメントを指定できます。
ODataエンドポイントによって返される同じ製品リストは少し異なります。
{
"@odata.context": "https://demodata-jp.grapecity.com/northwind/odata/v1/$metadata#Products",
"value": [
{
"ProductId": 1,
"ProductName": "Chai",
... the rest of properties
},
{
"ProductId": 2,
"ProductName": "Chang",
},
... the rest of the data
]
}
この場合は、JSONパスに$.value.*
または $.value[*]
の式を使用して、繰り返されるデータフラグメントを指定できます。
JSONパスにはリッチな構文があるので、公式ページを参照して他の例を確認できます。
上記のプロパティを設定したら、データセットを検証し、フィールドリストを取得できます。[新規データセット]ダイアログでは、この両方の操作を実行するために検証ボタンをクリックします。構成が無効な場合、またはデータ接続に問題がある場合、ダイアログの上部にエラーメッセージが表示されます。
データセットは正しく構成された場合、データフィールドのリストが表示されます。データフィールドのリストを展開するには、データベースフィールドセクションの表示アイコンをクリックします。
データセットのフィールドは、データベースフィールドと計算フィールドで構成されています。データベースフィールドはデータ自体から作成され、 計算フィールドは、レポートの作成者が記述できます。データベースフィールドリストを使用して、次の2つの一般的な操作を実行できます。
FieldName[Date|Format]
です(例、OrderDate [Date | YYYY-MM-DD])。サポートされている形式トークンの完全なリストについては、momentjs のドキュメントを参照します。計算フィールドを追加するには、「計算フィールド」セクションの右側にある「+」アイコンをクリックします。 レポートで使用する「フィールド名」を設定し、値を式に設定します。例えば、データベースフィールドリストに OrderLine
エンティティのUnitPrice
、 Quantity
、および````DiscountPerUnitフィールドが含まれている場合、
TotalPrice```という計算フィールドを追加して、その値を**「=(Fields!UnitPrice.Value - Fields!DiscountPerUnit.Value) * Fields!Quantity.Value」**に設定できます。
計算フィールドの値は、元のデータセットの各エンティティで自動的に使用可能になります。
OData APIの$filter操作などのようなデータソースの機能を使用してレポートに表示されるデータをフィルタリングすることをお勧めします。これにより、アプリケーションとデータソースの間にトラフィックが減少され、ActiveReportsJS側でのデータ処理が簡素化されます。
ただし、上記のデータセットの検証が正常に終了した後、データセットでフィルタを設定できます。フィルタセクションの右側にある**+アイコンをクリックします。 フィルタするために使用するフィールドを式として設定します(例:=Fields!UnitPrice.Value
)。 次に、Operatorをサポートされているフィルタ演算子(例:>
)に設定します。最後に、フィルタの値**(例: 1000
)を設定します。この設定により、レポートには「UnitPrice > 1000
」のデータエンティティのみが表示されます。
JSONデータは、エンティティ間に一対多のリレーションシップをあらわします。 例えば、OData Northwindエンドポイントへの次のリクエストは、各カテゴリに製品のリストが含まれているカテゴリのリストを返します。
GET https://demodata.grapecity.com/northwind/odata/v1/Categories?$expand=Products
ActiveReportsJSは、データでそのような構造を見つける場合、表示されるデータセットダイアログでデータセット階層が自動的に作成されます。
ネストされたデータ領域を使用してマスター詳細レポートがそのような構造を示す方法については、チュトリーアル、またはをデモを参照してください。
もし設計時にデータ接続を設定できない場合、実行時にレポートのアプリケーションコードにデータを追加できます。この場合は、上記に説明した「EmbeddedJSON」データソースタイプが使用できます。次の例は、Northwind Productsエンドポイントからデータを取得して、データソースプロパティに渡す方法について説明します。
// Fetch APIを使用して、リクエストを設定しますhttps://developer.mozilla.org/ja/docs/Web/API/Fetch_API
const headers = new Headers();
const dataRequest = new Request(
"https://demodata.grapecity.com/northwind/api/v1/Products",
{
headers: headers
}
);
// データを取得します
const response = await fetch(dataRequest);
const data = await response.json();
// レポート定義「jsonファイル」を取得します
const reportResponse = await fetch("Products.rdlx-json");
const report = await reportResponse.json();
// レポートにデータを追加します
report.DataSources[0].ConnectionProperties.ConnectString = "jsondata=" + JSON.stringify(data);
上記を処理の後は、レポートをビューワにロードするか、サポートされている形式にエクスポートできます。
コードサンプルについては、デモ を参照します。