IEaxMapChart.Action

Синтаксис Fore

Action: String;

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

Action: string;

Описание

Свойство Action определяет макрос для обработки событий карты.

Комментарии

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

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

В .NET-модулях/.NET-формах репозитория реализация пользовательских макросов должна производиться в каком-либо классе. Макрос должен представлять из себя  статическую процедуру/функцию.

Примечание. Объект среды разработки, в котором содержится реализация макроса, должен быть подключен к регламентному отчету.

Пример Fore

Для выполнения примера в репозитории необходимо наличие:

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

Добавьте ссылки на системные сборки: Drawing, Express, Metabase, Report, Tab, Topobase, Visualizators.

Sub UserProc;
Var
    MB: IMetabase;
    Report: IPrxReport;
    Module: IMetabaseObjectDescriptor;
    ActiveSheet: IPrxSheet;
    Assemb: IPrxAssemblies;
    i: Integer;
    Table: IPrxTable;
    Objects: ITabObjects;
    AddObj: ITabObject;
    Obj: IPrxVisualizer;
    DA: IEaxDAtaArea;
    Slice: IEaxDataAreaSlice;
    SlObj: IEaxObject;
    MapChart: IEaxMapChart;
Begin
    // Получим репозиторий
    MB := MetabaseClass.Active;
    // Получим регламентный отчет
    Report := MB.ItemById("REG_REPORT_ACTION").Edit As IPrxReport;
    // Подключим модуль с макросом к регламентному отчету
    Module := MB.ItemById("IEAXMAPCHART_ACTION");
    Assemb := Report.Assemblies;
    i := Assemb.Add(Module);
    // Создадим новый объект «визуализатор»
    ActiveSheet := Report.ActiveSheet;
    Table := ActiveSheet As IPrxTable;
    Objects := Table.TabSheet.Objects;
    AddObj := Objects.Add("PrxVisualizer"New GxRectF.Create(00100100));
    Obj := AddObj.Extension As IPrxVisualizer;
    // Получим аналитическую область данных
    DA := Report.DataArea;
    // Получим срез данных
    Slice := DA.Slices.Item(0);
    // В качестве визуализатора добавим карту
    SlObj := Slice.Views.AddByType(EaxObjectType.MapChart) As IEaxVisualizer;
    Obj.EaxVisualizer := SlObj As IEaxVisualizer;
    MapChart := Obj.EaxVisualizer As IEaxMapChart;
    MapChart.Enabled := True;
    MapChart.Visible := True;
    MapChart.Topobase := MB.ItemById("MAP").Edit As ITopobase;
    // Определим макрос для обработки событий
    MapChart.Action := "REG_REPORT_ACTION.Action";
    MapChart.DoAction("RF");
    // Обновим карту
    MapChart.Refresh;
    // Сохраним изменения
    (Report As IMetabaseObject).Save;
End Sub UserProc;

// Обработчик событий
Public Sub Action(n: Variant);
Var
    Table: IPrxTable;
    Objects: ITabObjects;
    Object: IPrxVisualizer;
    MapChart: IEaxMapChart;
    Map: IVZMapChart;
    i: Integer;
    RootLayer: IVZMapChartLayer;
    Shapes: IVZMapChartShapes;
Begin
    If n.IsNull Or n.IsEmpty Then
        Return;
    End If;
    // Получим карту в качестве визуализатора
    Table := PrxReport.ActiveReport.ActiveSheet As IPrxTable;
    Objects := Table.TabSheet.Objects;
    Object := Objects.Item(0).Extension As IPrxVisualizer;
    MapChart := Object.EaxVisualizer As IEaxMapChart;
    Map := MapChart.MapChart;
    // Получим слой карты
    RootLayer := Map.RootLayer.LayerById("Regions");
    // Получим территории карты
    Shapes := RootLayer.Shapes;
    // В ячейке G8 будет отображаться идентификатор территории
    If n.VarType = ForeVariantType.String Then
        For i := 0 To Shapes.Count - 1 Do
        If Shapes.Item(i).Name = (n As String) Then
            Table.TabSheet.Cell(77).Value := Shapes.Item(i).Name;
        End If;
        End For;
    End If;
End Sub Action;

После выполнения примера в регламентном отчете будет создан визуализатор на основе карты. Карта будет использовать обработчик событий, который реализует щелчок основной кнопки мыши по территории с идентификатором «RF». В результате в ячейку G8 выведется наименование территории.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore совпадают с примером Fore.NET.

Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;
Imports Prognoz.Platform.Interop.Topobase;
Imports Prognoz.Platform.Interop.Visualizators;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Report: IPrxReport;
    Module: IMetabaseObjectDescriptor;
    ActiveSheet: IPrxSheet;
    Assemb: IPrxAssemblies;
    i: Integer;
    Table: IPrxTable;
    Objects: ITabObjects;
    AddObj: ITabObject;
    Rect: GxRectF = New GxRectFClass();
    Obj: IPrxVisualizer;
    DA: IEaxDAtaArea;
    Slice: IEaxDataAreaSlice;
    SlObj: IEaxObject;
    MapChart: IEaxMapChart;
Begin
    // Получим репозиторий
    MB := Params.Metabase;
    // Получим регламентный отчет
    Report := MB.ItemById["REG_REPORT_ACTION"].Edit() As IPrxReport;
    // Подключим модуль с макросом к регламентному отчету
    Module := MB.ItemById["IEAXMAPCHART_ACTION"];
    Assemb := Report.Assemblies;
    i := Assemb.Add(Module);
    // Создадим новый объект «визуализатор»
    ActiveSheet := Report.ActiveSheet;
    Table := ActiveSheet As IPrxTable;
    Objects := Table.TabSheet.Objects;
    Rect.Create(00100100);
    AddObj := Objects.Add("PrxVisualizer", Rect);
    Obj := AddObj.Extension As IPrxVisualizer;
    // Получим аналитическую область данных
    DA := Report.DataArea;
    // Получим срез данных
    Slice := DA.Slices.Item[0];
    // В качестве визуализатора добавим карту
    SlObj := Slice.Views.AddByType(EaxObjectType.eotMapChart) As IEaxVisualizer;
    Obj.EaxVisualizer := SlObj As IEaxVisualizer;
    MapChart := Obj.EaxVisualizer As IEaxMapChart;
    MapChart.Enabled := True;
    MapChart.Visible := True;
    MapChart.Topobase := MB.ItemById["MAP"].Edit() As Topobase;
    // Определим макрос для обработки событий
    MapChart.Action := "REG_REPORT_ACTION.Action";
    MapChart.DoAction("RF");
    // Обновим карту
    MapChart.Refresh();
    // Сохраним изменения
    (Report As IMetabaseObject).Save();
End Sub;

// Обработчик событий
Public Sub Action(n: Object);
Var
    Report: IPrxReport;
    PrxReport: PrxReportClass = New PrxReportClass();
    Table: IPrxTable;
    Objects: ITabObjects;
    Object: IPrxVisualizer;
    MapChart: IEaxMapChart;
    Map: IVZMapChart;
    i: Integer;
    RootLayer: IVZMapChartLayer;
    Shapes: IVZMapChartShapes;
Begin
    If n = Null Then
        Return;
    End If;
    // Получим карту в качестве визуализатора
    Report := PrxReport.ActiveReport[Null];
    Table := Report.ActiveSheet As IPrxTable;
    Objects := Table.TabSheet.Objects;
    Object := Objects.Item[0].Extension As IPrxVisualizer;
    MapChart := Object.EaxVisualizer As IEaxMapChart;
    Map := MapChart.MapChart;
    // Получим слой карты
    RootLayer := Map.RootLayer.LayerById("Regions");
    // Получим территории карты
    Shapes := RootLayer.Shapes;
    // В ячейке G8 будет отображаться идентификатор территории
    If n Is String Then
        For i := 0 To Shapes.Count - 1 Do
        If Shapes.Item[i].Name = (n As String) Then
            Table.TabSheet.Cell[77].Value := Shapes.Item[i].Name;
        End If;
        End For;
    End If;
End Sub Action;

См. также:

IEaxMapChart