Bug 152287 Problem about drill through to toc with linked expression
Steps to reproduce: 1.New a report"R1", add a label to the layout 2.New a sample datasource and a data set from table "OFFICE" 3.Add a list, binding with the data set to the layout, add a group"group1" on the table, group key is "COUNTRY" 4.Add a column binding to the table, "total=total.count()", aggregate on "group1" 5.Set group toc to row["total"] 6.Select the label, add a drill-through hyperlink. Set the target report to "R1.rptdesign", tick "TOC entry" , and set linked expression to 1 7.Preview the report in Web Viewer, click the label Expected result: Link to the first group page Actual result: Invalid bookmark: null org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.prepareParameters(Unknown Source) org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.__execute(Unknown Source) org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(Unknown Source) org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(Unknown Source) org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(Unknown Source) org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPage(Unknown Source) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:324) org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(Unknown Source) org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(Unknown Source) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:324) org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:760) org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) javax.servlet.http.HttpServlet.service(HttpServlet.java:853) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) org.eclipse.tomcat.internal.EclipseErrorReportValve.invoke(EclipseErrorReportValve.java:153) org.apache.catalina.core.StandardPipeline$StandardPipelineValveCo
viewer/org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/service/BirtViewerReportService.java
.getPattern( );
		String displayFormat = engineParam.getDisplayFormat( );
		String displayName = engineParam.getDisplayName( );
		String helpText = engineParam.getHelpText( );
		String promptText = engineParam.getPromptText( );
		int dataType = engineParam.getDataType( );
		int controlType = engineParam.getControlType( );
		boolean hidden = engineParam.isHidden( );
		boolean allowNull = engineParam.allowNull( );
		boolean allowBlank = engineParam.allowBlank( );
		boolean mustMatch = scalarParamHandle == null
				? false
				: scalarParamHandle.isMustMatch( );
		boolean concealValue = engineParam.isValueConcealed( );
		ParameterDefinition param = new ParameterDefinition( name, pattern,
				displayFormat, displayName, helpText, promptText, dataType,
				controlType, hidden, allowNull, allowBlank, mustMatch,
				concealValue, group, null );
		return param;
	}
	
	
	private static Collection convertEngineParameterSelectionChoice(
			Collection params )
	{
		if ( params == null )
			return Collections.EMPTY_LIST;
		List ret = new ArrayList( );
		for ( Iterator it = params.iterator( ); it.hasNext( ); )
		{