[]
数据绑定是建立报表与数据之间的连接。ActiveReportsJS 通过提供灵活的数据连接配置及 API 来连接各种 JSON 数据源,本文主要介绍如何在 ActiveReportsJS 设计器中连接 JSON 数据以及数据源中的各项配置。
支持的数据源类型:
打开 ActiveReportsJS 设计器并使用以下步骤连接数据源,设置数据源类型:
数据绑定
选项,并右键单击添加
按钮。数据源提供类型
。以下是需要指定的配置属性:
https://demodata.grapecity.com/northwind/api/v1/Products
。
In more advanced scenarios, it could be the base URL to which the endpoint paths are appended by using data sets(they are described further). 例如, 您可以设置 结束点(ENDPOINT)
为 https://demodata.grapecity.com/northwind/api/v1
基本的URL(Base URL) /Products
, /Categories
或 Northwind REST API数据中提供的其他结束点。如果在数据集中设置了数据连接信息,结束点(ENDPOINT)
可以为空。如下是设置数据绑定的示例endpoint.
该数据源类型的配置项就是数据本身。 如果需要在报表运行时提供数据,也仍然需要在设计时先指定虚拟数据,助于ActiveReportsJS获取到字段列表。 例如,如果要在运行时将“Northwind Products”数据提供给报表,则可以设置数据源:
您可以从文件中加载数据或也可以手动输入。
每个数据源可以包含一个或多个数据集。 在"数据源"对话框中保存更改,然后在属性窗口的"数据"选项卡中单击数据源名称的+
图标以添加数据集。
对话框中各属性设置说明如下:
ENDPOINT
是 完整的 URL, 如 https://demodata.grapecity.com/northwind/api/v1/Products
, 该数据集的 Uri/path
就不需要输入ENDPOINT
是 基础URL,如 https://demodata.grapecity.com/northwind/api/v1
那数据集的 Uri/path
需要包含结束点 endpoint 路径, 如/Products
或 /Categories
结束点(ENDPOINT)
为空, 数据集的 Uri/path
应该为完整的URL,且是结束点。内嵌数据集
, 数据集的Uri/path
应该为空。GET
及 POST
。该属性仅在数据源类型为 外部URL或JSON
数据源类型时可用。外部的URL或文件
类型中可用。[
{
"productId": 1,
"productName": "Chai",
... the rest of properties
},
{
"productId": 2,
"productName": "Chang",
},
...
]
您可以使用 $.*
或 $[*]
JSONPath 表达式来指定获取相同结构的数据节点。
相同的产品列表通过 OData end point 返回会有些差异:
{
"@odata.context": "https://demodata.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
]
}
以上数据中也可以使用 $.value.*
或 $.value[*]
JSONPath 表达式来获取数据。
JSONPath 语法也是非常丰富和强大的,您可以点击以下链接了解相关内容: 官方网站.
如果您完成数据源的设置,下一步就是添加数据集,获取到数据结构及可用得到数据字段,输入相关信息后,点击验证
按钮后,可帮助您验证是否存在语法错误。
如果验证成功后,会在查询字段
中列出可用的字段名称。
数据集对话框中字段中包含两种类型,查询字段和计算字段,查询字段是根据传进的JSON 数据获取到的Key值名称,可根据名称去引用到同一名称对应的所有数据。
字段
起别名 ,如果字段名称过长或者不易于阅读,可以新起别名来引用别名。FieldName[Date|Format]
,如 OrderDate[Date|YYYY-MM-DD]
. 详情可参考 momentjs documentation 了解更多的格式设置功能计算字段是根据原始的字段计算而生成的新的字段,也可以与原始字段一样使用,在计算字段节点中点击 +
图标 设置字段名称
在报表中是根据字段名称来引用,设置值为 表达式,如原始字段中包含 单价字段UnitPrice
, 数量字段Quantity
, 及折扣字段 DiscountPerUnit
就可以新添加一个字段为总合计 TotalPrice
并设置值为
{UnitPrice}*{DiscountPerUnit}*{Quantity}
计算字段的值可根据查询字段来计算出目标值并保存。
可以在数据集上增加过滤器,来过滤相关数据。如,使用OData API 的$filter功能,可以有效的减少应用与数据源端的性能问题。
然而, 数据集验证成功后,可以在数据集层上添加过滤器,在过滤器节点,点击 +
图标 设置过滤的条件,可以是表达式也可以是固定的值 如 =Fields!UnitPrice.Value
选择 操作符
如>
设置值
1000
最终表达式就会等同于UnitPrice > 1000
效果。
JSON 数据正因为它的灵活性,所以才在 Web端被广泛引用,JSON 的数据结构也是最没有规则和限制的,所以会经常出现数据嵌套的情况存在1对多的数据关系,ActiveReportsJS 增强了数据获取的功能,可以通过输入数据结束点来获取嵌套的数据节点。 示例: OData Northwind endpoint 返回了产品类别列表,每个类别中又包含多个产品信息。
GET https://demodata.grapecity.com/northwind/odata/v1/Categories?$expand=Products
ActiveReportsJS 接收到类似结构的数据,会自动创建数据集的递归结构,并会在数据集对话框中显示数据层次 :
在设计时会绑定一些测试数据用于查看报表的展示效果,但往往在实际的运行系统当中,报表数据会根据实际的业务产生的。所以我们就需要在运行时候再去为报表传递数据值。
为解决此类问题,可以将报表数据源类型设置为 内嵌数据集
,然后在加载报表时,将数据值传递。示例如下
// Use Fetch API to set up the request https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
const headers = new Headers();
const dataRequest = new Request(
"https://demodata.grapecity.com/northwind/api/v1/Products",
{
headers: headers
}
);
// fetch the data
const response = await fetch(dataRequest);
const data = await response.json();
// fetch the report definition, it is just a json file
const reportResponse = await fetch("Products.rdlx-json");
const report = await reportResponse.json();
// feed the data to the report
report.DataSources[0].ConnectionProperties.ConnectString = "jsondata=" + JSON.stringify(data);