FlashCallAction: String;
FlashCallAction: string;
Свойство FlashCallAction определяет обработчик событий FlashCall для flash-ролика.
Для использования обработчика swf-ролик должен использовать ExternalInterface. Flash-объект не требует специальной подготовки и может быть произвольным.
В качестве обработчика не могут выступать макросы, реализованные в классах. В зависимости от того где находится реализация макроса, различается способ указания пути к макросу в данном свойстве:
Макрос реализован в модуле/форме репозитория: <идентификатор модуля/формы>.<наименование макроса>
Макрос реализован в одном из объектов сборки репозитория: <идентификатор сборки>.<наименование макроса>
В модулях/формах репозитория реализация пользовательских макросов должна производиться в глобальном пространстве имен (Global Scope).
Для выполнения следующего примера создайте модуль с идентификатором «Module» (процедуры «FlashCall» и «SelectDeselectEl», подключите сборки «Ui», «Tab», «Dimensions» и «Report»), который будет обработчиком события:
Public Sub FlashCall(Flash: IPrxFlash; Args: IPrxFlashCallEventArgs);
Var
i, j, iEl: integer;
a: Array;
Begin
If Args.Arguments <> Null Then
For i := 0 To Args.Arguments.Length - 1 Do
If Args.Arguments[i] Is array Then
a := Args.Arguments[i] As array;
For j := 0 To a.Length - 1 Do
If ((a[j] As String) <> "<undefined/>") Then
iEl := Args.Arguments[j] As Integer;
End If;
End For;
Else
If ((Args.Arguments[i] As String) <> "<undefined/>") Then
iEl := Args.Arguments[i] As Integer;
End If;
End If;
End For;
End If;
SelectDeselectEl(iEl);
End Sub FlashCall;
Public Sub SelectDeselectEl(i: integer); //отметка или снятие отметки с i элемента в справочнике
Var
Sel: IDimSelection;
id: integer; //индекс элемента в справочнике
Begin
Sel := PrxReport.ActiveReport.Controls.Item(0).Dimension.Selection;
id := Sel.Dimension.Elements.FindById(i.ToString); //находим индекс элемента по идентификатору
If (Sel.IsElementSelected(id)) Then
sel.DeselectElement(id, False);
Else
sel.SelectElement(id, False);
End If;
If (Prxreport.ActiveReport.DataIslands.Item(0) <> Null) Then
Prxreport.ActiveReport.DataIslands.Item(0).Recalc;
End If;
End Sub SelectDeselectEl;
Затем создайте регламентный отчет с идентификатором «Report» и добавьте созданный модуль в модули отчета. На листе отчета разместите flash-объект, который использует ролик FlashMapEngine.swf. Для flash-объекта задайте строку инициализации, в которой отключена передача событий через onFsCommand (fscomand='0') и не указан атрибут «onClick». Добавьте в отчет источник данных, содержащий справочник территорий, для которого создайте элемент управления. Создайте срез для источника данных и разместите его на листе отчета. В следующем модуле подключите системные сборки: Metabase, Report, Tab.
Sub UserProc;
Var
MB: IMetabase;
Report: IPrxReport;
Tab: ITabSheet;
Flash: IPrxFlash;
Begin
MB := MetabaseClass.Active;
Report := MB.ItemById("Report").Edit As IPrxReport;
Tab := (Report.Sheets.Item(0) As IPrxTable).TabSheet;
Flash := Tab.Objects.Item(0).Extension As IPrxFlash;
Flash.FlashCallAction := "Module.FlashCall";
(Report As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера будет определен обработчик событий для flash-объекта. При щелчке по региону карты будет инвертирована отметка в элементе управления. Например, при щелчке по Белгородской области в справочнике территорий будет установлена/снята отметка элемента «Белгородская область». При изменении отметки область данных будет вычислена. Для корректной отметки идентификаторы регионов в топооснове должны совпадать с идентификаторами в справочнике.
Создайте модуль с идентификатором «Module» (процедуры «FlashCall» и «SelectDeselectEl»), приведенный в примере выше. Обработчик события на Fore.NET не поддерживается, так как описание пользовательских макросов в .NET-модулях/.NET-формах производится в каком-либо классе.
Затем создайте регламентный отчет с идентификатором «Report» и добавьте созданный модуль в модули отчета. На странице отчета разместите flash-объект, который использует ролик FlashMapEngine.swf. Для flash-объекта задайте строку инициализации, в которой отключена передача событий через onFsCommand (fscomand='0') и не указан атрибут «onClick». Добавьте в отчет источник данных, содержащий справочник территорий, для которого создайте элемент управления. Создайте срез для источник данных и разместите на листе область данных.
Указанный пример является точкой входа для какой-либо .NET-сборки. В модуле подключите системные сборки: Metabase, Report, Tab.
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Tab;
Imports Prognoz.Platform.Interop.Report;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Report: IPrxReport;
Tab: ITabSheet;
Flash: IPrxFlash;
Begin
MB := Params.Metabase;
Report := MB.ItemById["Report"].Edit() As IPrxReport;
Tab := (Report.Sheets.Item[0] As IPrxTable).TabSheet;
Flash := Tab.Objects.Item[0].Extension As IPrxFlash;
Flash.FlashCallAction := "Module.FlashCall";
(Report As IMetabaseObject).Save();
End Sub;
После выполнения примера будет определен обработчик событий для flash-объекта. При щелчке по региону карты будет инвертирована отметка в элементе управления. Например, при щелчке по Белгородской области в справочнике территорий будет установлена/снята отметка элемента «Белгородская область». При изменении отметки область данных будет вычислена. Для корректной отметки идентификаторы регионов в топооснове должны совпадать с идентификаторами в справочнике.
См. также: