if ( beforeFirstRow ) { DataException e = new DataException( ResourceConstants.NO_CURRENT_ROW ); logger.logp( Level.FINE, ResultIterator.class.getName( ), "getValue", "Cursor has no current row.", e ); throw e; }
	public Object getValue( IBaseExpression dataExpr ) throws DataException	{		logger.logp( Level.FINE,				ResultIterator.class.getName( ),				"getValue",				"get of value IBaseExpression: " + LogUtil.toString( dataExpr ) );		checkStarted( );		// Must advance to first row before calling getValue		if ( beforeFirstRow )		{			DataException e = new DataException( ResourceConstants.NO_CURRENT_ROW );			logger.logp( Level.FINE,					ResultIterator.class.getName( ),					"getValue",					"Cursor has no current row.",					e );			throw e;		}		Object exprValue = null;				Object handle = dataExpr.getHandle( );		if ( handle instanceof CompiledExpression )		{			CompiledExpression expr = (CompiledExpression) handle;			Context cx = Context.enter( );			Object value = null;			try			{				value = evaluateCompiledExpression( expr, odiResult, cx, scope );			}			finally			{				Context.exit( );			}			try			{				exprValue = DataTypeUtil.convert( value, dataExpr.getDataType( ) );			}			catch ( BirtException e )			{				throw new DataException( ResourceConstants.INCONVERTIBLE_DATATYPE,						new Object[]{								value,								value.getClass( ),								DataType.getClass( dataExpr.getDataType( ) )						} );			}		}		else if ( handle instanceof ConditionalExpression )		{			ConditionalExpression ce = (ConditionalExpression) handle;			Object resultExpr = getValue( ce.getExpression( ) );			Object resultOp1 = ce.getOperand1( ) != null					? getValue( ce.getOperand1( ) ) : null;			Object resultOp2 = ce.getOperand2( ) != null					? getValue( ce.getOperand2( ) ) : null;			String op1Text = ce.getOperand1( ) != null ? ce.getOperand1( )					.getText( ) : null;			String op2Text = ce.getOperand2( ) != null ? ce.getOperand2( )					.getText( ) : null;			exprValue = ScriptEvalUtil.evalConditionalExpr( resultExpr,					ce.getOperator( ),					ScriptEvalUtil.newExprInfo( op1Text, resultOp1 ),					ScriptEvalUtil.newExprInfo( op2Text, resultOp2 ) );		}		else		{			DataException e = new DataException( ResourceConstants.INVALID_EXPR_HANDLE );			logger.logp( Level.FINE,					ResultIterator.class.getName( ),					"getValue",					"Invalid expression handle.",					e );			throw e;		}				this.getRdSaveUtil( ).doSaveExpr( dataExpr, exprValue );				return exprValue;	}