Расшифровка – это отображение дополнительной, уточняющей информации. Например, для поля "Сумма продаж" в отчете или диаграмме расшифровкой может служить отчет, содержащий список документов, по которым были произведены продажи. Для ячейки отчета "Контрагент" (область легенды для диаграммы) в качестве расшифровки может быть вызвана форма контрагента и т.п.
Механизм работы расшифровок в отчетах и диаграммах Web-расширения работает одинаковым образом. Поэтому далее мы рассмотрим реализацию расшифровок на примере веб-отчетов.
В качестве расшифровок в веб-приложении могут выступать отчеты, диаграммы и формы элементов объектных таблиц. Эти типы расшифровок Web-расширение поддерживает автоматически. Кроме того, пользователь может создать собственную произвольную процедуру обработки вызова расшифровки.
Расшифровки задаются в свойстве Details объекта V8ReportSource (V8ChartSource для диаграмм). Свойство Details представляет собой коллекцию V8ReportSourceDetailsCollection, элементами которой являются объекты типа V8ReportSourceDetails.
Объект V8ReportSourceDetails имеет следующие свойства:
Рассмотрим состав и назначение свойств объекта V8ReportSourceDetailsParameter:
Эти параметры через строку запроса передаются в открываемую форму-расшифровку. Объекты V8ReportSource и V8ChartSource умеют разбирать параметры в строке запроса. Этот разбор происходит в методе InitializeByRequest, который вызывается при загрузке элемента управления, в том случае, если установлено значение свойства InitByRequest. Переданные значения устанавливаются как элементы отбора отчета (диаграммы).
Для открытия формы расшифровки Web-расширение размещает на странице код на JavaScript. Примеры для различных случаев:
1. Вызов в качестве расшифровки формы элемента c помощью автоформы:
Копировать в буфер обмена<script>OpenWindow(“DefaultObjectForm.aspx?KeyValue=value&KeyType=type”, “_blank”);</script>
2. Вызов в качестве расшифровки формы элемента с заданным URL:
Копировать в буфер обмена<script>OpenWindow(“FormName.aspx?KeyValue=value&KeyType=type”, “_blank”);</script>
3. Вызов в качестве расшифровки формы отчета:
Копировать в буфер обмена<script>OpenWindowNoSize(“ReportFormName.aspx?Command=Execute&Name=reportParameter&Type=reportParameterType&ComparisonType=condition&Value=value”, “_blank”);</script>
4. Вызов в качестве расшифровки формы отчета с условием "интервал":
Копировать в буфер обмена<script>OpenWindowNoSize(“ReportFormName.aspx?Command=Execute&Name=reportParameter&Type=reportParameterType&ComparisonType=condition&ValueFrom=value1&ValueTo=value2”, “_blank”);</script>
5. Вызов в качестве расшифровки формы отчета в случае нескольких параметров:
Копировать в буфер обмена<script>OpenWindowNoSize(“ReportFormName.aspx?Command=Execute&Name1=reportParameter1&Type1=reportParameterType1&ComparisonType1=condition1&Value1=value1 &Name2=reportParameter2&Type2=reportParameterType2&ComparisonType2=condition2&Value2=value2);</script>
Функции OpenWindow и OpenWindowNoSize расположены в js-файле скриптов V8CoreScripts.js. Параметр Command=Execute указывает на немедленное формирование и отображение отчета (диаграммы).
Связь полей отчета с расшифровками задается при помощи свойства FieldFormats объекта V8ReportSource (V8ChartSource). Свойство FieldFormats представляет собой коллекцию V8ReportSourceFieldFormatCollection, состоящую из элементов типа V8ReportSourceFieldFormat (для диаграмм V8ChartSourceFieldFormatCollection и V8ChartSourceFieldFormat соответственно).
Объекты V8ReportSourceFieldFormat (V8ChartSourceFieldFormat) служат для описания формата полей отчета (диаграммы) и для связи полей с расшифровками. Рассмотрим свойства этих объектов, предназначенных для работы расшифровок:
В тех случаях, когда для решаемой задачи не достаточно функциональности, предоставляемой Web-расширением, пользователь может реализовать собственный алгоритм отображения расшифровки. Для этого служит событие Details элемента управления V8ReportViewer (V8ChartViewer).
Задание обработчика для этого события отменяет встроенную обработку расшифровок. Обратиться к встроенной функциональности можно при помощи вызова метода OnDetails объекта V8ReportSourceBase, который является предком для объектов V8ReportSource и V8ChartSource.
Обработчик события Details выглядит следующим образом:
Копировать в буфер обмена private void ReportViewer_Details(object source, _1C.V8.WebControls.V8DetailsEventArgs e)
{
}
В параметре source передается объект V8ReportViewer (V8ChartViewer), в котором произошло событие расшифровки. Параметр e имеет тип V8DetailsEventArgs, содержащий следующие свойства:
Для получения значения, содержащегося в ячейке, для которой вызвана расшифровка, можно воспользоваться следующим кодом:
Копировать в буфер обмена private void ReportViewer_Details(object source, _1C.V8.WebControls.V8DetailsEventArgs e)
{
int index = ReportSource.Details.IndexOf(e.DetailsName);
if (index > -1)
{
Hashtable cellValues = ReportSource.GetCellValues(e.RowGroup, e.ColumnGroup);
object value = cellValues["ИмяПоля"];
...
}
}
Далее возможна реализация различных алгоритмов отображения информации в качестве расшифровки. В качестве простого примера – отображение значения в ячейке при помощи javascript-функции alert:
Копировать в буфер обмена private void ReportViewer_Details(object source, _1C.V8.WebControls.V8DetailsEventArgs e)
{
int index = ReportSource.Details.IndexOf(e.DetailsName);
if (index > -1)
{
Hashtable cellValues = ReportSource.GetCellValues(e.RowGroup, e.ColumnGroup);
object value = cellValues["ИмяПоля"];
RegisterStartupScript("Startup1", "<script>alert('" + value.ToString() + "');</script>");
}
ReportSource.Refresh();
}