IPrxFlash.FlashCallAction

Синтаксис Fore

FlashCallAction: String;

Синтаксис Fore.NET

FlashCallAction: string;

Описание

Свойство FlashCallAction определяет обработчик событий FlashCall для flash-ролика.

Комментарии

Для использования обработчика swf-ролик должен использовать ExternalInterface. Flash-объект не требует специальной подготовки и может быть произвольным.

В качестве обработчика не могут выступать макросы, реализованные в классах. В зависимости от того где находится реализация макроса, различается способ указания пути к макросу в данном свойстве:

В модулях/формах репозитория реализация пользовательских макросов должна производиться в глобальном пространстве имен (Global Scope).

Пример Fore

Для выполнения следующего примера создайте модуль с идентификатором «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) <> NullThen
        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(0As IPrxTable).TabSheet;
    Flash := Tab.Objects.Item(0).Extension As IPrxFlash;
    Flash.FlashCallAction := "Module.FlashCall";
    (Report As IMetabaseObject).Save;
End Sub UserProc;

После выполнения примера будет определен обработчик событий для flash-объекта. При щелчке по региону карты будет инвертирована отметка в элементе управления. Например, при щелчке по Белгородской области в справочнике территорий будет установлена/снята отметка элемента «Белгородская область». При изменении отметки область данных будет вычислена. Для корректной отметки идентификаторы регионов в топооснове должны совпадать с идентификаторами в справочнике.  

Пример Fore.NET

Создайте модуль с идентификатором «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[0As IPrxTable).TabSheet;
    Flash := Tab.Objects.Item[0].Extension As IPrxFlash;
    Flash.FlashCallAction := "Module.FlashCall";
    (Report As IMetabaseObject).Save();
End Sub;

После выполнения примера будет определен обработчик событий для flash-объекта. При щелчке по региону карты будет инвертирована отметка в элементе управления. Например, при щелчке по Белгородской области в справочнике территорий будет установлена/снята отметка элемента «Белгородская область». При изменении отметки область данных будет вычислена. Для корректной отметки идентификаторы регионов в топооснове должны совпадать с идентификаторами в справочнике.

См. также:

IPrxFlash