AreaAction: String;
Свойство AreaAction определяет макрос для обработки событий карты.
Примечание. Объект среды разработки, в котором содержится реализация макроса, должен быть подключен к регламентному отчету.
В зависимости от того, где находится реализация макроса, различается способ указания пути к макросу в данном свойстве:
Макрос реализован в модуле/форме репозитория: <идентификатор модуля/формы>.<наименование макроса>;
Макрос реализован в одном из объектов сборки репозитория: <идентификатор сборки>.<наименование макроса>;
Макрос реализован в одном из объектов .NET-сборки репозитория: <пространство имен .NET-сборки>.<наименование класса>.<наименование макроса>.
В модулях/формах репозитория реализация пользовательских макросов должна производиться в глобальном пространстве имен (Global Scope).
В .NET-модулях/.NET-формах репозитория реализация пользовательских макросов должна производиться в каком-либо классе. Макрос должен представлять из себя статическую процедуру/функцию.
Для выполнения примера создайте модуль с идентификатором «Module», содержащий процедуру «ModMapClick». Подключите системные сборки: Ui, Report, Forms.NET (для примера Fore.NET).
Sub ModMapClick(TerrId: Variant; Map: IPrxMap);
Begin
WinApplication.InformationBox("Код территории = " + (TerrId As Integer).ToString);
End Sub ModMapClick;
Создайте регламентный отчет с идентификатором «REGULAR_REPORT», на листе которого расположена карта с исходными данными. Добавьте созданный модуль в модули отчета.
Создайте модуль, который назначает обработчик события карты. Подключите системные сборки: Metabase, Report, Tab.
Sub UserProc;
Var
Metabase: IMetabase;
Report: IPrxReport;
TabSheet: ITabSheet;
Map: IPrxMap;
Begin
Metabase := MetabaseClass.Active;
Report := Metabase.ItemById("REGULAR_REPORT").Edit As IPrxReport;
TabSheet := (Report.ActiveSheet As IPrxTable).TabSheet;
Map := TabSheet.Objects.Item(0).Extension As IPrxMap;
Map.AreaAction := "Module.ModMapClick";
(Report As IMetabaseObject).Save;
End Sub UserProc;
В регламентном отчете добавится обработчик события для карты, при нажатии на любой из регионов будет выдаваться сообщение с кодом территории.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Модуль для сообщения с кодом территории:
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Ui;
Imports Prognoz.Platform.Forms.NET;
Public Shared Sub ModMapClick(TerrId: object; Map: IPrxMap);
Var
WinAppCls: WinApplicationClass = New WinApplicationClassClass();
Begin
WinAppCls.InformationBox("Код территории = " + (TerrId As integer).ToString(), Null);
End Sub ModMapClick;
Модуль для назначения обработчика события карты:
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Tab;
Public Shared Sub Main(Params: StartParams);
Var
Metabase: IMetabase;
Report: IPrxReport;
TabSheet: ITabSheet;
Map: IPrxMap;
Begin
Metabase := Params.Metabase;
Report := Metabase.ItemById["REGULAR_REPORT"].Edit() As IPrxReport;
TabSheet := (Report.ActiveSheet As IPrxTable).TabSheet;
Map := TabSheet.Objects.Item[0].Extension As IPrxMap;
Map.AreaAction := "Module.Program.ModMapClick";
(Report As IMetabaseObject).Save();
End Sub;
См. также: