В строке 58 пользовательского кода произошла ошибка: [BC30201] Ожидается выражение
При развертывании отчета SSRS выдает следующую ошибку:
В строке 58 пользовательского кода произошла ошибка: [BC30201] Ожидается выражение
Однако отчет отлично работает в режиме предварительного просмотра и правильно отображает поле.
Сегмент пользовательского кода здесь также написан и протестирован в visual studio.
Вот пользовательский код:
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
Как видите, проблема в блоке IF..THEN. valuationDate имеет тип DateTime и значение либо равно аргументу DateTime startdate
или шесть месяцев вперед startDate
- который является аргументом даты и времени в сигнатуре функции.
Я не вижу, что с этим не так, и мне нужно знать, что я могу сделать, чтобы решить эту проблему. Есть идеи?
1 ответ
Вывод - у SSRS есть плохой способ иметь дело с троичными, хотя он полностью ожидает VB-код в сегменте пользовательского кода.
Эта ошибка, которую я получил, имела неверное направление и даже указывала на неправильную строку - это была строка прямо под этой, которую я отметил в вопросе.
Обратите внимание на использование троичных: If(index = 2, " und ", String.Empty)
- SSRS пытается запустить If-троицу (как вы объявили бы это в VB.NET) как If..Then
блокировать - а потому нет Then
найдено, и есть несколько аргументов через запятую, это запутывает SSRS и, таким образом, печатает Expression Expected
Способ решения этой проблемы - традиционный экспрессивный способ SSRS.
'Instead of this:
If(index = 2, " und ", String.Empty)
'Use This:
IIf(index = 2, " und ", String.Empty)
Это все равно должно позволить вам предварительно просмотреть ваш код (даже обычный If
разрешен предварительный просмотр, но перерывы во время развертывания)