简短问题:
我有一个可以在运行时更改分组条件的组(请参阅下面的长问题中的详细信息)。我可以在组的页眉/页脚当前值中显示(例如,按分支分组 - 显示分支名称,按客户端分组 - 客户端名称等)?
长问题:
我想允许我的用户动态更改分组条件。我可以通过两种方式相对容易地实现这一目标:
通过报告参数。将数据集列名称作为参数值传递,在组条件中将其用作
的eval(PARAMS [ “groupColumnName”]。值)
我的问题是我必须在组头中显示当前组的值(并且很高兴在组页脚中重复它)。
我不知道如何为选项1完成。(设计时API)。
对于选项2.我可以在组头/页脚中从2.重复Java脚本,但这不是我想要实现的。我不想重复那个繁琐的java脚本2-3次。我可以以某种方式在组级别定义该值(类似于组的命名查询),然后在组条件,页眉和页脚中重用它吗?
可能的BIRT允许按组名显示分组的当前值?
欢迎任何想法。
答案 0 :(得分:2)
您可以通过以下两种方式之一来实现选项2:
答案 1 :(得分:0)
我做了什么 - 通过DataItem和TextItem的API更改组页眉/页脚。
以防万一有人想现在我的解决方法:
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);
}
}