【问题标题】:Nested loop in birt reportbirt 报告中的嵌套循环
【发布时间】:2015-05-25 16:29:27
【问题描述】:

我正在使用 Eclipse Birt 从 JSON 文件生成报告。

我的 JSON 文件如下所示:

{  
"cells":[  
  {  
     "type":"basic.Sensor",
     "custom":{  
     "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           },
           {  
              "name":"Name4",
              "URI":"Value4"
           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

     },
           "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABEJAAARCQBQGfEVAAAABl0RVh0U29mdHdhcmUAd3Vi8f+k/EREURQtsda2Or/+nFLqP6T5Ecdi0aJFL85msz2Qxyf4JIumMAx/ClmWt23GmL1kO54CXANAVH+WiN4Sx7EoNVkU3Z41BDHMeXAxjvOxNr7RJjzHX7S/jAflwBxkJr/RwiOpWZ883Nzd+Wpld7tkBr/SJr7ZHZbHZeuVweSnPfniocMAWYwcGBafH0OoPamFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY7/B94QnX08zxKLAAAAAElFTkSuQmCC"
        }
     }
  },
  {  
     "type":"basic.Sensor",

     "custom":{  
        "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           },
           {  
              "name":"Name4",
              "URI":"Value4"
           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

     },

        "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9igAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIADqhvprADeSsau00l5NAAAAAElFTkSuQmCC"
        }
     }
  },
  {  
     "type":"basic.Platform",

     "custom":{  
        "identifier":[  
           {  
              "name":"Name1",
              "URI":"Value1"

           }
        ],
        "classifier":[  
           {  
              "name":"Name2",
              "URI":"Value2"
           }
        ],
        "output":[  
           {  
              "name":"Name3",
              "URI":"Value3"
           }
        ],

        "image":{  
           "width":50,
           "height":50,
           "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAA6TH0jqtg6U8EsCdnm3SpevSK7Pb85xABEMBuLAn2hxjRve7SFzYEaB/HhytLQ4ABRwCWBPvBKnRk6U8EkBeOD9f7iwAGHAGEYEmwDxLvzNKfCCDP8NGLQd3lY7D0JwI4kmlwfHhX6dTSXxsRAAHsWR7aUjc7uM5Wg=="
        }
     }
  }
]
 }

我有 3 个单元格,每个单元格包含 1 个图像 1 个名称 1 个类型和 3 个表格,这是我到目前为止所做的:

我正在努力做的是一个嵌套循环,我希望我的 JSON 中的每个对象(单元格)都有一个像这样编号的段落:

  • 2.x 组件单元的名称:
    • 图片
    • 输出表
    • 标识符表
    • 分类表

所以要做到这一点,我需要在每个单元格上迭代,然后在每个表上迭代输出、标识符和分类器,我不知道我该怎么做,一个嵌套循环。像一个表示单元格数量的列表,其中包含 3 个表格、一个图像、一个名称。

**编辑:** 这是数据集的open方法

// Grab the JSON file and place it in a string
fisTargetFile = new FileInputStream(new File("C:/Users/Sample Reports/moe.json"));
input = IOUtils.toString(fisTargetFile, "UTF-8");

// Store the contents in a variable
jsonData = input;

// Convert the String to a JSON object
myJSONObject = eval( '(' + jsonData + ' )' );

// Get the length of the object
len = myJSONObject.cells.length;

// Counter
count = 0;

获取方法:

if(count < len) {
var name     = myJSONObject.cells[count].attrs.text["text"];
var type    = myJSONObject.cells[count].type;
var icon =myJSONObject.cells[count].attrs.image["xlink:href"];



icon = icon.split(",");

icon= icon[1];
imageDataBytes = icon;

row["name"]     = name;
row["type"]    = type;
row["icon"]    = Base64ToBlob.toBytes(icon);



Logger.getAnonymousLogger().info( row["icon"]);
count++;
return true;
}

return false;

【问题讨论】:

  • 为什么要立即投反对票?怎么了 ?如果你只是给我的帖子打分,我不知道我做错了什么。
  • 您应该添加您的代码,显示您现在编码的内容,或者您​​用于生成报告的 BIRT 代码。这样,我们必须编写所有的想法,或者按原样准备所有的答案。无论如何,在 eclipse.org birt 文档中,他们谈到了表格。 eclipse.org/birt/documentation/tutorial/tutorial-6.php
  • 好的,我已经添加了我的代码,打开和获取数据集的方法。
  • downvote 不是我的,但现在你有我的 +1。很好的编辑。我会再次检查以找到解决方案

标签: java json reporting birt birt-deapi


【解决方案1】:

您想使用嵌套表,有一个很好的教程展示了如何将嵌套表链接到外部表:请先watch carefully this demo,特别是查看子表如何通过数据集参数链接到外部表.

当然,您的案例更具挑战性,因为您需要使用脚本数据集和多个子表来执行此操作。我已经做过类似的事情,你必须为每个子表创建一个脚本数据集。重点是:

  • 在每个子数据集的“参数”部分,创建一个输入参数并将其命名为例如“systemID”
  • 通过“拖放”外部表中的每个数据集来创建子表
  • 在每个子表的“绑定”部分,将参数“systemID”链接到外部表的 ID 字段
  • 在子数据集的“打开”事件中,使用以下表达式访问参数的值:inputParams[“systemID”] 这样您就可以过滤“myJSONObject中的相关行em>”。
  • 确保“myJSONObject初始化一次很重要,否则如果在每次迭代中对其进行评估,性能可能会显着下降。例如,在报告的“初始化”事件中对其进行评估。

就是这样,这并不容易,但这些元素应该有助于完成这份报告。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多