|
16.08.2007, 13:37 | #1 |
Moderator
|
Вечные проблемы с фильтром
Доброго времени суток, коллеги. Насколько я понял все испытывают проблемы с выводом фильтра и его параметров в отчетах. Для себя я пришел к выводу, что, видимо, нет "идеологически" правильного решения этой проблемы. Остается только взлом:
берем CRMReports\viewer\viewer.aspx и правим. Например этот участок кода: var iFormRequestLength = getFormRequestLength (renderForm) + 200; if (iFormRequestLength < 2048) { returntrue; } else { iFormRequestLength = iFormRequestLength - iSummaryLen + getRSEncodedLength(LOCID_RPTVIEW_NOSUMMARY); if (iFormRequestLength < 2048) { setFormParameter (renderForm, "CRM_FilterText", LOCID_RPTVIEW_NOSUMMARY); returntrue; } else { alert(LOCID_RPTVIEW_FILTERTOOLONG); returnfalse; } повинен в том что выводится всеми нами любимая строчка "Не предоставляется из-за ограничений по размеру". Кроме того все мы уже столкнулись с удивительным фактом того, что мы не можем сформировать привычную "шапку" отчета, так как параметры доступны нам только в виде неудобоваримой строчки вида: "Продукты: дата создания...". Выход: делаем врезку и скриптом выковыриваем нужные параметры. Остается проблема: как передать их в отчет? Другово решения я не нашел. Или есть еще идеи? |
|
20.08.2007, 11:56 | #2 |
Участник
|
Уже не раз сталкивалась с такой проблемой.
Если нужно выводить что-то в шапке, делаю через параметры. |
|
20.08.2007, 12:33 | #3 |
Moderator
|
Параметры убивают всю красоту типа календариков и лукапов. Кроме того с параметрами типа DateTime есть масса проблем: они могут вставляться в виде dd.MM.yyyy, а считываться в виде mm/dd/yy и в результате куча проблем! Я особо не копал в это направлении, но похоже перехватывать и преобразовывать их самостоятельно не получится.
|
|
20.08.2007, 14:19 | #4 |
Участник
|
Точно не могу сказать, но вроде бы в 2005 студии есть в параметрах lookup.
|
|
21.08.2007, 08:34 | #5 |
Moderator
|
|
|
21.08.2007, 09:40 | #6 |
Участник
|
Это точно
|
|
28.08.2007, 15:45 | #7 |
Moderator
|
2Enot Poloskun:
"Кроме того с параметрами типа DateTime есть масса проблем: они могут вставляться в виде dd.MM.yyyy, а считываться в виде mm/dd/yy и в результате куча проблем!" Был выпущен специальный патч для решения данной проблемы. См. статью KB936305 |
|
26.11.2007, 09:15 | #8 |
Moderator
|
Пост старый и никого, кроме меня, похоже эта проблема не волнует , но все же решил поделиться своим открытием... Нормальную шапку отчета все же можно выводить!
В студии, в свойствах отчета: меню Report -> Report Properties. Есть такая вкладка Code. Сюда можно поместить свой код, причем не на скрипотвых языках, а на полноценном Visual Basic .NET (если конечно считать этот язык полноценным). Вот таким кодом, например, можно выковыривать свои параметры из строки фильтра: Код: Const defaultVal As String = "Не указано" Const backspace As Char = Chr(10) Const newline As Char = Chr(13) Const space As Char = Chr(32) Function getParameter(ByVal filterText As String, ByVal className As String, ByVal attributeName As String, ByVal expression As String) As String Dim result As String = defaultVal Dim pos As Integer = filterText.IndexOf(className, StringComparison.OrdinalIgnoreCase) If (pos <> -1) Then pos = filterText.IndexOf(attributeName, pos + className.Length, StringComparison.OrdinalIgnoreCase) If (pos <> -1) Then pos = filterText.IndexOf(expression, pos + attributeName.Length, StringComparison.OrdinalIgnoreCase) If (pos <> -1) Then Dim startPos As Integer = pos + expression.Length pos = filterText.IndexOf(Chr(10), pos + expression.Length) result = filterText.Substring(startPos, pos - startPos).Trim(New Char() {backspace, newline, space}) End If End If End If Return result End Function Code.GetParameter(Parameters!CRM_FilterText.Value, "Заказ", "Дата создания", "в указанную дату или ранее") Достаточно удобное и простое решение. Есть тем не менее и более правильный способ: есть возможность создать и использовать в любом отчете целую библиотеку с любыми удобными для вас функциями и константами! Кроме того, так вам будет доступна вся мощь .NET и снимается ограничение на кодирование только на Basic. Я пошел именно этой дорогой. Короече, если кому-то интересно подробнее об этом можно узнать тут: http://msdn2.microsoft.com/ru-ru/library/ms155798.aspx http://msdn2.microsoft.com/en-us/library/ms153561.aspx http://msdn2.microsoft.com/en-us/library/ms155034.aspx http://www.microsoft.com/Rus/Msdn/pu...RSCstCode.mspx Если что, спрашивайте. Последний раз редактировалось Артем Enot Грунин; 26.11.2007 в 09:22. |
|
|
За это сообщение автора поблагодарили: Roman08 (1). |