To modify a parameter field

  1. Access the parameters in a report by using the DataDefinition.getParameterFields method.
    Fields<IParameterField> parameterFields = rcd.getDataDefController().getDataDefinition().getParameterFields();
    IParameterField parameterField = (IParameterField)parameterFields.getField(0);
  2. Make a copy of the parameter.
    IParameterField newParameterField = (IParameterField) parameterField.clone(true);
    newParameterField.getCurrentValues().removeAllElements();
  3. Determine the type of parameter value then modify the parameter.
    The following code modifies the parameter if it is discrete.
    ParameterValueRangeKind kind = parameterField.getValueRangeKind();
          
    if (kind == ParameterValueRangeKind.discrete)
    {
      String discreteValueText = "Canada";
      ParameterFieldDiscreteValue discreteValue = new ParameterFieldDiscreteValue();
      discreteValue.setValue(discreteValueText);
      newParameterField.getCurrentValues().add(discreteValue);
    }
  4. Use the ParameterFieldController.modify method to modify the original parameter field based on the changes you have made in the copy.
    ParameterFieldController parameterFieldController =	rcd.getDataDefController().getParameterFieldController();
    parameterFieldController.modify(parameterField, newParameterField);
Example: 
The following code gets the first parameter in the report and changes the default value of a discrete parameter:
void modifyParameterField(ReportClientDocument rcd) throws ReportSDKException
{
  Fields<IParameterField> parameterFields = rcd.getDataDefController().getDataDefinition().getParameterFields();
  IParameterField parameterField = (IParameterField)parameterFields.getField(0);

  IParameterField newParameterField = (IParameterField) parameterField.clone(true);
  newParameterField.getCurrentValues().removeAllElements();
        
  ParameterValueRangeKind kind = parameterField.getValueRangeKind();
  if (kind == ParameterValueRangeKind.discrete)
  {
    String discreteValueText = "Canada";
    ParameterFieldDiscreteValue discreteValue = new ParameterFieldDiscreteValue();
    discreteValue.setValue(discreteValueText);
    newParameterField.getCurrentValues().add(discreteValue);
  }
  ParameterFieldController parameterFieldController = rcd.getDataDefController().getParameterFieldController();
  parameterFieldController.modify(parameterField, newParameterField);
}
This list includes the classes used by the sample code:
  • com.crystaldecisions.sdk.occa.report.application.ParameterFieldController
  • com.crystaldecisions.sdk.occa.report.application.ReportClientDocument
  • com.crystaldecisions.sdk.occa.report.data.Fields
  • com.crystaldecisions.sdk.occa.report.data.IParameterField
  • com.crystaldecisions.sdk.occa.report.data.ParameterField
  • com.crystaldecisions.sdk.occa.report.data.ParameterValueRangeKind
  • com.crystaldecisions.sdk.occa.report.data.ParameterFieldDiscreteValue
  • com.crystaldecisions.sdk.occa.report.lib.ReportSDKException