Skip to Content
0
Former Member
Nov 26, 2008 at 09:47 PM

Random Error while accessing Parameterfields

206 Views

Hi

We are Developing with VS2008 (Visual Basic) and are using the Crystal Reports 2008 SP 1 runtime.

Ouer Report code works primerly like this:

1.) we open the Report with

g_oCRPReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument

g_oCRPReport.Load(sReportFileName)

2.) We set the DB-Connection

3.) We set some report spezific parameters

4.) We set all the remaining paraeters, with have no values set to an default value, in order to prevent showing the user an dialog witch asks for some parameters, he dosn't know anything about.

5.) Display the report in a 'CrystalDecisions.Windows.Forms.CrystalReportViewer'

Sometimes, wenn we try to set the parameter fields, we get the folowing error, in the beginning of Step 4:

At Line: 3

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

bei CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition.get_CurrentValues()

bei CrystalDecisions.CrystalReports.Engine.InternalParameterValues..ctor(ParameterFieldDefinition fieldDef, Boolean isCurrentValues)

bei CrystalDecisions.CrystalReports.Engine.InternalParameterField..ctor(ParameterFieldDefinition field)

bei CrystalDecisions.CrystalReports.Engine.InternalParameterFields..ctor(ParameterFieldDefinitions parameterFields)

bei CrystalDecisions.CrystalReports.Engine.ReportDocument.get_ParameterFields()

bei ITS.Reports.modReport.SetDefaultParameterValues(ReportDocument m_Report

Other errors, we get less often are:

At Line: 2

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

bei CrystalDecisions.CrystalReports.Engine.DataDefinition.get_ParameterFields()

and

At Line: 27 and 29

System.NullReferenceException: Object reference not set to an instance of an object.

at CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition.get_EnableAllowEditingDefaultValue()

The Code of the function from Step 4:

Friend Sub SetDefaultParameterValues(ByVal m_Report As CrystalDecisions.CrystalReports.Engine.ReportDocument)

Dim blnOK As Boolean

Dim lngIndex As Integer

Dim pf As CrystalDecisions.Shared.ParameterField = Nothing

Dim pfd As CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition

Dim pvs As CrystalDecisions.Shared.ParameterValues

Dim pfs As CrystalDecisions.Shared.ParameterFields

Dim lngErrNr As Integer = -1

Dim strErrDesc As String = Nothing

If m_Report Is Nothing Then

Throw New System.ArgumentNullException("m_Report", "Report Object not Set")

End If

Try

1: lngIndex = -3

2: If m_Report.DataDefinition.ParameterFields IsNot Nothing Then

3: pfs = m_Report.ParameterFields

4: If pfs.Count > 0 Then

5: lngIndex = -2

6: For Each pf In pfs 'crv9.ParameterFieldInfo

7: If True Then 'pf.ReportName = m_Report.Name Then

8: lngIndex = pfs.IndexOf(pf)

9: If lngIndex >= 0 Then

10: pfd = m_Report.DataDefinition.ParameterFields(lngIndex)

11: If Not pfd Is Nothing AndAlso _

pfd.Kind = CrystalDecisions.Shared.FieldKind.ParameterField Then

12: If Not pf.HasCurrentValue Then

13: If pf.ReportName = m_Report.Name Then

14: blnOK = True

Else

15: blnOK = Not pfd.IsLinked

End If

16: If blnOK Then

17: pvs = New CrystalDecisions.Shared.ParameterValues

18: If pf.EnableNullValue Then

19: pvs.AddValue(System.DBNull.Value)

Else

20: Select Case pf.ParameterValueType

Case CrystalDecisions.Shared.ParameterValueKind.BooleanParameter

21: pvs.AddValue(False)

Case CrystalDecisions.Shared.ParameterValueKind.CurrencyParameter, CrystalDecisions.Shared.ParameterValueKind.NumberParameter

22: pvs.AddValue(0)

Case CrystalDecisions.Shared.ParameterValueKind.DateParameter, CrystalDecisions.Shared.ParameterValueKind.DateTimeParameter, CrystalDecisions.Shared.ParameterValueKind.TimeParameter

23: pvs.AddValue(New Date)

Case CrystalDecisions.Shared.ParameterValueKind.StringParameter

24: pvs.AddValue("")

Case Else

25: Debug_Assert(False, "unbekannter Typ: " & pf.ParameterValueType)

End Select

End If

26: pfd.ApplyCurrentValues(pvs)

27: If pfd.EnableAllowEditingDefaultValue Then

28: pfd.EnableAllowEditingDefaultValue = Not pfd.HasCurrentValue

29: If pfd.EnableAllowEditingDefaultValue Then

30: pfd.CurrentValues.Add(pvs(0))

31: pfd.EnableAllowEditingDefaultValue = Not pfd.HasCurrentValue

End If

End If

32: If pf.AllowCustomValues Then

33: pf.AllowCustomValues = Not pfd.HasCurrentValue

34: If pf.AllowCustomValues Then

35: pf.CurrentValues.Add(pvs(0))

'pf.ReportParameterType

36: pf.AllowCustomValues = Not pfd.HasCurrentValue

End If

End If

End If

End If

37: If pf.AllowCustomValues Then

38: pf.AllowCustomValues = Not pf.HasCurrentValue

End If

End If

End If

39: lngIndex = -1

End If

Next

End If

End If

ParamErrorReturn:

40: lngIndex = -1

Catch ex As Exception

lngErrNr = Err.Number

strErrDesc = "At Line: " & Err.Erl & " Err.Desc: '" + Err.Description + "'"

If pf IsNot Nothing Then

strErrDesc += GetParameterName(pf) + "' Index: " & lngIndex

Else

strErrDesc += "Index: " & lngIndex

End If

If m_Report IsNot Nothing Then

strErrDesc += " Report: '" + m_Report.FileName + "'"

End If

strErrDesc += " " + itsData.GetExceptionString(ex) + " Stack: '" + System.Environment.StackTrace + "'"

...GenerateError(lngErrNr, strErrDesc, Name, "SetDefaultParameterValues", False, True, ProjectName)

If lngIndex > -1 Then

GoTo ParamErrorReturn

End If

End Try

End Sub

Tanks.