When we deploy a report SSRS generates the following error:
There is an error on line 58 of custom code: [BC30201] Expression expected
However, the report works fine on preview mode and displays the field correctly.
The custom code segment here is also written and tested in visual studio.
Here's the custom code:
If (evaluationDate.Day = 31) Then '* affected line
returnValue.Append(String.Format("{0}{1:dd.MM}{2}", _
If(index = 2, " und ", String.Empty), _
New DateTime(evaluationDate.Year, evaluationDate.Month, lastDayOfMonthDictionary(evaluationDate.Month)), _
If(index = 2, ".", String.Empty)))
End If
As you can see, the problem is by an IF..THEN block. evaluationDate is of type DateTime and the value is either equal to the DateTime argument startdate
or six months ahead of startDate
- which is a datetime argument in the function's signature.
I cannot see what's wrong with this and I need to know what I can do to resolve this issue. Any ideas?
The conclusion - SSRS has an evil way to deal with ternaries, even though it fully expects VB code in the custom code segment.
This error I had received was misdirecting, and pointed to the wrong line even - it was the line right below this one I marked in the question.
Notice the Usage of ternaries :
If(index = 2, " und ", String.Empty)
- SSRS tries to run the If-ternary (as you would declare it in VB.NET) as aIf..Then
block - and because noThen
is found, and there are multiple arguments comma-separated, this muddles SSRS and thus it printsExpression Expected
The way to fix this issue is the Traditional SSRS Expressional way
This should still allow you to preview your code (even the normal
If
allowed you to preview, but breaks during deploy)