比尔特。在动态组的组页眉/页脚中显示当前分组值

Posted

技术标签:

【中文标题】比尔特。在动态组的组页眉/页脚中显示当前分组值【英文标题】:BIRT. Show current grouping value in group header/footer for dynamic group 【发布时间】:2012-06-01 09:07:49 【问题描述】:

小问题:

我有一个可以在运行时更改分组条件的组(请参阅下面的长问题中的详细信息)。我可以在组页眉/页脚中显示组的当前值吗(例如,按分支分组 - 显示分支名称,按客户端分组 - 客户端名称等)?

长问题:

我想让我的用户即时更改分组条件。我可以通过两种方式相对轻松地实现这一点:

    通过 BIRT 设计时 API(传递给适当的行/数据集列值)。

    通过报告参数。将数据集列名称作为参数值传递,并在组条件中使用它

    eval(params["groupColumnName"].value)

我的问题是我必须在组标题中显示当前组的值(并且很高兴在组页脚中重复它)。

我不知道如何为选项 1 实现这一点。(设计时 API)。

对于选项 2。我可以在组页眉/页脚中重复 2. 中的 Java 脚本,但这不是我想要实现的。我不想重复那个繁琐的 java 脚本 2-3 次。我能否以某种方式在组级别定义该值(类似于组的命名查询),然后在组条件、页眉和页脚中重用它?

可能的 BIRT 允许按组名显示当前分组值吗?

欢迎提出任何想法。

【问题讨论】:

【参考方案1】:

您可以通过以下两种方式之一实现选项 2:

    将计算列添加到数据集,并使用计算参数的公式,并根据报告中的要求按/包含计算列进行分组。 如果您使用的是 SQL 数据源,请在查询的 SELECT 子句中添加一个新字段作为 CASE WHEN 参数值 ...并按要求分组/在报告。

【讨论】:

【参考方案2】:

我所做的 - 通过 API 为 DataItem 和 TextItem 更改组页眉/页脚。

以防万一有人想现在我的解决方法:

    private static void processRowHandle(SlotHandle pSlotHandle, ReportGroup pGroupInfo) throws SemanticException 
    if (pSlotHandle == null) return;
    for(Object obj : pSlotHandle.getContents())
        if (obj instanceof RowHandle)
            SlotHandle cells = ((RowHandle)obj).getCells();
            if (cells == null) continue;
            for(Object item : cells.getContents())
                if (item instanceof CellHandle)
                    SlotHandle content = ((CellHandle)item).getContent();
                    if (content == null) continue;
                    for(Object cell : content.getContents())
                        if (cell instanceof DesignElementHandle) processGroupLabels((DesignElementHandle) cell, pGroupInfo);
                    
                
            
        
    


private static void processGroupLabels(DesignElementHandle pElementHandle, ReportGroup pGroupInfo) throws SemanticException 
    if (pElementHandle instanceof DataItemHandle)
        DataItemHandle dataItemHandle = (DataItemHandle)pElementHandle;
        if (pGroupInfo.getOldBindingName().equals(dataItemHandle.getResultSetColumn()))
            dataItemHandle.setResultSetColumn(pGroupInfo.getNewColumn().getBindingNameText());
        
    
    if (pElementHandle instanceof TextItemHandle)
        String newColumnBindingText = ExpressionUtil.createRowExpression(pGroupInfo.getNewColumn().getBindingNameText());
        String content = ((TextItemHandle)pElementHandle).getContent().replace(pGroupInfo.getOriginalExpression(), newColumnBindingText);
        ((TextItemHandle)pElementHandle).setContent(content);
    

【讨论】:

以上是关于比尔特。在动态组的组页眉/页脚中显示当前分组值的主要内容,如果未能解决你的问题,请参考以下文章

如何设置Word页脚中的总页数

我正在扩展页眉和页脚,但是当我在页脚中传递数据时,它仅在主页上可见,在其他页面上不可见

怎样在EXCEL中添加页眉/页脚?

在我的页脚中显示当前年份的最轻量级方式是啥?

在报告页脚中与组求和

初蒙数据表。计算金额并在页脚中显示