vb.netreporting-servicescustom-code

There is an error on line 58 of custom code: [BC30201] Expression expected


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?


Solution

  • 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 a If..Then block - and because no Then is found, and there are multiple arguments comma-separated, this muddles SSRS and thus it prints Expression Expected

    The way to fix this issue is the Traditional SSRS Expressional way

    'Instead of this:
    If(index = 2, " und ", String.Empty)
    
    'Use This:
    IIf(index = 2, " und ", String.Empty)
    

    This should still allow you to preview your code (even the normal If allowed you to preview, but breaks during deploy)