Hello all,
I am in the process of upgrading from Crystal Server 2008 Embedded to Crystal Server 2013 Embedded.
In the current version (2008) I have a series of reports that have subreports on them and they all work fine.
Now, whenever I run the exact same reports (without any modifications made to them), the report keeps prompting for the parameter values.
I know that this is related to the subreports, because when I disable them, the report is properly displayed, but I need the subreports to be there.
The parameters used by the subreport are created using the "Change Subreport Links" dialog and the "Select data in subreport based on field" option is checked.
The report is embedded in an aspx form, and the code that I use to assign the parameters to the main report is the following (relevant parts in bold):
private void ParametersLoad(XmlDocument paramDoc, XmlDocument criteriaDoc)
{
if ( currentReport.DataDefinition.ParameterFields.Count > 0 )
{
CrystalDecisions.ReportAppServer.DataDefModel.ParameterField tempParam;
CrystalDecisions.ReportAppServer.Controllers.ParameterFieldController paramController;
CrystalDecisions.ReportAppServer.DataDefModel.ParameterFieldDiscreteValue discreteVal;
string sFieldName;
string sValue;
XmlNode paramNode;
bool isStoreProcParam = false;
foreach ( CrystalDecisions.ReportAppServer.DataDefModel.ParameterField paramField in currentReport.DataDefinition.ParameterFields )
{
sValue = "";
tempParam = new CrystalDecisions.ReportAppServer.DataDefModel.ParameterField();
paramField.CopyTo(tempParam, true);
sFieldName = paramField.Name;
isStoreProcParam = false;
if (sFieldName.Trim().StartsWith("@")) //Case of store proc parameter
{
sFieldName = sFieldName.Substring(1);
isStoreProcParam = true;
}
switch (sFieldName)
{
case "sysLocaleID":
sValue = UserLocale.ToString(); //Get User Locale
break;
// logic for other variables that have a preset name
default:
paramNode = paramDoc.SelectSingleNode("//Parameter[Name='" + sFieldName + "']");
if (paramNode != null)
sValue = paramNode.SelectSingleNode("Value").InnerText;
if (sValue == "")
{
if ((paramField.Type <= CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeCurrencyField))
sValue = "0";
else if (paramField.Type == CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeDateTimeField)
sValue = @"01/01/1900";
}
else if (paramField.Type == CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeDateTimeField)
{
DateTime dtValue = DateTime.Parse(sValue);
sValue = dtValue.ToString("G");
}
break;
}
discreteVal = new CrystalDecisions.ReportAppServer.DataDefModel.ParameterFieldDiscreteValueClass();
if (sValue.Trim() != "")
discreteVal.Value = sValue;
else if (isStoreProcParam)
discreteVal.Value = null;
else
discreteVal.Value = "";
tempParam.CurrentValues.Add(discreteVal);
paramController = currentReport.DataDefController.ParameterFieldController;
paramController.Modify(paramField,tempParam);
}
}
}
I have looked in many forums and I found a case that was remarkably similar, which is described here:
Sub Reports continue to prompt for parameter values in VS 2010/CR 13
Unfortunately, this case has no solution yet, but it was logged 3 years ago, so I hope that something exists to prevent this scenario now.
Thanks in advance,
Hector