在 Telerik Reporting (Desktop) 中,如何将 json 子节点注入到子报表字符串参数中

In Telerik Reporting (Desktop), how to inject a json sub-node into sub-report string parameter

提问人:Julio Nobre 提问时间:5/30/2023 最后编辑:Julio Nobre 更新时间:6/9/2023 访问量:140

问:

介绍

根据下面的 json 示例,我正在尝试使用主报告和子报告来定义 Telerik 报告,其中 se second 提供主报告 json 数据的子集。

基本上,数据流模仿如下内容:

  1. 应用程序将基本 json 数据注入主报表的 jsonData(string) 参数;
  2. jsonData 绑定为报表数据源;
  3. 应用 Json 数据选择器;
  4. 将 Json selected data Employes 节点注入到子报表中,该子报表也会将其用作 json 数据源。

在第 4 步出现问题,在呈现主报表时,我收到 [报表参数'jsonData' 的无效值] 错误。

Telerik Report似乎无法将选定的json节点字段数据转换为正确的字符串。

完整背景

有关完整上下文:

  • 在这两份报告中

    • 有一个字符串数据类型的jsonData报表参数;

    • 定义了一个 JsonDataSource;

    • 字符串 jsonData 参数和主 JsonDataSource 之间的绑定基于:

      • 属性路径:Datasource.Source
      • 表达式:= Parameters.jsonData.Value
  • 关于主要报告

    • JsonDatasource $.正在使用公司数据选择器,从而生成一个列表,表示包含 de 公司列表,每个实例具有:
  • Name,表示公司名称的字符串;

  • Employes,包含公司雇员列表的对象。

    • 完整的示例 json 数据通过 jsonData 参数作为字符串注入;
  • 在子报表上

    • 还有一个字符串数据类型的 jsonData 报表参数;
    • 正在使用 JsonDataSource $ 数据选择器,这应该会导致:
      • 以下字段的列表:
        • Name,表示受雇者姓名的字符串;
        • Wage,表示雇员工资的数值。
  • 同样在主报表上,我使用以下子报表参数映射:

    • 参数名称:jsonData
    • 参数值:Fields.Employes
  • 我正在使用 Telerik Report Designer v15.1.21.716(桌面版)

似乎数据选择器将 json Employes 节点日期转换为 System.Object[],这让我很难弄清楚如何将其转换回 json 字符串。

我已经在文档、网络、ChatGPT 等网站上进行了广泛的搜索,以寻找有效的解决方案。到目前为止,没有运气。

在你帮助我之前

虽然我最感激任何人试图帮助我的努力:

  • 我正在寻求一个仅json数据源解决方案。我的意思是,我对任何其他替代支持的 Telerik Reporting 数据源不感兴趣;
  • 解决方案必须在设计时和运行时都有效。
{
    "Companies": [
        {
            "Name": "Company1",
            "Employes": [
                {
                    "Name": "Joe",
                    "Wage": 1000
                },
                {
                    "Name": "Jack",
                    "Wage": 2000
                }
            ]
        },
        {
            "Name": "Company2",
            "Employes": [
                {
                    "Name": "Mary",
                    "Wage": 3000
                },
                {
                    "Name": "Mike",
                    "Wage": 4000
                }
            ]
        }
    ]
}
JSON 子报告 telerik-reporting

评论


答:

1赞 Momchil Zanev 6/7/2023 #1

实际上,将“Employes”对象传递给子报表的“jsonData”参数应该不起作用,因为该对象无法直接转换为 JSON 字符串。您必须通过 CStr() 函数转换它。

但是,可以使用如何表示分层嵌套数据知识库文章中介绍的绑定,而不是使用参数来设置子报表的数据源。

我还想提一下,在 R3 2022 SP1 版本中,DataSource 属性也被添加到了 SubReport 项中。这使得我上面建议的方法已经过时,因为它允许您直接在主报表中绑定子报表的数据源。 例如:

解决方案 1

基于 DataSource 属性的 SubReport 项绑定:

Property path: DataSource

Expression: = Fields.Employes

解决方案 2

在 @Julio 提供的示例中,该示例允许将 json 节点作为子报表参数注入,而不是直接数据源,您应该使用以下方法。

通过子报表参数绑定子报表项:

Property path: jsonData

Expression: = CStr(Fields.Employes)

请记住...

  • 解决方案 1,不需要显式内部子报表绑定到数据源;

  • 解决方案 2,需要在子报表之间进行额外的绑定 参数及其数据源,如原始帖子所述。

有关此主题的更多详细信息,请查看 Telerik 的原始帖子